GoSuda

LLM Kod Üretim Ortamlarında Dil Tasarımının Karşılaştırılması: Soyutlama Maliyeti ve Go'nun Açıklığı

By Rabbit Princess views ...

Modern Diller

Modern diller, geçmiş dillere kıyasla daha yüksek üretkenlik, kararlılık, güvenlik ve bakım yapılabilirlik sunan dilleri ifade eder. Bu diller, güncel teknikleri ve kavramları aktif olarak benimser ve geliştiricilere daha verimli ve güvenli geliştirme araçları sunar. Temsilci modern diller arasında Java, Rust, Python, TypeScript gibi diller bulunmakta olup bunlar aşağıdaki özelliklere sahiptir.

1. Nesne Yönelimli Tasarım ( OOP )

Modern diller çoğunlukla nesne yönelimli kavramlar üzerine tasarlanmıştır. Nesne yönelimlilik; kapsülleme, kalıtım ve çok biçimlilik gibi ilkeleri destekler ve karmaşık sistemleri küçük birimlerdeki nesnelere ayırarak yönetmek suretiyle programın yapısını açık ve esnek hale getirir. Bu özellikle büyük ölçekli yazılım geliştirmede geliştirme maliyetlerini ve işgücünü kontrol etmek ve bakım sırasında ortaya çıkabilecek sorunları azaltmak açısından etkilidir.

2. Sözdizimsel Şeker ve İfade Tabanlı Yapılar

Modern diller, kodun okunabilirliğini ve geliştirme üretkenliğini artırmak amacıyla çeşitli sözdizimsel şekerler ve ifade tabanlı yapılar sunar. Üçlü koşul operatörü, lambda ifadeleri, desen eşleştirme gibi özellikler, tekrarlayan standart kodu azaltır, kodu öngörülebilir kılar ve geliştiricinin üretkenliğini yükseltir.

3. Modül Sistemi

Modern diller, bir programı birden çok birim halinde ayırıp yönetmeye olanak tanıyan bir modül sistemi sunar. Bu, kodun yeniden kullanılabilirliğini ve bağımlılık yönetimini kolaylaştırır ve proje ölçeği büyüdüğünde bile bakımı kolaylaştırır. Temsili örnekler arasında Java'nın Maven/Gradle, Rust'ın Cargo'su ve TypeScript'in npm/yarn'ı bulunmaktadır.

4. Ara Dil ve Sanal Makineler

Modern diller, platform bağımsızlığı, performans optimizasyonu ve güvenlik için ara diller ve sanal makineler kullanır. Temsili örnekler arasında JVM, LLVM, WASM, GraalVM bulunmaktadır.

Yapay Zeka Çağında Geliştirme ve Modern Dillerin Sınırlılıkları

Modern diller, kodun büyük bölümünün insanlar tarafından yazılacağı varsayımıyla ortaya çıkmıştır. Doğal olarak modern dillerin amacı, tekrarlayan işleri azaltmak, üretkenliği artırmak ve geliştiricilerin iş birliği yapabileceği bir yapı aracılığıyla büyük yazılımları etkili biçimde gerçekleştirmektir. Ancak Yapay Zeka çağında bu varsayım giderek çökmektedir. Copilot, Cody gibi yapay zeka tabanlı araçlar kod yazımının büyük bir kısmını otomatikleştirmekte ve tek bir geliştiricinin üretebildiği kod miktarı önemli ölçüde artmaktadır. Bunun sonucu olarak, geçmişte avantaj olarak algılanan modern dil özellikleri giderek eskimiş birer dezavantaja dönüşmektedir.

Nesne Yönelimli Tasarım

Yapay zeka, tüm bilgilerin açıkça belirtildiği bir fonksiyon veya modül içindeki yapıyı hızlı ve doğru biçimde analiz edebilir. Buna karşılık, bağlam arttıkça çıkarım yapılması gereken alan genişlediği için yapay zekanın üretkenliği ve doğruluğu düşer. OOP ile yazılmış kod, mantığı tek bir yerde yönetmek yerine birden çok nesneye dağıtır; bu da sonuç olarak yapay zekadan daha fazla bağlam talep edilmesine yol açar. Aşağıdaki koda bakalım.

 1public class AnimalHandler {
 2    // Hayvan nesnesi için speak() metodunu çağırır
 3    public void handle(Animal animal) {
 4        animal.speak();
 5    }
 6}
 7
 8public class Main {
 9    public static void main(String[] args) {
10        // AnimalHandler örneği oluşturulur
11        AnimalHandler handler = new AnimalHandler();
12
13        Animal a1 = new Dog();
14        Animal a2 = new Cat();
15        Animal a3 = new Horse();
16
17        handler.handle(a1);
18        handler.handle(a2);
19        handler.handle(a3);
20    }
21}

Yukarıdaki kodda yapay zeka, speak() metodunun gerçekte ne yaptığını anlamak için şu çıkarımları tekrar etmek zorundadır

  1. animal, hangi somut sınıfın örneği?
  2. Bu sınıfta geçersiz kılınan (override edilen) speak() metodu nerede tanımlanmış?
  3. Dog ve Cat sınıflarının tanımları nerede ve bu sınıfların içindeki davranış nedir?
  4. Dog ve Cat sınıflarının başka sınıflar tarafından geçersiz kılınma olasılığı var mı?

Bu bilgiler tek bir dosyada veya tek bir fonksiyonda toplanmış değildir; sınıf dosyaları arasındaki ilişkiler ve kalıtım yapısı takip edilerek anlaşılabilir. Dahası, yansıma (reflection) veya dinamik yükleme gibi çalışma zamanında belirlenen öğeler yapay zeka açısından kara kutu gibidir ve pratikte analiz edilemezler.

Sözdizimsel Şeker ve İfade Tabanlı Yapılar

Yapay zeka, örtük davranışlar yerine açık davranışları tercih eder ve karmaşık yapılar kullanmak yerine basit yapıları birleştirerek tek bir doğru yanıt üretmeyi yeğler. Buna karşılık sözdizimsel şeker, çeşitli ifadelere izin verirken iç davranışının aynı veya benzer olduğu birçok durum içerir. Yapay zeka bu çeşitli ifadelerin anlamlarını tek tek öğrenmek zorundadır ve belirli bir durumda hangi sözdiziminin önerilmesi gerektiği konusunda öncelik belirlemekte zorlanabilir.

Ara Dil ve Sanal Makineler

Yapay zeka çoğunlukla kaynak koda dayalı olarak öğrenir. Oysa ara dil (bytecode), derleme sürecinde değişken adları gibi anlamsal bilgileri kaldırır ve çalıştırma anında sanal makine tarafından yeniden yorumlanmak zorundadır. Bu, yapay zekanın anlaması veya dönüştürmesi çok zor bir iştir. Örneğin yapay zeka için TypeScript'ten Go'ya dönüşüm mümkünken, V8 engine'in bytecode'unu JVM bytecode'una veya makine koduna dönüştürmek pratikte imkânsıza yakındır.

Yapay Zeka Çağının Gerçek Modern Dili

Yukarıdaki içerikten, modern dil özelliklerinin aslında Yapay Zeka çağına uygun olmayan, eskimiş unsurlar olduğunu anlayabiliriz. Peki hangi dil, Yapay Zeka çağının en uygun modern dili olabilir? Bu, geçmiş modern dillerin dışladığı unsurlardan ipucu alınarak yanıtlanabilir. Yapay Zeka çağının modern dili

  1. Açık bir sözdizimine ve doğal bir akışa sahip olmalıdır.
  2. Aşırı nesne yönelimli yapıdan uzaklaşarak düz ve basit bir yapıya sahip olmalıdır.
  3. Gereksiz sözdizimsel şeker ya da örtük kalıplar yerine, sınırlı temel anahtar kelimelerle birden çok işlevi oluşturmalıdır.
  4. Karmaşık bir derleme sistemi yerine basit ve öngörülebilir bir derleme sistemine sahip olmalıdır.

Bu ölçütlere en çok uyan dil Golang'dır. Go dili, minimum sayıda temel anahtar kelime ve basit bir sözdizimi kombinasyonuyla pratikte kullanışlı işlevlerin çoğunu gerçekleştirebilecek şekilde tasarlanmıştır ve gereksiz soyutlamaları ve örtük davranışları titizlikle dışlar. Bu, yalnızca geliştiriciler için değil, yapay zekanın kodu yorumlaması ve üretmesi için de avantajlı bir yapıdır.

Öngörülebilir ve düz bir yapı, açık bir akış ve tutarlı bir sözdizimi gibi Go'nun özelliklerinin hedeflediği bu yaklaşım, insan geliştiriciler esas alınarak tasarlanmış mevcut modern dillerden farklı olarak, yapay zekanın aktif rol aldığı geliştirme ortamlarına daha iyi uymaktadır. Bir zamanlar eskimiş olarak görülen Go'nun muhafazakâr tasarım felsefesi, Yapay Zeka çağında aslında en ileri tercih haline gelmiş durumdadır.