- Git प्रोजेक्ट ने आधिकारिक रूप से घोषणा की है कि आगे चलकर वह core में Rust को अपनाएगा, और Git 3.0 से Rust build के लिए अनिवार्य आवश्यकता होगा
- यह patch series, अतीत में C99 features को अपनाने की तरह, परीक्षणात्मक अपनाने (test balloon) के रूप में आगे बढ़ रही है, जिसका उद्देश्य Rust adoption infrastructure को धीरे-धीरे तैयार करना है
- पहले चरण में, लगभग बिना dependencies वाले varint.c module को Rust में बदलकर C-Rust interoperability और build tooling की जाँच की गई
- फिलहाल केवल Meson build supported है, और आगे Makefile support के साथ CI में Rust build verification और
cargo format आधारित format consistency checks जोड़े जाने की योजना है
- यह Git community और distributors को नई Rust toolchain requirements के अनुकूल होने के लिए समय देते हुए, लंबे समय में code safety और scalability बढ़ाने वाला एक महत्वपूर्ण बदलाव है
Rust अपनाने की पृष्ठभूमि
- Git स्थिरता और maintainability के लिए भाषाई evolution पर विचार करता रहा है
- Rust को अपनाने का मतलब memory safety को मजबूत करना, modern toolchain का उपयोग, और performance optimization की संभावनाएँ सुनिश्चित करना है
- साथ ही, modern language को अपनाकर एक अधिक मजबूत codebase बनाने का लक्ष्य भी है
- Git 3.0 release के समय Rust का अनिवार्य होना पहले से घोषित करके ecosystem को तैयारी का समय देने का उद्देश्य है
- चरणबद्ध तरीके से Rust code के दायरे को बढ़ाते हुए, अंततः कुछ core features को भी Rust में फिर से implement करने की योजना है
परीक्षणात्मक patch series
- Rust के पहले target module के रूप में varint.c को चुना गया
- यह बहुत सरल है और इसकी dependencies नहीं के बराबर हैं
- C ↔ Rust interop verification संभव है
- Git की पूरी functionality पर असर डाले बिना प्रयोग किया जा सकता है
- सभी tests varint.rs version में pass हुए
build system में बदलाव
- फिलहाल केवल Meson build system में Rust support जोड़ा गया है
- आगे Makefile में भी Rust support जोड़ने की योजना है
- CI से जुड़े काम की तैयारी भी ज़रूरी है
- Rust build और behavior verification
cargo format के जरिए code style consistency सुनिश्चित करना
- अन्य tooling और maintenance automation
आगे की योजना
- यह काम Rust feature खुद से ज़्यादा adoption process के प्रयोग पर केंद्रित है
- आगे चलकर xdiff module सहित Git की और internal functionality को Rust में फिर से लिखा जा सकता है
- Rust को धीरे-धीरे व्यापक रूप से लागू करते हुए पूरे ecosystem को Rust-based build environment के अनुकूल बनने के लिए प्रेरित किया जाएगा
निहितार्थ
- Git अपने इतिहास के सबसे महत्वपूर्ण भाषाई बदलाव की तैयारी कर रहा है
- Rust को अनिवार्य बनाने से safety, maintainability, और long-term evolution की क्षमता सुनिश्चित की जा सकती है
- distributors और developers के लिए आगे Git ecosystem में Rust development environment बनाना अनिवार्य हो जाएगा
1 टिप्पणियां
Hacker News राय
संबंधित चर्चा लिंक
चूँकि Rust support भी एक ऐसे भाषा इकोसिस्टम से जुड़ा है जिसका कोई मानक नहीं है, इसलिए शक है कि समय के साथ इसका implementation काफ़ी पीछे रह सकता है, जैसा पहले Java के साथ हुआ था
Git पहले से ही एक काफ़ी परिपक्व टूल दिखता है, और लगता है कि उसे बस maintenance या improvement की ज़रूरत है; इतना बड़ा नया codebase चाहिए, ऐसा नहीं लगता कि उसके लिए नई भाषा लानी पड़े
Linux की तरह जहाँ लगातार नए drivers की ज़रूरत होती है, Git में ऐसा कारण दिखाई नहीं देता
अगर मैं कुछ मिस कर रहा हूँ तो कोई समझाए, ऐसी अपेक्षा है
Git के changes RelNotes में देखे जा सकते हैं, या GitHub ब्लॉग के Git category में उन्हें थोड़ा आसान रूप में देखा जा सकता है
git-branchless में Rust में लिखा गया in-memory merge जैसी capabilities हैं
Rust से जुड़ी बातें उस mailing list में और खोजी जा सकती हैं
(स्वयं पक्ष-विपक्ष का मूल्यांकन नहीं किया गया; बस कहा गया कि कोई न कोई वह कर देगा)
C में Git develop करना चाहने वाले लगभग नहीं हैं, जबकि Rust में rewrite में रुचि रखने वाले developers उत्साह से जुड़ना चाहते हैं
Git बहुत mature है, इसलिए लगता नहीं कि बहुत अधिक नया code जोड़ा जाएगा
Rust, C की तुलना में काफ़ी अधिक complex है
अगर वास्तव में object-oriented features चाहिएँ, तो सिर्फ़ C++98 तक का उपयोग भी recent C++ या Rust की तुलना में कहीं अधिक सरल और समझने में आसान होगा
Rust भविष्य के patches के लिए अनिवार्य नहीं होगा, बल्कि build system के भीतर अनिवार्य होने वाला है
अगर वह ग़लत हो तो फिर से सुधारा जा सकता है
क्या build system को build करने के लिए इसकी ज़रूरत है, या application build में भी यह अनिवार्य होगा?
Git में गहराई से निवेश किया है और कई projects बनाए हैं, इसलिए Git की hackability खोना नहीं चाहता
वास्तव में Rust सामान्य C, खासकर bug-prone C, की तुलना में सीखना आसान है, और Git या Linux source को समझने से तो निश्चित रूप से आसान है
GitHub के अनुसार C 50%, Shell 38%, Perl 4%, और बाकी TCL/Python आदि हैं
Perl/TCL ही वास्तव में अधिक अपवाद जैसे हैं
project बढ़ने के साथ जगह-जगह जोड़े गए hacky code काफ़ी जमा हो गए, और अब safety/performance सुधारने तथा पुराने hacky code को साफ़ करने का समय है
Rust इसके लिए उपयुक्त माना गया
Git अगर Rust का कुछ हिस्सा उपयोग करे, तो भी इससे मेरे खुद के Git client या server development में रुकावट नहीं आएगी
Debian release notes में भी Rust/Go packages से जुड़े issues स्पष्ट रूप से बताए गए हैं
Rust packages बनाते समय static linking की समस्या के कारण अक्सर दोबारा build करना पड़ता है, जिससे व्यावहारिक उपयोग में असुविधा होती है
Linux OS में अनिवार्य stable ABI/shared library की समस्या को अगर Rust पक्ष नज़रअंदाज़ करता है, तो वह C से भी अधिक शिकायतें पैदा कर सकता है
बड़े software architecture में इस पर अधिक सावधानी से सोचना चाहिए
उदाहरण के लिए इस लेख में NonStop keyword खोजने को कहा गया
RESF आदि में अक्सर कहा जाता है कि "platform Rust को support नहीं करता", लेकिन वास्तव में काम तभी होगा जब Rust compiler उसे support करे
git 2.x इतना stable लगता है कि compatibility तोड़ने की कोई वजह नहीं दिखती
अब संदेह है कि हाल की development culture ऐसे toolchain workflows से दूर हो गई है
source control, build, और execution environment अलग होते थे, इसलिए remote copy या remote execution की ज़रूरत पड़ती थी, और build rules में target platform detection भी अनिवार्य था
सिर्फ़
--targetflag से लगभग 100 platforms के लिए बिना ख़ास दिक्कत के build किया जा सकता हैअसली समस्या यह मानी गई कि Git development team के कुछ लोग अपने-अपने पुराने या fixed development machines की सीमाओं पर अड़े हुए हैं
cross-compilation हमेशा second-class citizen रहा है, और बाहरी projects में उसके ठीक से काम करने की उम्मीद ही नहीं की जाती
Linux distributions भी Raspberry Pi जैसी चीज़ों के लिए कभी-कभी केवल वास्तविक hardware पर build करना पसंद करती हैं
इसी कारण कोई इसे सही ढंग से support करने में प्रयास नहीं करता
Linux इसमें विशेष रूप से गंभीर है, क्योंकि glibc की संरचना पुरानी हो चुकी है, जिससे किसी भी hardware के लिए minimum glibc target करना कठिन हो गया है
अधिकांश projects cross-compilation support की कोशिश ही नहीं करते
Zig इसे सुधारने की कोशिश कर रहा है
Git एक core project tool है, इसलिए बदलाव का जोखिम बड़ा है, और 6 महीने जैसे कम समय में उसे mandatory dependency बना देना जोखिमपूर्ण माना गया
यह जटिलता compile time पर अधिक errors पकड़ने के लिए है, लेकिन नतीजतन भाषा स्वयं काफ़ी complex हो जाती है
इसी वजह से इसके adoption की सिफ़ारिश नहीं की गई
kernel के बारे में भी ऐसा समझा गया कि उसने Rust adoption को ठुकरा दिया
पहले से complex kernel में अगर Haskell-स्तर का type system और Lisp-जैसा macro system जोड़ दिया जाए, तो complexity और बढ़ती है
serde के ज़रिए Rust code को trace करना कठिन बताया गया
इसके विपरीत Go का Unmarshal कहीं अधिक आसानी से trace किया जा सकता है
क्योंकि उनमें compiler में अधिक जानकारी व्यक्त की जा सकती है
Serde के साथ बहुत बड़ी समस्या कभी नहीं हुई, बल्कि Go के Unmarshal को debug करने की नौबत ज़्यादा आई
यह दावा भी कि kernel ने Rust को ठुकरा दिया, वास्तव में दो developers के बीच header files कहाँ रखी जाएँ इस पर हुए टकराव तक सीमित था
Rust की entry barrier C से ज़्यादा है, लेकिन 'minimum viable Rust' और 'fast, safe Rust' के बीच का अंतर C की तुलना में बहुत छोटा है
इसे borrow checker जितना ही महत्वपूर्ण बताया गया
उसका syntax भी अपेक्षाकृत उदार है
Linux kernel ने वास्तव में Rust को अस्वीकार नहीं किया है