11 पॉइंट द्वारा GN⁺ 2024-03-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Cranelift, Apache-2.0 लाइसेंस वाला एक code generation backend है, जिसे WebAssembly के लिए Wasmtime runtime के हिस्से के रूप में विकसित किया गया था
  • अक्टूबर 2023 में, Rust project ने Cranelift को nightly toolchain के एक optional component के रूप में उपलब्ध कराना शुरू किया
  • अब उपयोगकर्ता Cranelift को Rust में लिखे गए projects के debug builds के लिए code generation backend के रूप में इस्तेमाल कर सकते हैं
  • Cranelift मौजूदा compilers से प्रतिस्पर्धा करता है और महत्वपूर्ण optimizations को प्राथमिकता देने वाले simplified design की वजह से तेज़ी से code generate करता है

compile time का महत्व

  • Programming languages के users तेज़ compile time चाहते हैं
  • LLVM इस्तेमाल करने वाली दूसरी भाषाओं की तरह Rust में भी compile time को लेकर शिकायतें रही हैं
  • जो compiler पर्याप्त तेज़ी से code generate करता है, वह interpreter इस्तेमाल करने की तुलना में फायदेमंद हो सकता है
  • compile speed पर केंद्रित compiler मूल्यवान हो सकता है

Cranelift के optimizations

  • Cranelift code generation के दौरान कई तरीकों से optimization करता है
  • इसका optimization pipeline E-graphs पर आधारित है, जो intermediate representations के समूह को कुशलता से दर्शाने वाली data structure है
  • पारंपरिक compilers में optimization का क्रम generated code की गुणवत्ता पर बड़ा असर डालता है
  • Cranelift E-graph का उपयोग करके यह सुनिश्चित करता है कि optimization का क्रम परिणाम को प्रभावित न करे
  • E-graph से अंतिम representation निकालना एक NP-complete समस्या है, लेकिन Cranelift heuristics का उपयोग करके पर्याप्त अच्छा representation तेज़ी से निकाल लेता है

Rust के लिए Cranelift

  • Cranelift को Rust backend के रूप में इस्तेमाल करने के लिए काफ़ी प्रयास किए गए
  • Rust compiler type-checked program को दर्शाने के लिए mid-level IR का उपयोग करता है
  • Cranelift का उपयोग करने के लिए mid-level IR को CLIF में बदलने वाली एक library की ज़रूरत थी
  • यह library मुख्य रूप से Rust compiler team के सदस्य "bjorn3" द्वारा लिखी गई थी
  • उपयोगकर्ता rustup और cargo का उपयोग करके Cranelift backend को आज़मा सकते हैं.

GN⁺ की राय

  • Cranelift की शुरुआत को Rust community में compile time कम करने की लगातार मांग के जवाब के रूप में देखा जा सकता है। इससे developers की productivity बेहतर हो सकती है।
  • E-graphs का उपयोग करके optimization order की समस्या को हल करने का Cranelift का तरीका compiler design में एक नया paradigm पेश करता है। यह compiler research और development को नई दिशा दे सकता है।
  • आलोचनात्मक दृष्टि से देखें तो LLVM की तुलना में Cranelift कितना stable और efficient है, यह अभी और वास्तविक use cases के माध्यम से परखा जाना बाकी है।
  • Cranelift जैसी क्षमताएँ देने वाले अन्य compiler backends में GCC का libgccjit आदि शामिल हैं, और इन विकल्पों से तुलना करके Cranelift के फायदे और सीमाएँ अधिक स्पष्ट रूप से समझी जा सकती हैं।
  • Cranelift अपनाने वाले developers को मौजूदा LLVM-आधारित infrastructure के साथ compatibility और migration cost पर विचार करना चाहिए, और Cranelift की performance तथा stability का सावधानी से मूल्यांकन करना चाहिए।

1 टिप्पणियां

 
GN⁺ 2024-03-19
Hacker News राय
  • बैकएंड और optimization को अलग-अलग crates के लिए अलग तरीके से इस्तेमाल किया जा सकता है। dependencies के लिए optimized LLVM build का उपयोग करना, और अपने कोड के लिए debug LLVM या Cranelift का उपयोग करना अक्सर समझदारी भरा होता है.
  • यह optimization speed बनाम optimization quality पर शानदार overview देने वाला लेख है। खास तौर पर, precompiled code का उपयोग करने वाला copy-patch compilation अब भी सबसे तेज़ है, लेकिन optimization की गुंजाइश कम रहती है। Cranelift, IR में equivalence दिखाने के लिए e-graphs का उपयोग करता है, जिससे copy-patch approach की तुलना में अधिक optimization संभव होते हैं। सबसे अधिक optimized output शायद LLVM या GCC जैसे पारंपरिक compiler toolchain से ही आएगा, लेकिन जो उपयोगकर्ता जितनी जल्दी हो सके "काफ़ी तेज़" output पाना चाहते हैं, उनके लिए नई compiler तकनीकें एक आशाजनक विकल्प देती हैं.
  • पूरे debug build पर बहुत सी टिप्पणियाँ हैं, लेकिन मुझे लगता है कि छोटे बदलावों के लिए incremental build time सबसे अहम फ़र्क है। यही development iteration को तेज़ करता है। rust-analyzer और gleam project में छोटे बदलाव के बाद build time की तुलना करने पर, Cranelift और mold जोड़ने वाले मामले में सुधार काफ़ी ज़्यादा तेज़ दिखा। Go भाषा में बने Terraform से तुलना करने पर भी Rust में बड़ा सुधार दिखता है.
  • फ़िलहाल M1-M3 Mac support नहीं है, और Windows support भी नहीं लगता। सबसे सक्रिय contributor के ताज़ा update का निष्कर्ष कुछ अस्पष्ट है। Windows support अभी छोड़ा गया है, और macOS अभी केवल x86_64 को support करता है। अगर आप M1 processor इस्तेमाल कर रहे हैं, तो x86_64 version का rustc install करके Rosetta 2 आज़मा सकते हैं, लेकिन Rosetta 2 performance को प्रभावित कर सकता है, इसलिए इसे LLVM backend से तुलना करके देखना चाहिए.
  • Bevy project में लेख के निर्देशों को आज़माकर "सामान्य" build से तुलना की गई। Cranelift+debug build की तुलना में release build तेज़ लगता है, लेकिन इसका कारण sccache और local NAS के साथ caching है। caching के बिना केवल debug build दोबारा चलाने पर compile time लगभग आधा हो गया.
  • Equality Graphs लिंक के ज़रिए ESC/Java का पता चला। जिज्ञासा है कि क्या किसी ने वास्तव में ESC/Java को आज़माया है या उसमें सफलता पाई है। Spot bugs (पहले Findbugs के नाम से जाना जाता था) से इसकी तुलना दिलचस्प होगी.
  • इस बात को लेकर बहुत उत्साह है कि Cranelift के साथ debug build development iteration की गति बढ़ा सकता है। खासकर WASM/Frontend Rust में iteration speed अहम होती है, जहाँ Rust tooling का नया दौर कभी-कभी 1 सेकंड से कम build भी देता है। अभी ARM macOS support नहीं है, इसलिए M1-3 users को थोड़ा इंतज़ार करना होगा.
  • जिज्ञासा है कि Cranelift इस्तेमाल करने पर runtime के benchmark मौजूद हैं या नहीं, compile time के नहीं। लेख में "दो गुना धीमा" कहा गया है, लेकिन वह data 2020 का है। तब से इसमें काफ़ी सुधार हुआ है या नहीं, यह जानना दिलचस्प होगा.
  • जिज्ञासा है कि कोई समझा सकता है क्या कि Cranelift के LLVM से तेज़ होने की उम्मीद क्यों की जाती है, और जो सुधार इसमें हैं वे LLVM पर लागू क्यों नहीं किए जा सकते.