- Krabby
rustc की धीमी compile speed को बेहतर बनाने की कोशिश करने वाला performance-first blank-slate Rust compiler implementation है
rustc में महसूस होने वाले performance improvements अब single function changes से कम और API तथा data structure changes से ज़्यादा आते हैं, लेकिन बड़े codebase और stability requirements की वजह से बड़े पैमाने के बदलाव कठिन हैं
- Krabby एक ऐसे छोटे codebase में, जिसे एक व्यक्ति नियंत्रित करता है, stability को प्राथमिकता दिए बिना compiler components को साथ में फिर से design करके नई optimization opportunities और अधिक cohesive architecture खोजने की कोशिश करता है
- लक्ष्य यह परखना है कि compiler performance को बहुत बढ़ाने के लिए design को पूरी तरह फिर से सोचना पड़ता है या नहीं, और यह परिकल्पना Rust जैसी जटिल भाषा में भी लागू होती है या नहीं
- कोड Codeberg के krabby repository में सार्वजनिक है, और प्रगति को Fediverse पर हर 1–2 हफ्ते में कम से कम एक बार पोस्ट करने का लक्ष्य है
Krabby के लक्ष्य और पृष्ठभूमि
- Rust पसंदीदा भाषा है, लेकिन
rustc compiler साफ़ तौर पर धीमा है
rustc performance सुधारने पर पहले से बहुत लोग काम कर रहे हैं, और single function change से महसूस होने वाले performance gains देने वाले ज़्यादातर improvements लगभग लागू हो चुके हैं
- अब meaningful improvements मुख्यतः API और data structure changes से आते हैं, लेकिन
rustc जैसे बड़े codebase में कई features के विकास और stability requirements के कारण बड़े architectural changes करना व्यावहारिक रूप से कठिन है
- Krabby performance को प्राथमिकता देने वाला blank-slate Rust compiler implementation है, और इसका लक्ष्य
rustc से मूल रूप से अलग है
- क्योंकि छोटा codebase एक व्यक्ति के नियंत्रण में है और stability को प्राथमिकता नहीं दी जाती, इसलिए यह ऐसा approach अपनाता है जिसमें सभी components को एक-दूसरे के संदर्भ में design करके नई optimization opportunities खोजी जाएँ और अधिक cohesive architecture बनाया जाए
- इसकी शुरुआत इस परिकल्पना से होती है कि compiler performance में बड़ा सुधार लाने के लिए compiler design को पूरी तरह फिर से सोचना होगा
- इसका उद्देश्य यह दिखाना है कि बड़े architectural optimizations, target language चाहे जो भी हो, छिपे हो सकते हैं, और वे सिर्फ़ C जैसी सरल भाषाओं पर ही नहीं बल्कि Rust जैसी जटिल भाषाओं पर भी लागू हो सकते हैं
- भले ही अंतिम design Rust के लिए विशेषीकृत हो, फिर भी इस प्रक्रिया से सीखने लायक बहुत कुछ है
प्रोजेक्ट की स्थिति और सार्वजनिक सामग्री
- Krabby बहुत बड़ा प्रोजेक्ट है, और इसे पूरा कर पाना या स्वयं इसका सही व्यक्ति होना—इनमें से किसी पर भी पूरा भरोसा नहीं है
- फिर भी code को optimize करने और उसे अधिक पूर्ण बनाने की प्रक्रिया स्वयं पसंद है, और जिस उद्देश्य को मूल्यवान माना जाता है उसके लिए अच्छा code लिखने का आनंद अब तक इसकी प्रेरक शक्ति रहा है
- कोड Codeberg के krabby repository में सार्वजनिक है
- प्रगति को Fediverse पर हर 1–2 हफ्ते में कम से कम एक बार पोस्ट करने का लक्ष्य है, और अधिक गहरे, लंबे updates उसी साइट पर पोस्ट किए जाएँगे
- रुचि रखने वाले लोग ईमेल से संपर्क कर सकते हैं
-
संबंधित प्रगति लेख
1 टिप्पणियां
Lobste.rs की राय
लगता है हर कोई अपना vanity license रखना चाहता है https://codeberg.org/bal-e/krabby/…
इस लाइसेंस में व्यक्तिगत और गैर-व्यावसायिक उपयोग व शेयरिंग मुफ्त है, लेकिन उसके ऊपर बने सॉफ़्टवेयर को भी उन्हीं शर्तों पर शेयर करना होगा, और व्यावसायिक उद्देश्य के लिए सिर्फ 30 दिनों का ट्रायल उपयोग संभव है
मुझे जिज्ञासा है कि क्या Codeberg प्रोजेक्ट लाइसेंस के लिए libre/open source को लेकर सख्त शर्तें मांगता है। मुझे पता था कि Codeberg सिर्फ FOSS होस्ट करता है, इसलिए non-commercial use restriction थोड़ा अप्रत्याशित लगा, हालांकि हो सकता है मैं हाल की स्थिति से पूरी तरह अपडेट न हूँ
Rust बहुत बड़ा है। यह प्रोजेक्ट “खुद से web browser बनाना” जितना कठिन नहीं लगता, लेकिन इसका मतलब यह बिल्कुल नहीं कि यह आसान है। फिर भी इतने बड़े लक्ष्य की मैं सराहना करता हूँ
krabby: motivations को देखने पर लगता है कि speed इस प्रोजेक्ट का मुख्य कारण है
Rust के बारे में मेरी समझ के अनुसार type checking, borrow checking वगैरह पहले से ही काफ़ी तेज़ हैं, और bottleneck code generation है, जिसका बड़ा हिस्सा Rust से ज़्यादा LLVM से जुड़ा हुआ है
मुझे जिज्ञासा है कि आजकल Cranelift की दिशा क्या है, और क्या इसमें code generation की speed बढ़ाने वाले विचारों से कोई overlap है
निजी तौर पर मुझे काफ़ी भरोसा है कि पूरी compile pipeline को देखें तो यह बात सही नहीं बैठती। हमें MIR-only rlib चाहिए, और ऐसा backend भी चाहिए जो अनंत RAM के बिना whole-world optimization कर सके (यह टिप्पणी देखें)
“Codegen Unit” पूरी तरह accidental complexity है
खासकर libraries और binaries का विस्तृत breakdown दिलचस्प हो सकता है
LLVM बहुत तेज़ नहीं है, लेकिन मुझे याद है कि rustc का LLVM को कुछ हद तक bloated IR देना भी मददगार नहीं रहा
मेरा मध्यम-अवधि लक्ष्य, यानी अगले लगभग 5 वर्षों का लक्ष्य,
cargo checkहै, इसलिए मैं code generation को छू नहीं रहाफिर भी मुझे लगता है कि बेहतर parallelism, diagnostic code के hot path को अलग करना, type checking और borrow checking के बीच दोहराए जाने वाले काम को कम करना, और core data structures की memory layout सुधारना जैसी चीज़ों में optimization की अब भी काफी गुंजाइश है
यह भी मदद करता है कि मेरी rustc developers से काफ़ी पहचान है, इसलिए codebase की कई समस्याओं के बारे में अक्सर सुनता रहता हूँ