3 puan yazan lemonmint 2024-12-20 | 4 yorum | WhatsApp'ta paylaş

[IMG] Overview of Go 1.24

Go 1.24 sürümü, performans, güvenlik ve geliştirici deneyimine odaklanan çeşitli iyileştirmeler sunarak önemli bir sürüm olmaya aday görünüyor. Bu değişiklikler, Go'yu modern uygulamalar geliştirmek için daha güçlü ve daha verimli hale getirmeyi amaçlıyor.

Performans iyileştirmeleri

Temsili kıyaslama paketlerinde CPU ek yükünü %2~3 azaltan genel performans iyileştirmeleri yapıldı. Bu iyileştirmeler arasında yeni yerleşik map uygulaması, küçük nesneler için daha verimli bellek ayırma ve çalışma zamanı içinde yeni mutex uygulaması yer alıyor. Sonuçlar uygulamaya göre değişebilir.

Kuantuma dayanıklı kriptografi

ML-KEM-768 ve ML-KEM-1024'ü uygulayan crypto/mlkem paketi tanıtıldı. ML-KEM, daha önce Kyber olarak biliniyordu ve FIPS 203'te tanımlanan kuantuma dayanıklı bir anahtar değişim mekanizmasıdır. Bu ekleme, Go'yu geleceğin kriptografik güvenliğine hazırlıyor.

Encrypted Client Hello

TLS içinde ECH (Encrypted Client Hello) desteği sunuluyor. Bu özellik, Config.EncryptedClientHelloKeys alanı doldurularak etkinleştirilebiliyor ve TLS bağlantılarında gizlilik ile güvenliği artırıyor.

Yeni Swiss Table Map

Daha iyi performans için geliştirilmiş bir map uygulamasıdır. Bu yeni uygulama Swiss Tables tabanlıdır ve GOEXPERIMENT=noswissmap derleme bayrağı kullanılarak devre dışı bırakılabilir.

Sync Map güncellemesi

sync.Map içinde map değiştirme performansı iyileştirildi. Ayrı anahtar kümelerindeki değişikliklerin daha büyük map'lerde çekişmeye neden olma olasılığı artık çok daha düşük ve map içinde düşük çekişmeli yük elde etmek için gereken hazırlık süresi artık yok. Sorun yaşanırsa GOEXPERIMENT=nosynchashtriemap kullanılarak önceki uygulamaya geri dönülebilir.

Geliştirilmiş JSON marshaling

JSON marshaling sırasında struct alanlarını daha akıllı biçimde atlamak için yeni omitempty etiket seçeneği eklendi. Marshal sırasında omitempty seçeneğine sahip bir struct alanının değeri 0 ise alan atlanır. Alan türünde IsZero() bool yöntemi varsa, değerin 0 olup olmadığını kontrol etmek için bu yöntem kullanılır.

Runtime temizliği

Daha iyi kaynak yönetimi için SetFinalizer yerine geçen AddCleanup fonksiyonu tanıtıldı. SetFinalizer'dan farklı olarak, sonlandırma için bağlı nesneyi yeniden canlandırmaz ve tek bir nesneye birden fazla cleanup bağlanmasına izin verir. Yeni kodlarda SetFinalizer yerine AddCleanup tercih edilmelidir.

go.mod içindeki tool yönergesi

go.mod içindeki tool yönergesi sayesinde araç bağımlılıklarının takibi iyileştirildi. Böylece önceki geçici çözüm olan, geleneksel olarak "tools.go" adlı bir dosyaya araçları boş import ile ekleme gerekliliği ortadan kalktı.

Dizinle sınırlı erişim

Denetimli dosya sistemi işlemleri için yeni os.Root türü eklendi. os.Root türü, belirli bir dizin içinde dosya sistemi işlemleri yapabilme imkanı sunarak belirtilen yolun dışına erişimi engeller.

Test iyileştirmeleri

Eşzamanlı kod testi için yeni testing/synctest paketi sunuldu. synctest.Run fonksiyonu, izole bir "bubble" içinde bir goroutine grubunu başlatır; synctest.Wait fonksiyonu ise mevcut bubble içindeki tüm goroutine'ler engellenene kadar bekler. Bu paket deneyseldir ve derleme sırasında GOEXPERIMENT=synctest ayarlanarak etkinleştirilmelidir.

Derleme önbelleği

go run çalıştırılabilir dosyaları artık daha hızlı yürütme için önbelleğe alınıyor. Bu sayede önbellek büyüse de tekrar eden çalıştırmalar hızlanıyor.

Cgo performansı

Daha iyi Cgo performansı için yeni #cgo noescape ve #cgo nocallback anotasyonları eklendi. #cgo noescape cFunctionName, derleyiciye C fonksiyonuna geçirilen belleğin escape etmediğini bildirir. #cgo nocallback cFunctionName ise derleyiciye C fonksiyonunun Go fonksiyonlarını tekrar çağırmayacağını bildirir.

Zayıf pointer'lar

Toplanmayı engellemeden belleğe güvenli şekilde başvurmak için zayıf pointer desteği sunuluyor. Zayıf pointer'lar; değer ilişkilendirme için zayıf map'ler, canonicalization map'leri ve çeşitli önbellek türleri gibi bellek açısından verimli yapılar oluşturmayı mümkün kılan düşük seviyeli temel yapı taşlarıdır.

Benchmark testi iyileştirmeleri

Daha hızlı ve daha az hatalı benchmark'lar için yeni testing.B.Loop yöntemi eklendi. Benchmark fonksiyonları -count başına tam olarak bir kez çalıştırılır; böylece maliyetli kurulum ve cleanup adımları yalnızca bir kez yürütülür. Fonksiyon çağrısı parametreleri ve sonuçları korunduğundan, derleyici döngü gövdesini tamamen optimize edemez.

Go 1.24 sürümü, dilin ve ekosisteminin çeşitli yönlerinde önemli iyileştirmeler sunan kayda değer bir sürüm olmaya aday görünüyor.

4 yorum

 
secret3056 2024-12-20

Go kullananlar var mı, acaba görmek istediğiniz özellikler neler?
Ben .? ve ?? gibi operatörlerin, mümkünse bir de makroların olmasını isterdim.

Açıkçası struct tag bir hataydı.

 
gkswnsqja 2024-12-20

Ben de kişisel olarak makroların artık gelmesini gerçekten isterdim; daha ne zamana kadar generate etmek zorundayız hıçkırık

 
qkrqjadn 2024-12-20

struct tag'in neden bir hata olduğunu merak ediyorum.

 
secret3056 2024-12-20

Araç desteği almanın zor olması en büyük sorun.

  • String olduğu için yazım hatası olsa bile hatayı bulmak zor.
  • json dışında otomatik tamamlama ya da IntelliSense yok.
  • Birden fazla araç kullanırken hepsini tek satıra yazmak gerekiyor; bunun okunabilirliği düşürdüğü hissinden kaçınmak mümkün değil.

gomodifytags da çıkalı epey oldu ama VSC’nin Go uzantısıyla entegrasyonu da oldukça geç geldi.