GoSuda

Go 1.24 Sürüm Genel Bakışı: Swiss Table Maps, ML-KEM, os.Root ve testing/synctest

By Lemon Mint views ...

Go 1.24, performans, güvenlik ve geliştirici deneyimine odaklanan bir dizi iyileştirme sunarak önemli bir sürüm olmaya hazırlanıyor. Bu değişiklikler, Go'yu modern uygulamalar geliştirmek için daha da güçlü ve verimli hale getirmeyi amaçlamaktadır.

Performans Artışı

Temsili bir kıyaslama paketi genelinde CPU yükünde %2-3 oranında azalma sağlayan genel bir performans iyileştirmesi. Bu iyileştirmeler, yeni yerleşik bir map uygulamasını, küçük nesnelerin daha verimli bellek tahsisini ve yeni bir çalışma zamanı içi mutex uygulamasını kapsamaktadır. Sonuçlar uygulamaya göre değişebilir.

Kuantum Sonrası Kriptografi

ML-KEM-768 ve ML-KEM-1024'ü uygulayan crypto/mlkem paketinin tanıtımı. ML-KEM, daha önce Kyber olarak bilinen ve FIPS 203'te belirtilen, kuantum sonrası bir anahtar değişim mekanizmasıdır. Bu ekleme, Go'yu kriptografik güvenliğin geleceğine hazırlamaktadır.

TLS Geliştirmesi

TLS'de Şifreli Client Hello (ECH) desteği. Bu özellik, Config.EncryptedClientHelloKeys alanı doldurularak etkinleştirilebilir ve TLS bağlantıları için gizlilik ve güvenliği artırır.

Yeni Swiss Table Map

Daha iyi performans için geliştirilmiş bir map uygulaması. Bu yeni uygulama Swiss Tables temelli olup, GOEXPERIMENT=noswissmap derleme bayrağı ile devre dışı bırakılabilir.

Sync Map Güncellemesi

sync.Map içindeki map değişiklikleri için geliştirilmiş performans. Büyük map'lerde birbirinden ayrık anahtar kümelerinin değiştirilmesi çekişmeye (contention) girme olasılığı çok daha düşüktür ve map'ten düşük çekişmeli yüklemeler elde etmek için artık herhangi bir ısınma süresi gerekmemektedir. Sorunlarla karşılaşırsanız, GOEXPERIMENT=nosynchashtriemap kullanarak eski uygulamaya geri dönebilirsiniz.

Geliştirilmiş JSON Marshaling

JSON marshaling sırasında struct alanlarının daha akıllı bir şekilde atlanmasını sağlayan yeni bir omitempty etiket seçeneği. Marshaling sırasında, omitempty seçeneğine sahip bir struct alanının değeri sıfır ise o alan atlanır. Alan türünün IsZero() bool metodu varsa, değerin sıfır olup olmadığını belirlemek için bu metot kullanılır.

Çalışma Zamanı Temizliği

SetFinalizer yerine kaynak yönetimini iyileştirmek için AddCleanup fonksiyonunun tanıtımı. SetFinalizer'dan farklı olarak, bağlı olduğu nesneyi sonlandırma için yeniden canlandırmaz ve tek bir nesneye birden fazla temizleme işlemi eklenebilir. Yeni kodda SetFinalizer yerine AddCleanup tercih edilmelidir.

go.mod'da Araç Yönergeleri

go.mod içindeki araç yönergeleri kullanılarak geliştirilmiş çalıştırılabilir bağımlılık takibi. Bu, araçların "tools.go" olarak adlandırılan bir dosyaya boş içe aktarmalar olarak eklenmesi yönündeki önceki geçici çözüm ihtiyacını ortadan kaldırır.

Dizin Sınırlı Erişim

Denetimli dosya sistemi işlemleri için yeni os.Root türü. os.Root türü, belirli bir dizin içinde dosya sistemi işlemleri gerçekleştirme olanağı sağlayarak belirtilen yol dışındaki erişimi engeller.

Test İyileştirmeleri

Eşzamanlı kodu test etmek için yeni testing/synctest paketi. synctest.Run fonksiyonu, yalıtılmış bir "balon" içinde bir grup goroutine başlatır ve synctest.Wait fonksiyonu, mevcut balondaki tüm goroutine'lerin bloke olmasını bekler. Bu paket deneyseldir ve derleme zamanında GOEXPERIMENT=synctest ayarlanarak etkinleştirilmelidir.

Derleme Önbelleği

go run ile çalıştırılan programlar artık daha hızlı yürütme için önbelleğe alınmaktadır. Bu, tekrarlanan yürütmeleri hızlandırırken önbelleğin boyutunu artırmanın bedelini getirmektedir.

Cgo Performansı

Daha iyi Cgo performansı için yeni #cgo noescape ve #cgo nocallback açıklamaları. #cgo noescape cFunctionName, C fonksiyonuna geçirilen belleğin kaçmadığını (escape etmediğini) derleyiciye bildirir. #cgo nocallback cFunctionName, C fonksiyonunun herhangi bir Go fonksiyonunu geri çağırmadığını derleyiciye bildirir.

Zayıf İşaretçiler

Bellek geri kazanımını engellemeden belleğe güvenli bir şekilde başvurmak için zayıf işaretçi desteği. Zayıf işaretçiler, değerleri ilişkilendirmek için zayıf map'ler, kanonikleştirme map'leri ve çeşitli önbellek türleri gibi bellek açısından verimli yapıların oluşturulmasını sağlamak üzere sunulan düşük seviyeli bir ilkeldir.

Kıyaslama İyileştirmesi

Daha hızlı ve daha az hataya açık kıyaslamalar için yeni testing.B.Loop metodu. Kıyaslama fonksiyonu, her -count için tam olarak bir kez yürütülür, bu nedenle pahalı kurulum ve temizleme adımları yalnızca bir kez çalışır. Fonksiyon çağrı parametreleri ve sonuçları canlı tutulur, böylece derleyicinin döngü gövdesini tamamen optimize etmesi engellenir.

Go 1.24, dilin ve ekosisteminin çeşitli yönlerinde önemli iyileştirmeler sunarak önemli bir sürüm olmaya hazırlanıyor.

Go 1.24'e Genel Bakış