11 puan yazan GN⁺ 2024-03-19 | 1 yorum | WhatsApp'ta paylaş
  • Cranelift, Apache-2.0 lisanslı bir kod üretim backend'idir ve WebAssembly için Wasmtime çalışma zamanının bir parçası olarak geliştirildi
  • Ekim 2023'te Rust projesi, Cranelift'i nightly araç zincirinin isteğe bağlı bir bileşeni olarak sunmaya başladı
  • Kullanıcılar artık Cranelift'i, Rust ile yazılmış projelerin debug derlemeleri için kod üretim backend'i olarak kullanabiliyor
  • Cranelift, mevcut derleyicilerle rekabet ederken, yalnızca önemli optimizasyonlara öncelik veren sadeleştirilmiş tasarımı sayesinde kodu daha hızlı üretiyor

Derleme süresinin önemi

  • Programlama dili kullanıcıları hızlı derleme süreleri ister
  • Rust da LLVM kullanan diğer diller gibi derleme süreleri konusunda şikayetler aldı
  • Yeterince hızlı kod üreten bir derleyici, yorumlayıcı kullanmaya kıyasla avantajlı olabilir
  • Derleme hızına odaklanan bir derleyici değerli olabilir

Cranelift'in optimizasyonları

  • Cranelift, kod üretimi sırasında çeşitli şekillerde optimizasyon yapar
  • Optimizasyon hattı, ara temsillerin kümelerini verimli biçimde gösteren bir veri yapısı olan E-graphs'a dayanır
  • Geleneksel derleyicilerde optimizasyon sırası, üretilen kodun kalitesi üzerinde büyük etkiye sahiptir
  • Cranelift, E-graph kullanarak optimizasyon sırasının sonuca etki etmemesini sağlar
  • E-graph'tan nihai temsili çıkarmak NP-complete bir problemdir, ancak Cranelift yeterince iyi bir temsili hızlıca çıkarmak için sezgisel yöntemler kullanır

Rust için Cranelift

  • Cranelift'i Rust backend'i olarak kullanma yönündeki çaba kayda değerdi
  • Rust derleyicisi, tür denetiminden geçmiş programları ifade etmek için mid-level IR kullanır
  • Cranelift'i kullanabilmek için mid-level IR'yi CLIF'e dönüştüren bir kütüphane gerekliydi
  • Bu kütüphane büyük ölçüde Rust derleyici ekibi üyesi "bjorn3" tarafından yazıldı
  • Kullanıcılar rustup ve cargo ile Cranelift backend'ini deneyebilir

GN⁺ görüşü

  • Cranelift'in eklenmesi, Rust topluluğunda derleme sürelerini kısaltmaya yönelik süregelen talebe verilmiş bir yanıt olarak görülebilir. Bu, geliştiricilerin üretkenliğini artırmaya katkı sağlayabilir.
  • Cranelift'in E-graphs kullanarak optimizasyon sırası sorununu çözme yaklaşımı, derleyici tasarımında yeni bir paradigma sunuyor. Bu, derleyici araştırma ve geliştirmesi için yeni bir yön gösterebilir.
  • Eleştirel açıdan bakıldığında, Cranelift'in LLVM'e kıyasla ne kadar kararlı ve verimli olduğu hâlâ daha fazla gerçek kullanım örneğiyle doğrulanmayı bekliyor.
  • Cranelift'e benzer işlevler sunan diğer derleyici backend'leri arasında GCC'nin libgccjit'i de bulunuyor; bu tür alternatiflerle yapılacak karşılaştırmalar, Cranelift'in artılarını ve eksilerini daha net ortaya koyabilir.
  • Cranelift'i benimseyecek geliştiriciler, mevcut LLVM tabanlı altyapıyla uyumluluğu ve geçiş maliyetini göz önünde bulundurmalı; ayrıca Cranelift'in performansını ve kararlılığını dikkatle değerlendirmelidir.

1 yorum

 
GN⁺ 2024-03-19
Hacker News görüşleri
  • Backend ve optimizasyon, farklı crate'ler için farklı şekilde kullanılabilir. Bağımlılıklar için optimize edilmiş LLVM derlemesi kullanmak, kendi kodunuz içinse debug LLVM ya da Cranelift kullanmak çoğu zaman anlamlıdır.
  • Optimizasyon hızı ile optimizasyon kalitesi arasında mükemmel bir genel bakış sunan bir yazı. Özellikle, önceden derlenmiş kod kullanan copy-patch derlemesi hâlâ en hızlısı, ancak optimizasyon açısından alanı daha dar. Cranelift, IR'de eşdeğerliği ifade etmek için e-graph'ları kullanarak copy-patch yaklaşımından daha fazla optimizasyona imkân tanıyor. En iyi optimize edilmiş çıktı muhtemelen LLVM veya GCC gibi geleneksel derleyici araç zincirlerinden çıkacaktır, ancak mümkün olan en kısa sürede "yeterince hızlı" çıktı almak isteyen kullanıcılar için yeni derleyici teknikleri umut verici bir alternatif sunuyor.
  • Tam debug derlemeleri hakkında çok yorum var, ancak asıl önemli farkın küçük değişikliklerdeki artımlı derleme süresi olduğunu düşünüyorum. Geliştirme iterasyonunu hızlandıran şey bu. rust-analyzer ve gleam projelerinde küçük bir değişiklikten sonraki derleme sürelerini karşılaştırdığımda, Cranelift ve mold eklendiğinde çok daha hızlı bir iyileşme görüldü. Go ile derlenmiş Terraform ile kıyaslandığında bile Rust tarafında büyük bir gelişme gösteriyor.
  • Şu anda M1-M3 Mac desteği yok ve Windows desteği de görünmüyor. En aktif katkıcıdan gelen son güncellemenin sonucu belirsiz. Windows desteği şu an için dışarıda bırakılmış ve macOS'te yalnızca x86_64 destekleniyor. M1 işlemci kullanıyorsanız rustc'nin x86_64 sürümünü kurup Rosetta 2 ile deneyebilirsiniz, ancak Rosetta 2 performansı etkileyebileceği için LLVM backend'iyle karşılaştırmak gerekir.
  • Bevy projesinde yazıdaki yönergeleri denedim ve "normal" derlemeyle karşılaştırdım. Cranelift+debug derlemesine kıyasla release derlemesi daha hızlı görünüyor, ama bunun nedeni sccache ve yerel NAS ile önbellekleme kullanmam. Önbellek olmadan yalnızca debug derlemesini yeniden denediğimde, derleme süresi neredeyse yarıya indi.
  • Equality Graphs bağlantısı üzerinden ESC/Java'yı keşfettim. ESC/Java'yı gerçekten deneyen ya da onunla başarı sağlayan biri olup olmadığını merak ediyorum. Spot bugs (önceden Findbugs olarak biliniyordu) ile karşılaştırmak ilginç olurdu.
  • Cranelift kullanan debug derlemelerinin geliştirme iterasyon hızını artıracak olması beni çok heyecanlandırıyor. Özellikle yineleme hızının önemli olduğu WASM/frontend Rust tarafında, Rust araçlarında yeni dönem zaman zaman 1 saniyenin altında derlemeler sunuyor. Henüz ARM macOS desteklenmediği için M1-3 kullanıcılarının biraz beklemesi gerekecek.
  • Cranelift kullanıldığında çalışma zamanı için (derleme süresi değil) benchmark olup olmadığını merak ediyorum. Yazıda "iki kat daha yavaş" denmiş, ama o veri 2020'ye ait. O zamandan beri kayda değer ölçüde iyileşip iyileşmediğini merak ediyorum.
  • Cranelift'in neden LLVM'den daha hızlı olmasının beklendiğini ve bu iyileştirmelerin neden LLVM'ye de uygulanamayacağını açıklayabilecek biri var mı diye merak ediyorum.