Go 1.27 Güncellemesi Generics Desteğini Genişleterek Kod Yazımını Değiştiriyor
Go programlama dili ekibi, 1.27 sürümünü yayınlayarak generics desteğini genişletti ve geliştiricilerin daha az tekrar eden kod yazmasını sağlayacak yeni özellikler ekledi. Go 1.27 güncellemesi, generics kullanımını metotlara taşırken iç içe yapıların yönetimini kolaylaştırıyor ve bazı durumlarda tür bilgilerinin geliştirici tarafından açıkça belirtilmesi ihtiyacını azaltıyor. Yeni özellikler deneyimli geliştiricilerin kod yazma süresini kısaltırken Go’nun uzun süredir öne çıkan sade okunabilirlik anlayışı açısından yeni bir tartışmayı da beraberinde getiriyor.
Go 1.27 Generics Kullanımını Metotlara Taşıyor
Go 1.27 ile generics, daha önce fonksiyonlar ve özel veri türleriyle sınırlı olan kullanım alanından metotlara genişliyor. Generics yaklaşımı geliştiricilerin aynı işlemi int, string veya farklı sayısal türler için ayrı ayrı yazmak yerine veri türünü değişken olarak ele alan tek bir yapı oluşturmasına olanak tanıyor.
Go, generics desteğini ilk olarak 1.18 sürümüyle 2022 yılında kullanıma sunmuştu. Yeni sürümde metotların da generics yapısından yararlanabilmesi, özellikle aynı mantığın farklı veri türleri üzerinde tekrarlandığı kodlarda kopyala-yapıştır ihtiyacını azaltıyor.
Standart rastgele sayı üreticisi üzerinden verilen örnek, değişikliğin pratik etkisini ortaya koyuyor. Geliştiriciler önceki sürümlerde int32, int64 veya işlemcinin tercih ettiği int türleri için ayrı metotlar yazmak zorunda kalırken Go 1.27 ile generics kullanan ortak bir yaklaşım oluşturabiliyor.
Go 1.27, farklı veri türlerini tek bir nesne içerisinde bir araya getiren struct yapılarının kullanımında da geliştiricilere yeni kolaylıklar sağlıyor. İç içe veya gömülü alanlara değer atanırken ara yapıların tamamının tek tek belirtilmesi gerekmiyor ve derin struct hiyerarşilerinde kod yazma süreci kısalıyor.
Yeni sürüm, fonksiyonlardan veri türü çıkarma konusunda da daha esnek davranıyor. Go’nun önceki sürümlerinde generic bir fonksiyon slice literal, kanal gönderimi veya tür dönüşümü içerisinde kullanıldığında geliştiricinin tür argümanını açıkça belirtmesi gerekebiliyordu.
Go’nun yeni tür çıkarımı yaklaşımı, derleyicinin geliştiricinin verdiği bilgilerden doğru veri türünü belirlemesine daha fazla alan açıyor. Değişiklik özellikle generic fonksiyonların daha karmaşık yapılarda kullanıldığı kodlarda gereksiz tür bildirimlerini azaltırken kaynak kodun uzunluğunu da düşürüyor.
Go’nun 1.27 sürümüyle gelen özellikler geliştiricilerin daha az kod yazmasını sağlarken dilin temel tasarım hedeflerinden biri olan okunabilirlik konusunda soru işaretleri oluşturuyor. Go’nun yaratıcıları Rob Pike, Robert Griesemer ve Ken Thompson, dili 2009’da tasarlarken geliştiricilerin mevcut kodu okumaya kod yazmaktan daha fazla zaman ayırdığı düşüncesini temel tasarım ilkelerinden biri olarak benimsedi.
Generics gibi üst düzey dil özellikleri tekrarları azaltırken kaynak kodun arkasındaki işlem akışını daha soyut hale getirebiliyor. Deneyimli geliştiriciler için zaman kazandıran bir generic yapı, projeye sonradan katılan bir geliştiricinin kodun nasıl çalıştığını anlamak için daha fazla katmanı incelemesini gerektirebiliyor.
VictoriaMetrics kurucusu Aliaksandr Valialkin de daha önce generics kullanımının pratik Go kodlarının önemli bir bölümünde zorunlu olmadığını savunmuştu. ThePrimeagen adıyla tanınan yazılım geliştiricisi Michael Paulson ise daha fazla soyutlamanın farklı Go projelerindeki kodların birbirinden uzaklaşmasına ve okunabilirliğin zorlaşmasına neden olabileceğini belirtiyor.
Go 1.27’nin getirdiği soyutlama düzeyi, yalnızca insan geliştiriciler açısından değil yapay zekâ destekli yazılım geliştirme açısından da tartışılıyor. Google yöneticileri Cameron Balahan ile Richard Seroter, yapay zekânın kod üretimindeki rolü arttıkça yazılım geliştirme sürecinin ağırlık merkezinin kod yazmaktan kodu inceleme, doğrulama ve sürdürme aşamalarına kaydığını belirtiyor.
Yapay zekâ ajanlarının oluşturduğu kodun insanlar tarafından denetlenmesi gerektiği bir ortamda kaynak kodun kolay okunması, hataların daha hızlı bulunması açısından önem taşıyor. Daha karmaşık dil özellikleri insan geliştiricilerin yanında yapay zekâ ajanlarının da kodun anlamını çözmek için daha fazla bağlam işlemesine neden olabiliyor.
Go’nun gelecekte karşılaşacağı temel soru, generics ve benzeri üst düzey özelliklerin dilin sadeliğiyle nasıl dengeleneceği olacak. Yapay zekâ ajanlarının kod üretimindeki payı arttıkça birkaç satır kod tasarrufunun değeri azalırken okunabilir, doğrulanabilir ve bakımı kolay kaynak kodun önemi daha fazla öne çıkabilir.









