deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Go 1.27 generic methodlarla geliyor: Go 1.18'den beri açık kalan bir boşluk kapanıyor

Go 1.27, metotların kendi tip parametrelerini bildirmesine izin vererek, yıllarca süren topluluk baskısının ardından generics'in Go 1.18 ile geldiğinden beri yürürlükte olan bir kısıtlamaya son veriyor.

Go 1.27 generic methodlarla geliyor: Go 1.18'den beri açık kalan bir boşluk kapanıyor

Generic metotlar Go 1.27'de geliyor

Ağustos 2026'da yayınlanan Go 1.27, generic metotları resmi olarak destekliyor: metotlar artık kendi tip parametrelerini bildirebiliyor. Sürümü ele alan bir dev.to makalesine göre bu değişiklik, generics'in Şubat 2022'de Go 1.18 ile geldiğinden beri uygulanan bir kısıtlamayı ortadan kaldırıyor. O sürüm, paket düzeyindeki fonksiyonlarda ve tiplerde tip parametrelerine izin veriyordu; ancak bir receiver'a bağlı bir metot yalnızca tanımlandığı tipin tip parametrelerini kullanabiliyordu — yenilerini tanıtamıyordu.

Özelliğin olanak sağladıkları

Klasik örnek bir collection tipi. List[T]'yi List[U]'ya dönüştürmek daha önce, listeyi ve bir dönüşüm fonksiyonunu argüman olarak alan bağımsız bir paket düzeyi fonksiyon gerektiriyordu. Go 1.27 ile aynı işlem doğrudan tip üzerinde bir metot olarak bildirilebiliyor; bu da akıcı, zincirlenebilir API'leri mümkün kılıyor.

dev.to makalesi, bundan yararlanan kütüphane türlerine işaret ediyor: zincirlenen Map ve Filter çağrılarıyla yazılan stream işleme pipeline'ları, Assert(actual).ToBe(expected) tarzında okunabilir test assertion'ları ve On(obj.Sum).WithArgs(7, 8).ThenReturn(15) gibi mocking arayüzleri. Standart kütüphanenin kendisi de bu deseni benimsiyor — makale, math/rand/v2'nin generic fonksiyonu N'yi bir Rand receiver'ı üzerindeki generic bir metota taşıdığını belirtiyor.

Go 1.18 neden bunu atladı

Bu eksiklik bir mühendislik kararıydı, ilgi eksikliği değil. Makalenin açıkladığı gibi, Go generics'i değerlerin yanında bir tip sözlüğü geçirerek uygular; metotların kendi tip parametrelerini taşımasına izin vermek, bu sözlüklerin metot değerleri ve arayüzler boyunca akışını zorunlu kılar ki bu, fonksiyon durumundan çok daha zordur. Ayrıca bir generic metodun hiçbir zaman bir arayüzü uygulayıp uygulayamayacağı ve uygulayacaksa tip kontrolünün nasıl çalışacağı konusunda uzun süre çözülmemiş bir tasarım sorusu da vardı.

O dönemden iki ifade tasarım ekibinin tutumunu özetliyor. Go'nun generics tasarımcılarından Ian Lance Taylor, Ekim 2021'de öneri hakkında, birisi bunun nasıl uygulanacağını açıklayamadığı sürece uygulanamaz olduğunu yorumladı. Dönemin Go SSS'si ise dilin hiçbir zaman generic metot eklemeyi beklemediğini açıkça belirtiyordu.

Beş yıllık topluluk baskısı

20 Ekim 2021'de — Go 1.18 yayınlanmadan birkaç ay önce — açılan golang/go #49085 numaralı öneri, bir Go dil önerisi için alışılmadık derecede yüksek bir rakam olan 900'den fazla oy topladı. Yorumcular, varsayımsal dilekler yerine somut kullanım senaryoları katmaya devam ettiler. Yaklaşık beş yıl boyunca teknik engeller aşıldı, özgün öneri gerçek uygulamayı taşıyan #77273 numaralı issue'nun kopyası olarak kapatıldı ve özellik Go 1.27 ile yayınlandı.

Go'nun kurucularından Robert Griesemer, hikâyenin arka planını, resmi GoLand hesabının Ağustos 2026 sonunda yayınladığı kısa bir videoda anlattı. dev.to makalesinin aktardığına göre, belirleyici faktör, bu kullanım senaryolarının lüks değil pratik zorunluluklar olduğunu savunan sürekli topluluk geri bildirimi oldu.

Hâlâ izin verilmeyenler

Sürüm, özelliği bilinçli olarak sınırlıyor. Arayüz metotları hâlâ kendi tip parametrelerini bildiremiyor ve generic metotlar arayüz metotlarını karşılayamıyor. Uygulamada generic metotlar struct gibi somut tiplerde çalışıyor; generic arayüz metotlarının daha geniş sorusu ise gelecekteki tasarım çalışmalarına bırakılmış durumda. Makale ayrıca API'lerin ve sürüm ayrıntılarının değişebileceği konusunda uyarıyor; bu nedenle geliştiricilerin güncel belgeleri doğrulaması gerekiyor.

Neden önemli

Go geliştiricileri için bu, uzun süredir devam eden bir ergonomi tavanını kaldırıyor: DSL'ler, builder'lar ve pipeline kütüphaneleri artık, okuyucuyu işlemi anlamadan önce argümanları çözümlemeye zorlayan paket düzeyi fonksiyonlar yerine doğal metot zincirleme kullanabiliyor. Dil evrimini izleyenler için bu, bir açık kaynak projesinin kesin bir şekilde açıklanmış bir tutumu nasıl tersine çevirebildiğinin de bir vaka çalışması — bir zamanlar fikri uygulanamaz olarak tanımlayan bir tasarım ekibi, topluluk ihtiyacı gösterdiğinde ve uygulama soruları yanıt bulduğunda bunu yayınladı.

  • #golang
  • #generics
  • #programming-languages
  • #release-notes
  • #open-source

İlgili yazılar