krabby: Hızlı bir Rust derleyicisi yapmak
(bal-e.org)- Krabby,
rustc'nin yavaş derleme hızını iyileştirmeyi amaçlayan, performans öncelikli bir sıfırdan Rust derleyicisi uygulamasıdır rustc'de hissedilir performans iyileştirmeleri artık tek bir fonksiyondaki değişikliklerden çok API ve veri yapısı değişikliklerinden geliyor, ancak büyük kod tabanı ve kararlılık gereksinimleri nedeniyle kapsamlı değişiklikler yapmak zor durumda- Krabby, tek bir kişinin kontrol ettiği küçük bir kod tabanında kararlılığı önceliklendirmeden derleyici bileşenlerini birlikte yeniden tasarlayarak yeni optimizasyon fırsatları ve daha tutarlı bir mimari bulmayı hedefliyor
- Amaç, derleyici performansını büyük ölçüde artırmak için tasarımın tamamen yeniden düşünülmesi gerektiği hipotezini Rust gibi karmaşık bir dilde de sınamak
- Kod, Codeberg'deki krabby deposunda açık olarak yayımlanıyor ve ilerleme durumunu Fediverse üzerinde 1-2 haftada bir ya da daha sık paylaşmak hedefleniyor
Krabby'nin hedefleri ve arka planı
- Rust, tercih edilen bir dil olsa da
rustcderleyicisi belirgin biçimde yavaş rustcperformansını iyileştirmek için zaten birçok kişi çalışıyor ve tek bir fonksiyondaki değişiklikle hissedilir performans artışı sağlayabilecek iyileştirmeler neredeyse tükenmiş durumda- Anlamlı iyileştirmeler artık API ve veri yapısı değişikliklerinden geliyor, ancak
rustcgibi büyük bir kod tabanında çok sayıda özellik geliştirme işi ve kararlılık gereksinimleri nedeniyle büyük ölçekli değişiklikler fiilen zor - Krabby, performansı önceliklendiren bir sıfırdan Rust derleyicisi uygulaması ve hedefleri
rustcile temelden farklı - Küçük bir kod tabanının tek bir kişi tarafından kontrol edilmesi ve kararlılığın öncelik olmaması sayesinde, tüm bileşenler birbirini gözeterek tasarlanıp yeni optimizasyon fırsatları aranırken daha tutarlı bir mimari kurmayı amaçlayan bir yaklaşım izliyor
- Çıkış noktası, derleyici performansını ciddi biçimde iyileştirmek için derleyici tasarımının tamamen yeniden düşünülmesi gerektiği hipotezi
- Büyük ölçekli mimari optimizasyonların, hedef dilden bağımsız olarak gizli durumda bulunabileceğini ve bunun yalnızca C gibi basit dillere değil Rust gibi karmaşık dillere de uygulanabileceğini göstermeyi amaçlıyor
- Ortaya çıkan tasarım Rust'a özel olsa bile, süreçten öğrenileceklerin değerli olacağı düşünülüyor
Projenin durumu ve açık kaynaklar
- Krabby çok büyük bir proje ve tamamlanıp tamamlanamayacağı ya da projeyi yürütmek için doğru kişi olup olmadığı konusunda kesinlik yok
- Buna rağmen, kodu optimize etme ve kaliteyi artırma sürecinin kendisinden keyif almak ve değerli bulduğu bir amaç için iyi kod yazmanın verdiği tatmin, şu ana kadarki temel motivasyon olmuş durumda
- Kod, Codeberg'deki krabby deposunda açık olarak yayımlanıyor
- İlerleme durumu, Fediverse üzerinde 1-2 haftada bir ya da daha sık paylaşılmak isteniyor; daha derin ve uzun güncellemeler ise aynı sitede yayımlanacak
- İlgilenenler e-posta ile iletişime geçebilir
-
İlgili ilerleme yazıları
- identifier interning in 2025: 20 Nisan 2026
- a year of krabby: 12 Nisan 2026
- introducing
takeaway: 11 Ağustos 2025 - krabby: for context: 1 Haziran 2025
- krabby: proof of concept: 17 Mayıs 2025
- krabby: the architecture: 27 Nisan 2025
- krabby: making an AST: 19 Nisan 2025
- krabby: trying out parent ptrs: 12 Nisan 2025
- krabby: motivations: 5 Nisan 2025
1 yorum
Lobste.rs görüşleri
Herkesin kendine ait bir gösteriş lisansı olsun istiyor gibi görünüyor https://codeberg.org/bal-e/krabby/…
Bu lisans, kişisel ve ticari olmayan amaçlarla kullanım ve paylaşımı ücretsiz olarak izinli kılıyor; ancak bunun üzerine yapılan yazılımların da aynı koşullarla paylaşılması gerekiyor ve ticari amaçlar için yalnızca 30 gün deneme kullanımına izin veriyor
Codeberg'ün proje lisansları konusunda katı libre/açık kaynak şartları isteyip istemediğini merak ediyorum. Codeberg'ün yalnızca FOSS barındırdığını sanıyordum, bu yüzden ticari olmayan kullanım kısıtı şaşırtıcı geldi; ama güncel durumu takip edememiş olabilirim
Rust büyük ölçekli. Bu proje “kendi web tarayıcını yapmak”tan biraz daha kolay görünüyor ama kesinlikle kolay değil. Yine de hedefin büyük olması takdire değer
krabby: motivations sayfasına bakılırsa hız bu projenin ana gerekçesi gibi görünüyor
Rust hakkındaki benim anlayışıma göre tür denetimi, borrow check vb. zaten çok hızlı; darboğaz kod üretimi ve bunun da önemli bir kısmı Rust'ın kendisinden çok LLVM ile ilgili
Bugünlerde Cranelift tarafında neler olduğunu ve kod üretim hızını artırma fikirleriyle örtüşen bir yan olup olmadığını merak ediyorum
Bana göre derleme hattına bütün olarak bakınca bu pek mantıklı gelmiyor. Yalnızca MIR içeren rlib gerekiyor ve sınırsız RAM olmadan da tüm dünyayı kapsayan optimizasyon yapabilen bir backend gerekiyor (bu yorum'a bakın)
“Codegen Unit” tamamen tesadüfi karmaşıklık
Özellikle libraries ve binaries için ayrıntılı dağılım ilginç olabilir
LLVM çok hızlı sayılmaz, ama rustc'nin LLVM'ye bir miktar şişirilmiş IR verme eğiliminin de pek yardımcı olmadığını hatırlıyorum
Benim orta vadeli hedefim, yani önümüzdeki yaklaşık 5 yıl için hedefim,
cargo check; bu yüzden kod üretimine dokunmuyorumYine de daha iyi paralellik, tanılama kodunun sıcak yollarını ayırma, tür denetimi ile borrow check arasındaki yinelenen işi azaltma ve temel veri yapılarının bellek yerleşimini iyileştirme gibi alanlarda hâlâ çok fazla optimizasyon payı olduğunu düşünüyorum
rustc geliştiricileriyle yakın olmam ve kod tabanındaki çeşitli sorunları sık sık duymam da yardımcı oluyor