7 puan yazan GN⁺ 3 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Bellek güvenliği olmayan Zig’de sızıntılar ve çökmeler sürerken Bun, 535.496 satır kodu 64 yapay zeka ajanıyla Rust’a taşıyarak 1–2 yıl sürecek işi 11 güne indirdi
  • Başarının çıkış noktası 600 satırlık PORTING.md oldu; dosya bazında paralel dönüştürme, iki tur hasmane inceleme, derleme hatalarının düzeltilmesi, yerel testler ve CI’dan geçirme sırasıyla yürütüldü
  • 6.500 commit oluşturmak için API fiyatlandırmasına göre 165.000 dolar ve önbelleksiz girişte 5,9 milyar, çıkışta 690 milyon, önbellek giriş okumasında 72 milyar token kullanıldı
  • Elle yapılsaydı, kod tabanını iyi bilen 3 mühendisin yaklaşık 1 yıl boyunca ürün iyileştirmelerini, hata ve güvenlik düzeltmelerini, yeni özellik geliştirmeyi durdurması gerekeceği için yeniden yazımın kendisinin zor olacağı değerlendirildi
  • Aynı yöntemi tekrarlamak için kod tabanını derinden anlayan mühendisler, sonuçlara güvenilebilecek güçlü bir test paketi ve başarı belirsiz olsa bile token maliyetini üstlenme isteği gerekiyor

Bun neden Rust ile yeniden yazmayı seçti

  • Bun, bir JavaScript runtime’ının ötesinde birçok işlev sunan karmaşık bir üretim projesi
    • JavaScript, TypeScript ve CSS dönüştürme, bundling, küçültme
    • Test runner ve npm uyumlu paket yöneticisi
    • Modül çözümleme, WebSocket istemcisi, Node.js uygulaması ve çeşitli modüller
  • Aylık indirme sayısı 22 milyon; Claude Code ve OpenCode ona bağımlı, Vercel, Railway ve DigitalOcean doğrudan destekliyor
  • Zig bellek güvenli bir dil olmadığı için güncel Bun’da da bellek sızıntıları, bellek sorunlarından kaynaklanan çökmeler ve heap sınırları dışına yazmalar devam ediyordu
    • Bun ekibi Zig derleyicisini yamaladı ve uçtan uca bellek sızıntısı testleri ekledi, ancak sorunları ortadan kaldıramadı
    • Çöp toplama ile yönetilen değerlerin ve elle yönetilen değerlerin yaşam sürelerini birlikte ele alma sürecinde küçük sızıntılar ve aralıklı çökmeler ortaya çıktı
    • Her bellek ayırmada nerede serbest bırakılacağı, çift serbest bırakma olup olmadığı, JavaScript istisna işleme ve muhafazakâr stack tarayıcısının pointer görünürlüğü gibi konuların incelenmesi gerekiyordu
  • Güvenli Rust’ta use-after-free ve double-free derleme hatasına dönüşür; hata yollarında serbest bırakmayı atlama sorunu ise Drop tabanlı otomatik temizlikle ele alınabilir
  • Bun koduna Rust tarzı smart pointer’ları kendi içinde ekleme yöntemi de değerlendirildi, ancak Rust’tan daha kötü kullanılabilirliğe sahipti ve aynı garantileri sağlayamıyordu

Mevcut yeniden yazım projeleri neden uzun sürer

  • Yeniden yazım sırasında özgün kod tabanına özellikler eklenmeye devam ettiği için tamamlanma tarihinin tekrar tekrar ötelenme eğilimi vardır
    • 9 ay süreceği tahmin edilen iş, 9 ay sonra hâlâ yaklaşık 6 ay daha gerektirebilir
    • 15 ay geçse bile yeni özelliklere yetişmeye çalışırken aylarca iş kalabilir
    • Şanslı olunsa bile 2 ay özellik dondurma sonrası yaklaşık 18 ayda biter; ilk 9 aylık tahmin 2 yıldan fazlaya uzayabilir
  • Yorumlar hariç Bun’ın Zig kodu 535.496 satır olduğundan, küçük bir mühendis ekibinin bunu başka bir dile taşımasının yaklaşık 1 yıl gerektireceği tahmin edildi
  • Kullanıcıya görünen bir iyileştirme olmadan 1 yıl geçirmek gerçekçi bir seçenek olmadığı için, Fable ile Rust portunun bir hafta içinde doğrulanıp doğrulanamayacağını denemeye karar verildi

Port için ön tasarım ve doğrulama

  • İlk aşamada Claude ile yaklaşık 3 saat boyunca Zig kalıplarını Rust’a yakın biçimde eşleştirmenin yolu tartışıldı ve bu, 600 satırlık PORTING.md olarak derlendi
  • Port yönergeleri, Bun’ın mevcut çalıştırma yapısını korumak için somut kısıtlar içeriyordu
    • tokio, rayon, hyper, async-trait, futures kullanılmayacak
    • std::fs, std::net, std::process gibi I/O’ya erişen modüller yasaklanacak
    • Bun kendi event loop’unun ve sistem çağrılarının sahibi olduğundan async fn yerine mevcut Zig’de olduğu gibi callback’ler ve durum makineleri kullanılacak
    • Borrow checker çakışması oluşursa gerekli skaler değerler yerel değişkenlere kaydedilecek, borrow sonlandırıldıktan sonra yeniden borrow edilecek
    • Borrow checker’dan kaçmak için raw pointer kullanımı yasaklanacak; yapının değiştirildiği yerlere port notu bırakılacak
  • Toplam 1.448 dosyanın içinden önce 3 dosya yeniden yazıldı, ardından değişiklik işinden ayrı oturumlarda Claude iki tur hasmane inceleme yaptı

64 yapay zeka ajanının paralel çalışması

  • Dosyalar birbirinden bağımsız işlenebilecek şekilde görevler bölündü ve 64 yapay zeka ajanı paralel çalıştırıldı
  • Başlangıçta birden fazla ajan aynı depo durumuna dokununca çakışmalar yaşandı
    • Bir ajan git stash çalıştırdıktan sonra başka bir ajan git stash pop ve git reset HEAD --hard çalıştırdı
    • Her ajana ayrı worktree atandığında Bun deposunun boyutu nedeniyle disk alanı yetersiz kaldı; değişikliklerin nihayetinde birlikte derlenmesi gerektiği kısıtı da vardı
  • İş akışı düzeltilerek belirli bir dosyayı hemen commit’leyen komut dışında git stash, git reset gibi Git komutları yasaklandı; cargo ve uzun süren komutların kullanımı da engellendi
  • Sonunda iş 4 worktree’ye bölündü ve her birinde 16 Claude’un dosyaları commit’leyip push etmesi yapılandırıldı
  • Ajanlar iki gün içinde 535.496 satır Zig kodunu taşıdı; her commit uygulanmadan önce iki tur hasmane incelemeden geçti

Derleme hataları ve test düzeltmeleri

  • İlk dönüştürme tamamlandı ancak kod derlenmiyordu; Claude, Rust’ın en üst düzey derleme birimi olan crate bazında hataları düzeltti
  • Aşama başlığında yaklaşık 1.600 derleme hatası yazıyor, ancak alıntıda döngüsel bağımlılıkları çözerken yaklaşık 16.000 hata ortaya çıktığı belirtiliyor
  • Hata düzeltme süreci de paralelleştirildi
    • Her crate’te cargo check çalıştırıldı
    • Çıktı dosya bazında gruplanıp hata dosyaları kaydedildi
    • İlgili crate’in tüm derleme hataları düzeltildi
    • İki hasmane inceleyici değişiklikleri kontrol etti
    • Bir düzeltmeden sorumlu ajan inceleme sonuçlarını uyguladı
  • Ajanlar gece yarısından 11.30’a kadar insan müdahalesi olmadan derleme hatalarını düzeltti
  • Ardından yaklaşık iki gün boyunca büyük test paketinin yerelde derleme hatası olmadan çalışabilir hale getirilmesine ve başarısız testlerin düzeltilip CI’dan geçmesine birkaç gün daha ayrıldı
  • Tüm testler geçtikten ve çalıştığı doğrulandıktan sonra değişiklikler merge edildi; plandan tamamlanmaya toplam 11 gün sürdü
    • Yaklaşık 550 bin satır kod port edildi
    • 6.500 commit
    • 64 ajan kullanımı

Maliyet ve elle çalışmaya kıyasla sonuç

  • Fable API fiyatlarına göre tüm yeniden yazımın maliyeti 165.000 dolar
    • 5,9 milyar önbelleksiz giriş token’ı
    • 690 milyon çıkış token’ı
    • 72 milyar önbellek giriş token’ı okuması
  • Anthropic API token’larını üzerine marj koyarak sattığı için gerçek iç maliyet bundan daha düşük
  • API maliyeti ABD’de orta seviye bir kurumsal yazılım mühendisinin yıllık temel maaşına benzer, ancak aynı maaştaki tek bir mühendisin 11 gün içinde aynı sonucu üretmesinin imkânsız olduğu değerlendiriliyor
  • Bu, Mitchell Hashimoto’nun Fable’ın net bir ödül fonksiyonuna sahip zor ve odaklı işlerde özellikle başarılı olduğu değerlendirmesiyle de örtüşüyor
  • Elle yapılsaydı kod tabanını tamamen bilen 3 mühendisin yaklaşık 1 yıl gerekeceği tahmin edildi
    • Bu süre boyunca Node.js uyumluluğunu iyileştirmek, hata ve güvenlik sorunlarını düzeltmek, yeni özellikler geliştirmek zor olurdu
    • Gerçekçi alternatif, yeniden yazmamak ve mevcut bellek hatalarını düzeltmeye devam etmekti

Diğer projelere uygulamak için koşullar

  • Yapay zeka 1 yıl sürecek yeniden yazımı veya migrasyonu bir hafta seviyesine indirebiliyorsa, daha önce değerlendirmesi zor olan projeler de uygulanabilir hale gelir
  • Bun’ın iş akışını yeniden kullanmak için üç koşul gerekir
    • Kod tabanını çok iyi bilen ve çalışma isteği güçlü bir mühendis
    • Testlerin geçmesini gerçek davranışın kanıtı olarak güvenilir kılacak kadar güçlü bir test paketi
    • Başarının önceden bilinmediği durumda bile kayda değer token maliyetine yatırım yapma isteği
  • Kod migrasyonu gibi tekrarlı işler LLM’lerin nispeten iyi yaptığı işler olduğundan, iyi testler ve sorunu yapılandıracak bir mühendis varsa başarı olasılığı yüksektir
  • Her proje için 165.000 dolar gerekmez
    • Daha basit bir projede maliyet daha düşük olabilir
    • Üst düzey planlama için en pahalı model, kodlama ve inceleme için daha ucuz modeller görevlendirilebilir
  • Yapay zeka tabanlı migrasyonlar hızlanıyor, ancak Bun gibi iyi mühendislikten geçmiş projelerde bu hız yakalanabilir

Henüz yorum yok.

Henüz yorum yok.