DEV Community

İbrahim Hakkı Ergin
İbrahim Hakkı Ergin

Posted on

Claude's C Compiler : Neyi Başardı ve Neyi Başaramadı?

Geçen hafta Anthropic bir makale yayınladı ve bir sürü insan bunun hakkında konuştu. "Yazılımcılık bitti Claude artık C compiler bile yazıyor", "AI en zor işi bile yaptı artık çalışmanın manası yok" gibi bağlamlarda sıklıkla kullanıldı ama aslında Claude tam olarak ne yapabildi ve neleri yapamadı bunun hakkında pek konuşulmuyor.

En başından hakkını verelim çünkü zaten herkes neyi başardı konusunda oldukça fazla konuşuyor, biz neyi başaramadığı hakkında konuşalım ki dengeyi sağlayabilmiş olalım. Otonom yazılım geliştirme, paralel ajanların (agent) birlikte koordine çalışması gibi konularda güzel bir deney. Tabii ki şunu unutmamamız lazım ki aynı zamanda bu bir reklam çalışması :). Yine de yayınladıkları yazıda neyi yapamadıklarını açıkça belirtmeleri güzel bir hareket.

Burada adım adım nelerin yapıldığını anlatmama gerek yok bunu orijinal kaynaktan okuyabilirsiniz zaten.

Süre, Maliyet ve Bazı Başka Bilgiler

Claude bu C compiler'ını yaklaşık 2 haftalık bir sürede yazmış. Yaklaşık 2000 Claude oturumuyla 2 milyar giriş tokeni harcayarak 140 milyon çıkış tokeni üretmiş. Bu projenin yaklaşık API masrafları ise 20.000 dolar seviyesinde.

İnternet erişimi olmadan ve sadece Rust standart kütüphaneleriyle yani bağımlılık kullanmadan geliştirildiği söyleniyor. Ama ileride değineceğimiz üzere burada bazı pürüzler olacak.

Overfit

Claude bu hataya gerek henüz geliştirme sürecindeyken gerekse de önümüze çıkan son versiyonda sıklıkla düşmüş. Overfit, testlere ve güncel case'lere aşırı uyumlu olmaya denir. Yani elinizdeki veriler için algoritmanız aşırı uyumlu çalışıyordur lakin durum biraz değişince sıkıntılar çıkmaya başlar. Claude bu hataya kendi testlerinde düşüyor. Testlerden %99 başarı oranıyla çıktıktan sonra bazı open source projeleri derlemeyi deniyorlar ve bunlarda da gayet başarılı oluyor (SQlite, Redis, libjpeg, MQuickJS, Lua gibi).

Lakin durum Linux kernelini derlemeye gelince işin içinden çıkılmaz bir hale geliyor. Özellikle paralel olarak çalışmanın burada bir işe yaramadığı anlaşılıyor çünkü tüm ajanlar aynı sorunun üzerine çalışıp hepsi birbirinin kodunun üzerine kod yazıyorlardı.

Burada otonomluk ve kaynak kullanmadan yazılma durumunun dışına çıkarak Claude'a GCC kullanabilme yetkisi veriliyor. Linux kernelinin büyük bir kısmını GCC'yle derleyip geri kalan ufak kısımlarını CCC(Claude's C Compiler) ile derliyorlar. Böylece ufak parçalara bölerek sorunlar çözülüyor sonuç olarak Linux kernelini derleyebilen bir compiler yapabilmiş oluyorlar.

Lakin hâlâ Claude tarafında büyük sorunlar var. Sürekli stabil çalışan, hatasız kodlar üzerinden geliştirilen ve testleri de buna göre yapılan CCC, compile error vermesi gereken yerlerde compile error veremiyor.

Örneğin :

#include <stdio.h>
int square(int num) {
    return "dsadsa";
}

int main()
{
    printf("output : %s", square(5));
    return (0);
}
Enter fullscreen mode Exit fullscreen mode

Gördüğünüz gibi bu örnekteki kodda square fonksiyonunun imzasında int türünde bir değer döndürüleceği bilgisi var. Ama biz int türünde değil de string bir veri verdiğimiz zaman da hiçbir hata vermeden kodu derliyor. Bu hata yeni başlayan bir geliştiricinin dahi ilk görüşte compile error diyeceği bir hata iken CCC çalıştığı kodların çok düzgün olmasından dolayı kötü yazılmış kodda tam olarak ne yapması gerektiğini bilmiyor.

Otonomluk ve Bazı Sorunlar

Öncelikle bu neredeyse tamamen otonom mu gerçekten buna değinmemiz gerekiyor. Aşağıdaki bazı durumlarda bu otonomluk bozuluyor.

Örneğin çeşitli kısıtlamalardan dolayı ajanlar uzun süre çalışamıyorlar ve duruyorlar. Buna çözüm olarak bir bash script (while true) yazılmış böylece ajanın elle durdurulmadığı sürece sürekli olarak tekrar başlaması sağlanmış. İronik olarak Claude bir işlem yaparken pkill -9 bash komutuyla kendini de kapatmış :).

Overfit başlığında bahsettiğim üzere Linux kernelinde ortaya çıkan takılma durumunda bir oracle (çalıştığı bilinen bir referans noktası) olarak GCC'yi kullanıp karşılaştırma yapma işini bir insan kurgulamış.

Test süreçleri tamamen insan tarafından kurgulanıyor ve bu testler başta verilip sonra dokunmayarak değil takıldığı noktalarda müdahaleler ederek yapılmış.

Makaleden anladığım kadarıyla bir orkestrasyon ajanı kullanılmamış onun yerine her ajana yapılması gereken görev insan tarafından belirlenmiş.

Ajanların aynı anda bir dosyanın üzerine yazamaması için bir dosya kilitleme mantığı kullanılmış. Yani aralarında gerçek bir takım çalışması yapmak yerine bir zorlama ile bu belirlenmiş.

CCC'nin limitleri

Linux'u real mode'dan çıkarmak için gerekli olan 16 bit x86 derleyicisinden yoksundur. Bunu GCC'den sağlıyor (x86_32 ve x86_64 derleyicileri kendisine aittir).

Kendi assembler ve linker'ı yoktur; bunlar Claude'un yapmaya başladığı son parçalar ve hala sorunlu.

Çoğu projeyi derlese de hepsini derleyemiyor. Gerçek bir derleyici olmaktan uzak.

Ürettiği kod hiç verimli değil. CCC tüm optimizasyon seçenekleri açıkken GCC'nin tüm optimizasyonları kapalı halinden bile daha verimsiz kod üretiyor.

Rust kodlarının kalitesi makul olsa da (internetteki bazı Rust geliştiricileri böyle düşünmüyor.) uzman bir Rust programcısının üretebileceği kalitenin yakınında bile değil.

C Compiler'ı yazmak büyük bir başarı mı?

Günümüzde yapay zekaların geldiği noktaya baktığımız zaman bu gerçekten şaşırtıcı sayılabilir çünkü bundan sadece birkaç yıl önce bunun olabileceğini düşünemiyorduk.

Lakin bu konularda yetkin çoğu kişiye göre Claude'un yaptığı iş büyük olsa da C dilinin sade yapısı, büyük bir oracle'a sahip olması (clang, gcc) gibi noktalardan dolayı aslında bir C compiler'ı yapmak o kadar da büyük bir iş olmayabilir. Özellikle de çeşitli noktalarda direkt olarak GCC'yi referans olarak alıyor ve karşılaştırma yapıyor.

Yapay zeka modellerinin eğitim verilerinde GCC ve Clang kaynak kodlarının, dokümantasyonlarının ve bu derleyicilerle ilgili milyonlarca StackOverflow tartışmasının yer aldığını unutmamak gerek. Elinizde çözümün kendisi bu kadar devasa bir veri seti olarak duruyorken, aynı işi yapan yeni bir kod üretmek, sıfırdan bilinmeyen bir problemi çözmekten çok daha kolaydır.

Değerli vaktinizi bu yazıyı okumak için harcadığınız için teşekkür ederim, umarım hak etmişimdir.

Kaynaklar

Anthropic'in makalesi

Claude's C Compiler kaynak kodları

Compiler Explorer

r/programming konu hakkında post

Hafif Programming | Paralel Claude’larla C derleyicisi geliştirildi - GenAI tartışmaları yüzeysel mi kalıyor?

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.