Go 1.25 yayımlandı
(go.dev)Go 1.25 sürümü resmi olarak yayımlandı. Bu sürüm; araçlar, runtime, derleyici ve standart kütüphane genelinde iyileştirmeler içeriyor ve özellikle kullanıcıların önceden deneyip geri bildirim verebileceği önemli deneysel özellikler sunuyor.
- Başlıca özellikler:
- Go 1 sürümüyle uyumluluğun korunması
- Araçlar, runtime, derleyici ve kütüphaneler genelinde kapsamlı iyileştirmeler
- Yeni deneysel özelliklerin eklenmesi (GreenTea GC,
json/v2paketi)
Temel deneysel özellikler
Go 1.25, performans ve işlevselliği iyileştirmeyi hedefleyen iki önemli deneysel özellik içeriyor; kullanıcılar bunları ortam değişkenleri üzerinden etkinleştirebilir.
Yeni GreenTea çöp toplayıcı (GC)
Amaç, çok sayıda küçük nesne işlenirken ortaya çıkan GC ek yükünü azaltarak performansı artırmaktır.
- Çalışma şekli: 512 bayttan küçük nesneleri 8KiB boyutunda
memory spanbirimleri hâlinde gruplayarak GC uygular. Bu sayede bellek yerelliği (locality) artar ve CPU önbelleği verimliliği en üst düzeye çıkar. - Beklenen etkiler:
- Bellek sıçraması maliyetinin azalması sayesinde GC performansının artması
- Çok çekirdekli ortamlarda verimli çalışma
- Küçük nesne tahsis ek yükü ile bellek parçalanmasının azalması
- Etkinleştirme yöntemi: Derleme sırasında
GOEXPERIMENT=greenteagcortam değişkenini ayarlama
Yeni encoding/json/v2 paketi
Mevcut encoding/json (v1) içindeki tutarsızlıkları, öngörülemez davranışları ve performans sorunlarını çözmek için yeniden tasarlanmış bir JSON uygulamasıdır.
-
Temel hedefler:
- Doğruluk ve öngörülebilirliğin artırılması: Varsayılan olarak daha katı kurallar uygular (ör. büyük/küçük harf duyarlılığı, yinelenen anahtarların yasaklanması) ve beklenmedik davranışları azaltır.
- Performans iyileştirmesi: Ayrıştırma ve kodlama altyapısı yeniden tasarlanarak verimlilik artırılmıştır.
- Esneklik ve denetimin genişletilmesi: Geliştiricilerin JSON işleme biçimini ayrıntılı şekilde kontrol etmesini sağlayan gelişmiş bir seçenek sistemi sunar.
-
Başlıca değişiklikler (v1'e kıyasla v2):
- Alan adı eşleştirme: v1'deki büyük/küçük harf duyarsız yaklaşımın aksine, v2 varsayılan olarak büyük/küçük harfi tam olarak ayırt eder.
omitemptyetiketinin anlamı değişti: v1, Go değerinin “boş durumu”na (0, false, nil vb.) göre alanı atlıyordu; v2 ise kodlanmış JSON değerinin “boş durumu”na (null,"",{},[]) göre atlar.nilslice ve map işleme: v1 bunlarınullolarak marshal ediyordu; v2 ise varsayılan olarak sırasıyla[](boş dizi) ve{}(boş nesne) olarak marshal eder.- Dizi unmarshal etme: v1, JSON dizisi ile Go dizisinin uzunlukları farklı olsa da buna izin veriyordu; v2 ise uzunlukların tam olarak eşleşmesini ister, aksi durumda hata döndürür.
- Yinelenen anahtar işleme: v1 yinelenen anahtarlara izin veriyordu (son değer üzerine yazılırdı); v2 ise varsayılan olarak hata döndürür ve doğruluk ile güvenliği güçlendirir.
- Geçersiz UTF-8 işleme: v1 geçersiz UTF-8 karakterlerini otomatik olarak değiştiriyordu (
\uFFFD); v2 ise varsayılan olarak hata döndürür ve veri bozulmasını önler.
-
Yeni özellikler ve yapı:
- Modüler yapı: Düşük seviyeli sözdizimi ayrıştırmasını (
jsontextpaketi) yüksek seviyeli anlamsal dönüşümden (json/v2paketi) ayırarak kodun açıklığını ve performansı iyileştirir. - Güçlü seçenek sistemi:
json.Optionsile çeşitli davranışlar ayrıntılı biçimde kontrol edilebilir; hatta v1 davranışı tamamen yeniden üretilebilir. - Harici türlerin işlenmesi:
WithMarshalers,WithUnmarshalersseçenekleri sayesindeMarshaler/Unmarshalerarayüzlerini uygulamayan harici paket türleri için serileştirme/deserileştirme mantığı eklenebilir.
- Modüler yapı: Düşük seviyeli sözdizimi ayrıştırmasını (
-
Etkinleştirme yöntemi: Derleme sırasında
GOEXPERIMENT=jsonv2ortam değişkenini ayarlama
Başlıca değişiklikler ve iyileştirmeler
Bu sürümde, geliştirme verimliliğini ve program çalışma etkinliğini artırmaya yönelik çeşitli iyileştirmeler yapıldı.
-
Runtime
- Konteyner ortamını algılayan GOMAXPROCS: Linux ortamında cgroup CPU sınırlarını otomatik olarak algılayarak
GOMAXPROCSvarsayılanını ayarlar ve CPU kaynağı değiştiğinde bunu dinamik olarak günceller. - Trace Flight Recorder: Nadir görülen hataları ayıklamak için runtime izlerini bellekteki bir halka tamponda sürekli kaydeden hafif bir izleme özelliği sunar.
- Konteyner ortamını algılayan GOMAXPROCS: Linux ortamında cgroup CPU sınırlarını otomatik olarak algılayarak
-
Araçlar ve derleyici
- nil pointer hatası düzeltildi: Go 1.21'den beri var olan ve nil pointer denetimini geciktiren derleyici hatası düzeltildi; daha önce anormal biçimde başarılı olan kod artık beklenen şekilde panic üretir.
- DWARF5 desteği: Hata ayıklama bilgisinde DWARF sürüm 5 kullanılarak ikili dosya boyutu ve bağlama süresi azaltıldı.
- Yeni
go.mod ignoreyönergesi:gokomutunun belirli dizinleri yok sayması sağlanabiliyor.
-
Standart kütüphane
testing/synctestpaketinin eklenmesi: Eşzamanlılık kodu testlerini destekleyen yeni bir paket olup, testleri sanallaştırılmış zaman içinde yalıtılmış şekilde çalıştırabilir.cryptopaketinde performans artışı: FIPS modundaecdsaveed25519imza hızı 4 kat arttı; SHA hashleme hızı da iyileştirildi.net/httpiçin CrossOriginProtection eklendi: Modern tarayıcıların Fetch metadata özelliğini kullanarak CSRF saldırılarına karşı savunma sağlayan yeni bir özellik sunar.
Port ve destek değişiklikleri
- macOS: Go 1.25 ile birlikte macOS 12 Monterey veya daha yeni bir sürüm gereklidir.
- Windows: 32 bit
windows/armportu bu sürümle birlikte son kez desteklenecek.
Henüz yorum yok.