1 puan yazan GN⁺ 2024-02-08 | 1 yorum | WhatsApp'ta paylaş
  • Go 1.22 sürümü, Go 1.21'den 6 ay sonra yayımlandı.
  • Değişikliklerin çoğu araç zinciri, çalışma zamanı ve kütüphanelerin uygulanmasında yer alıyor.
  • Go 1 uyumluluk sözü korunuyor ve neredeyse tüm Go programlarının eskisi gibi derlenip çalışması bekleniyor.

Dil değişiklikleri

  • for döngüsüyle ilgili iki değişiklik var.
    • Önceden for döngüsü tarafından tanımlanan değişkenler bir kez oluşturulup her yinelemede güncelleniyordu; Go 1.22'de ise döngünün her yinelemesi yeni bir değişken oluşturarak yanlışlıkla paylaşılmasından kaynaklanan hataları önlüyor.
    • for döngüsü artık tamsayılar üzerinde aralık belirtebiliyor.

Araçlar

Go komutu

  • Çalışma alanında vendor dizini kullanılarak bağımlılıklar yönetilebiliyor.
  • go get, artık modül olmayan eski GOPATH modunda desteklenmiyor.
  • go mod init, artık diğer vendoring araçlarının yapılandırma dosyalarından modül gereksinimlerini içe aktarmaya çalışmıyor.
  • go test -cover, artık kendi test dosyası olmayan paketler için de kapsam özetini çıktı olarak veriyor.

Trace

  • trace aracının web arayüzü, yeni tracer'ı desteklemek için kısmen yeniden tasarlandı.

Vet

  • vet aracının döngü değişkenlerine yönelik davranışı değişti.
  • append çağrısına değer eklenmediğinde yeni bir uyarı eklendi.
  • time.Since ifadesinin defer deyiminde kullanılmasıyla ortaya çıkan sorun için yeni bir uyarı eklendi.
  • log/slog çağrılarında anahtar-değer çiftleri eşleşmediğinde yeni bir uyarı eklendi.

Çalışma zamanı

  • Tür tabanlı çöp toplama meta verilerinin heap nesnelerine daha yakın tutulmasıyla CPU performansı %1-3 artırıldı.

Derleyici

  • Profil güdümlü optimizasyon (PGO) derlemeleri artık öncekine göre daha fazla çağrıyı devirtualize edebiliyor.

Bağlayıcı

  • Bağlayıcının -s ve -w bayrakları, tüm platformlarda daha tutarlı çalışacak şekilde değiştirildi.

Bootstrap

  • Go 1.22, bootstrap için Go 1.20'nin son nokta sürümünü veya daha yenisini gerektiriyor.

Çekirdek kütüphaneler

Yeni math/rand/v2 paketi

  • math/rand/v2, standart kütüphanenin ilk “v2” paketi ve math/rand ile karşılaştırıldığında birçok önemli değişiklik içeriyor.

Yeni go/version paketi

  • Go sürüm dizelerini doğrulayan ve karşılaştıran işlevleri uygulayan yeni go/version paketi eklendi.

Geliştirilmiş yönlendirme kalıpları

  • Standart kütüphanedeki HTTP yönlendirmesi daha ifade gücü yüksek olacak şekilde geliştirildi.

Kütüphanelerde küçük değişiklikler

  • Çeşitli kütüphanelerde küçük değişiklikler ve performans iyileştirmeleri bulunuyor.

Portlar

Darwin

  • macOS'ta 64 bit x86 mimarisinde (darwin/amd64 portu) Go araç zinciri artık varsayılan olarak position-independent executable (PIE) üretiyor.

Arm

  • GOARM ortam değişkeni kullanılarak yazılım ya da donanım kayan nokta seçilebiliyor.

Loong64

  • loong64 portu artık işlev argümanlarını ve sonuçlarını register'lar üzerinden iletiyor.

OpenBSD

  • OpenBSD'de big-endian 64 bit PowerPC (openbsd/ppc64) için deneysel bir port eklendi.

GN⁺ görüşü

  • Bu Go 1.22 sürümünde özellikle for döngüsündeki değişiklikler ve yeni math/rand/v2 paketinin eklenmesi dikkat çekiyor. Bu değişiklikler Go geliştiricilerine daha iyi performans ve kararlılık sağlarken, yeni özellikler de Go dilinin gelişimini yansıtıyor.
  • math/rand/v2 paketi, daha hızlı algoritmalar ve yeni API ile daha iyi rastgele sayı üretimi sunuyor; bu da kriptografi ve rastgeleliğe bağlı diğer uygulamalar için önemli bir iyileştirme anlamına geliyor.
  • Go 1.22'nin, uyumluluğu korurken performansı ve geliştirici deneyimini iyileştiren çeşitli optimizasyonlar ve yeni özellikler sunarak Go topluluğu üzerinde olumlu bir etki yaratması bekleniyor.

1 yorum

 
GN⁺ 2024-02-08
Hacker News görüşleri
  • Yakın zamanda Go diline geçen bir TypeScript geliştiricisi deneyimini paylaşıyor. Başlangıçta Go'da dizi fonksiyonlarının azlığı ve esnek olmayan tip sistemi konusunda endişe duyduğunu belirtiyor. Ancak Go kullandıkça standart kütüphanenin kalitesini, tip güvenliğini ve yerleşik kodlama standartlarının avantajlarını fark ettiğini söylüyor. Routing'in de standart kütüphaneye entegre edilmesini olumlu değerlendiriyor.
  • Go 1.22 sürümü için etkileşimli sürüm notları sunan bir bağlantı paylaşılıyor.
  • 9 yıldan uzun süredir Go kullanan bir geliştirici, Dart'ı (Flutter geliştirmek için) Go ile karşılaştırıyor. Dart mümkün olan her özelliği eklemeye çalışırken, Go bunun tersine sadeliği hedefliyor. Dart'ta sınıf başlatma yöntemlerinin çeşitlenmesi kafa karıştırıcı hale gelirken, Go'nun sadeliğini özlediğini söylüyor. Dart'taki map/stream vb. kullanılan karmaşık tek satırlık ifadeler, debug sırasında veya yeni başlayan geliştiriciler için kafa karıştırıcı olabilir.
  • io.Copy, TCPConn'dan UnixConn'a kopyalama yaparken artık Linux'un splice(2) sistem çağrısını kullanabiliyor. io paketinde bu tür kalıplarla elde edilebilen kazanımlar takdir ediliyor.
  • Go 1.22 sürümünde routing pattern'ları iyileştirildi, ancak bu nedenle küçük uyumluluk sorunları ortaya çıkabilir. Bu durum httpmuxgo121 alanı üzerinden kontrol edilebiliyor.
  • Bazı geliştiriciler Go diline eklenen "function scope" özelliğini beğenmiyor. Bu özelliğin, dile kattığı karmaşıklığa kıyasla yeterli kolaylık sağlamadığını ve Go'nun açık ve sade tarzına uymadığını düşünüyorlar.
  • Go 1.22 sürümünde döngülerin her iterasyonda yeni bir değişken oluşturmasıyla ilgili tartışma bağlantısı paylaşılıyor.
  • sql.Null[T] eklemesi memnuniyetle karşılanıyor. Daha önce sqlboiler içindeki null kullanılıyordu; bu yapı sql.Null ile benzer bir API sunuyor, ayrıca bir değerin açıkça ayarlanıp ayarlanmadığını gösteren IsSet() bool metodunu da içeriyor.
  • Standart kütüphaneye routing eklenmesi memnuniyetle karşılanıyor ve chi kütüphanesinin kaldırılıp kaldırılamayacağı değerlendiriliyor.
  • Go'yu production'da kullanan geliştiriciler arasında, yeni sürümlere hızlı geçiş yapılıp yapılmadığı ya da eski sürümlerde uzun süre kalınıp kalınmadığı tartışılıyor. any anahtar kelimesinin kullanımı hakkında da görüşler paylaşılıyor.