- Ladybird tarayıcı projesi, C++’ın yerini alacak bellek güvenli bir dil olarak Rust’u benimsedi ve geçiş sürecinde yapay zeka araçlarından yararlanıyor
- Daha önce Swift değerlendirildi, ancak C++ birlikte çalışabilirliği ve platform kısıtları nedeniyle sınırlı bulunarak yön Rust’a çevrildi
- İlk port hedefi JavaScript motoru LibJS oldu; Claude Code ve Codex kullanılarak yüzlerce istemle elle yönlendirilen bir çeviri yapıldı
- Yaklaşık 2 haftada 25 bin satır Rust kodu tamamlandı ve çıktının da performansın da C++ sürümüyle tamamen aynı olduğu doğrulandı
- Proje, bir süre daha C++ ve Rust’ın birlikte geliştirildiği yapıyı sürdürecek ve uzun vadede güvenlik ile bakım kolaylığını güçlendirmeyi hedefliyor
Rust’un benimsenme gerekçesi
- Ladybird, C++’ın yerini alacak bellek güvenli bir dil bulmak için birden fazla dili değerlendirdi
- Swift, C++ ile birlikte çalışabilirliğinin yetersiz olması ve Apple ekosistemi dışındaki platform desteğinin sınırlı kalması nedeniyle elendi
- Rust, sistem programlama ekosistemi olgunlaşmış ve çok sayıda katkıcının zaten aşina olduğu bir dil olarak değerlendirildi
- 2024’te Rust’un C++ tarzı OOP’ye uygun olmaması nedeniyle benimsenmesi ertelenmişti; ancak daha sonra güvenlik ve ekosistem olgunluğu gerekçesiyle yeniden benimsenmesine karar verildi
- Firefox ve Chromium’un Rust’u halihazırda kullanıyor olmasından hareketle, Ladybird için de uygun olduğuna karar verildi
LibJS port süreci
- İlk dönüşüm hedefi Ladybird’ün JavaScript motoru LibJS oldu
- lexer, parser, AST, bytecode generator gibi bağımsız bileşenleri ve test262 tabanlı test kapsamı, bunu iyi bir başlangıç noktası haline getirdi
- Port işlemi için Claude Code ve OpenAI Codex kullanıldı
- Bu, otomatik üretim değil, insan yönlendirmeli bir çeviriydi; port sırası ve kod yapısı doğrudan insanlar tarafından belirlendi
- Yüzlerce istemle ayrıntılı yönlendirme yapıldı; ardından farklı modellerle kod doğrulama ve hata tespiti gerçekleştirildi
Sonuçlar ve doğrulama
- Hedef, C++ ve Rust işlem hattı çıktılarının bayt düzeyinde aynı sonucu vermesiydi
- Yaklaşık 25.000 satır Rust kodu 2 haftada tamamlandı; böylece aylar sürecek iş kısaltıldı
- AST ve bytecode tamamen aynı kaldı ve testlerde ile JS benchmark’larında performans kaybı görülmedi
- C++ ve Rust işlem hatlarını aynı anda çalıştıran lockstep testleri ile web gezinimi sırasında sonuçların eşleşip eşleşmediği doğrulandı
- Mevcut kod, C++’tan çevrilmiş yapısını koruyor ve register allocation pattern’lerini bile birebir taklit ediyor
- Bunun nedeni, C++ işlem hattıyla uyumluluğu korumanın en yüksek öncelik olması
- İleride C++ işlem hattı kaldırıldığında Rust kodunun sadeleştirilmesi ve temizlenmesi planlanıyor
Gelecek planları
- Rust’a geçiş, projenin ana geliştirme yönü değil, paralel bir çalışma olarak ilerliyor
- C++ ve Rust kodu birlikte var olacak ve aralarında net birlikte çalışabilirlik sınırları korunacak
- Port sırası ve kapsamı çekirdek ekip tarafından yönetilecek; dış katkıcıların önceden koordinasyon sağlaması gerekecek
- Uzun vadede hedef, güvenliği ve bakım kolaylığını artıran kademeli bir geçiş yürütmek
- Kararın tartışmalı olabileceği kabul edilse de, bunun Ladybird’ün geleceği için doğru seçim olduğu değerlendiriliyor
1 yorum
Hacker News yorumları
Bu projede bayt düzeyinde birebir aynı çıktı şartı koymaları en akıllıca kısım gibi görünüyor
Bu sayede eski ve yeni pipeline’ı yan yana çalıştırıp diff karşılaştırması yapabiliyorlar ve çeviri sırasında oluşan hataları anında yakalayabiliyorlar
Birçok yeniden yazımın başarısız olmasının sebebi, insanların port sırasında “iyileştirme” yapmaya çalışıp eski sürüm, yeni sürüm ya da basit davranış farklarından doğan hayalet bug’ların peşine düşmesi
C++’tan Rust’a çevrilen sürüm ilk başta biraz tuhaf görünse de sorun değil. C++ tarafı tamamen emekliye ayrıldıktan sonra bunu zaman içinde daha idiomatic hale getirebilirler
Çıktı aynı kaldığı sürece refactor, verimlilik artırma, dokümantasyon yapılabilir
Kodu okurken dokümante etmenin en iyi zamanlama olduğunu düşünüyorum. Ladybird gibi popüler projelerde dokümantasyon doğrudan geliştirme hızını artırır
Eskiden migrasyon maliyeti çok yüksekti, bu yüzden “madem yapıyoruz, biraz da iyileştirelim” diye gerekçelendiriliyordu ama sonuçta daha çok hayalet bug kovalanıyordu
Claude Code ve Codex kullanarak C++ kodunu Rust’a çevirmişler
Bu tamamen otomatik değildi; insanlar yön verdi ve yüzlerce küçük prompt ile süreci ayarladı
İki pipeline’ın çıktısının bayt düzeyinde birebir aynı olması şartını en baştan koymuşlar ve sonuçta 2 haftada 25.000 satır Rust kodu tamamlanmış
AST ve bytecode da birebir eşleşmiş, ayrıca 0 regression elde edilmiş
Bana göre diller arası port işinde AI kullanmanın doğru yolu tam olarak bu
80 dakika içinde Drupal yapısını analiz etti, orijinal tasarımı ve modül yapısını aynen geri kurdu, hatta custom plugin bile ekledi
Şimdi o sitenin WordPress, ProcessWire, Node.js ve artık Next.js’e kadar taşındığı söyleniyor
Ben “tek prompt ile tamamlanmış kod” değil, AI ile uzun oturumlar boyunca gidip gelerek insan zekasını artıran (IA) araçlar istiyorum
Ama bu tür araçları büyük ihtimalle sadece geliştirme bilgisi olan insanlar kullanabildiği için pazar küçük olabilir
Claude kodu doğrudan yazmıyor, sadece ipuçları veriyor ve review yapıyor
Rust, dil özellikleri gereği doğaçlama yazması zor bir dil; bu yüzden bu yöntemden çok memnunum
Artık tarayıcıda da çalışan bir wasm sürümü bile var
Kriptoyla ilgili kısımları kendim yazmadım, o yüzden endişelenmeye gerek yok
Rust’a geçiş haberi ilginç ama Ladybird ekibinin eskiden “anti-Rust hype” eğilimi güçlü olduğu için şaşırtıcı
Yine de Rust’a geçilirse benim katkı yapmam çok daha kolay olur gibi geliyor
Dil sadece bir araçtır ve belli bir dile kimlik bağlamanın gereksiz olduğunu düşünüyorum
Andreas hem müthiş bir mühendis hem de girişimci sezgisi olan biri
Hobi projesini endüstriyel bir projeye dönüştürmesi etkileyici
Yine de bu kadar hızlı dil geçişleri biraz huzursuz hissettiriyor
Bence bu projenin doğal şekilde büyümesinin bir sonucu
“Anormal Rust kodu ama sonra toparlarız” sözü, sanki bir yeniden yazım daha gelecekmiş gibi hissettiriyor ve bu endişe verici
Startup’ların dil değiştirmesi çoğu zaman tehlike işareti gibi görünür
Yeni sürüm geliştirme ile mevcut özellik geliştirme paralel yürürse bir hız yarışı başlıyor ve yeni sürüm yetişemeyebiliyor
Linux, PHP ve musl libc de birkaç kez tam yeniden yazım süreçlerinden geçti
AI artık yaygınlaştığı için “yeni bir dile tamamen yeniden yazım” hesabı tamamen değişti
Özellikle bir test suite varsa risk ciddi biçimde azalıyor
Testlerin önemi artık 10 kat artmış durumda
Streamlit, Shiny, Dash gibi farklı UI’leri çok hızlı deneyebildiğim için prototipleme eğlenceli hale geliyor
Şimdiden bazı projelerde low-code + agent birleşimi yeterli oluyor
“Kod review’ü AI’ya bıraktık” kısmı kulağa tedirgin edici geliyor
Modellerin mantıksal hataları yakalamada sınırları var
Ama asıl mesele, daha sonra sözü edilen “cleanup” gerçekten yapılacak mı
AI koduna bağımlı oldukça AI bağımlılığı artan bir kısır döngüye dönüşebilir
Projenin C++ ve Rust’ı paralel geliştirmesi verimsiz görünüyor
Keşke tek bir bellek güvenli dilde birleşseler diye düşünüyorum
Her bileşen tek bir dille yazıldığı sürece sorun olmaz
Andreas’ın 2024’te Swift’i benimserken Rust hakkında attığı tweet’ler var
Rust’ın kısa ömürlü çalışan programlar için harika olduğunu ama karmaşık nesne grafikleri taşıyan uzun ömürlü programlarda rahatsız edici olduğunu söylemişti
Ayrıca topluluğun toksik olduğunu da eklemişti
İlgili tweet bağlantısı
Standart dışı Rust kodunun ileride teknik borç olarak kalıp kalmayacağını merak ediyorum
Servo projesi de benzer sorunlar yaşadı ama süreç içinde potansiyel bug’ları da yakalayabildi
Rust’a geçiş bu felsefeyle uyumlu, olgun bir tercih gibi görünüyor