2025 में Rust: foundational software का लक्ष्य
(smallcultfollowing.com)- Rust इस साल अपनी 10वीं वर्षगांठ मना रहा है और आगे चलकर foundational software विकास की एक प्रमुख भाषा के रूप में स्थापित हो रहा है
- foundational software से मतलब उस आधारभूत परत से है जिस पर सब कुछ टिका होता है, जैसे operating system kernel, cloud platform, embedded device, CLI tool आदि
- Rust, C/C++ स्तर का performance और reliability देता है, और साथ ही memory safety सुनिश्चित करने वाले type system के जरिए प्रवेश बाधा को कम करता है
- Rust का मिशन सिर्फ आधारभूत क्षेत्रों तक सीमित नहीं है; Dioxus, Tauri, Leptos जैसे प्रोजेक्ट्स के माध्यम से यह उच्च-स्तरीय application development पर भी प्रभाव डाल रहा है
- आगे language interoperability, type system विस्तार, ecosystem को मजबूत करना जैसी चीज़ों को प्रमुख निवेश क्षेत्रों के रूप में योजना में रखा गया है
Rust का विज़न: foundational software
- Rust का मुख्य विज़न foundational software को लिखना और maintain करना अधिक आसान बनाना है
- foundational software में operating system kernel, cloud infrastructure, embedded device, CLI tool आदि शामिल हैं, जो हर system की नींव बनते हैं
- इसे पहले से Windows और Linux kernel, VSCode search engine ripgrep, Deno, Python uv package manager जैसी कई जगहों पर अपनाया जा रहा है
- ऐसे software में performance, reliability, productivity तीनों एक साथ महत्वपूर्ण हैं
- अगर नींव कमजोर हो जाए तो उसके ऊपर की पूरी परत प्रभावित होती है, इसलिए स्थिरता अनिवार्य है
- performance में गिरावट ऊपर की परतों की performance सीमा तय कर देती है, इसलिए न्यूनतम overhead आवश्यक है
foundational software में performance, reliability, productivity
- foundational software में, हर दूसरे software की तरह, कई तरह की आवश्यकताएँ होती हैं, लेकिन यहाँ हर तत्व और भी अधिक महत्वपूर्ण हो जाता है
- Reliability सर्वोच्च प्राथमिकता है। अगर नींव टूटती है, तो उसके ऊपर की हर चीज़ विफल हो जाती है
- Performance overhead ऊपरी परतों की performance सीमा तय करता है, इसलिए इसे न्यूनतम रखना ज़रूरी है
- पहले इन आवश्यकताओं को पूरा करने के लिए दो विकल्प हुआ करते थे
- C/C++: बहुत अधिक स्वतंत्रता देता है, लेकिन उसी अनुपात में पूर्णता और सावधानी भी मांगता है
- Java, Go जैसे उच्च-स्तरीय भाषाएँ: performance बनाए रखने के लिए विशेष coding शैली की ज़रूरत पड़ती है, और abstraction व convenience के उपयोग पर सीमाएँ आती हैं
- Rust ने zero-cost abstraction और memory safety सुनिश्चित करने वाले type system के संयोजन से इस पुराने ढाँचे को बदल दिया
- यह ऐसा साधन बन गया है जो उच्च-स्तरीय code को सुरक्षित रूप से लिखते हुए, low-level performance और memory stability दोनों हासिल करने देता है
प्रवेश बाधा कम करना और डेवलपर क्षमता बढ़ाना
- Rust प्रस्तुतियों में type system और static checks को अक्सर "पालक" के रूपक से समझाया जाता है — यानी अच्छी चीज़, लेकिन खाने का मन न करने वाली
- व्यावहारिक रूप से देखें तो type system डेवलपर के लिए एक बेहद शक्तिशाली हथियार है
- शुरुआती डेवलपर type system सीखते हुए सफल software structure बनाना भी सीख सकते हैं
- अनुभवी डेवलपर अपनी खुद की structure design में गलतियाँ और जल्दी पकड़ सकते हैं
- Yehuda Katz का यह कथन भी इसे अच्छी तरह समेटता है: "ध्यान की अवस्था में बनाई गई abstraction मेरे थके हुए भविष्य की मदद करती है"
non-foundational software क्षेत्र
- Rust का मिशन भले foundational software पर केंद्रित हो, इसका मतलब यह नहीं कि अन्य क्षेत्रों को नज़रअंदाज़ किया जा रहा है
- Dioxus, Tauri, Leptos जैसे प्रोजेक्ट्स, Rust का उपयोग करके GUI, web page जैसे उच्च-स्तरीय application क्षेत्रों तक भी विस्तार कर रहे हैं
- Rust की मुख्य ताकत मूल रूप से foundational software पर केंद्रित है, लेकिन इन प्रयासों को नज़रअंदाज़ नहीं किया जाना चाहिए
stretch goals और growth
- foundational software में low-level details पर नियंत्रण की ज़रूरत होती है, इसलिए आम तौर पर accessibility और usability (ergonomics) को कम महत्वपूर्ण माना जाता है
- लेकिन जितना अधिक सूक्ष्म नियंत्रण चाहिए, उतनी ही अधिक usability भी महत्वपूर्ण हो जाती है
- अगर डेवलपर को सचमुच महत्वपूर्ण हिस्सों पर ही ध्यान केंद्रित करने में मदद मिले, तो productivity बहुत बढ़ सकती है
- Rust के उच्च-स्तरीय उपयोग को आगे बढ़ाने वाले प्रोजेक्ट्स, Rust programming को और सुविधाजनक बनाने के अवसर देते हैं
- ऐसे सुधार foundational software development में भी सीधे परिलक्षित होते हैं
- मूल बात यह है कि control और reliability खोए बिना usability बढ़ाई जाए
full stack support का महत्व
- Rust में उच्च-स्तरीय application development को सहज बनाने की एक और वजह यह है कि full stack को एक ही technology से बनाया जा सकता है
- कई डेवलपर जो शुरुआत में Rust को सिर्फ data plane services जैसे कुछ हिस्सों में इस्तेमाल करना चाहते थे, बाद में उसे पूरे क्षेत्र में फैलाते देखे गए हैं
- ऐसा इसलिए है क्योंकि Rust में productivity अधिक है, और एक ही भाषा में library व code sharing संभव है
- मूल रूप से सरल code, किसी भी भाषा में लिखा जाए, सरल ही रहता है
iterative deepening का अनुभव
- आदर्श रूप से Rust उपयोगकर्ता का पहला अनुभव सरल होना चाहिए, और जैसे-जैसे प्रोजेक्ट आगे बढ़े, वैसे-वैसे अधिक नियंत्रण को स्थानीय रूप से क्रमिक रूप से बढ़ाया जा सके
- यह सुनने में सरल लगता है, लेकिन वास्तविकता में यह बहुत कठिन चुनौती है
- कई प्रोजेक्ट्स या तो शुरुआती उपयोगकर्ताओं के लिए बहुत ऊँची प्रवेश बाधा रखते हैं, या फिर उच्च-स्तरीय नियंत्रण सीखने के लिए अत्यधिक ज्ञान मांगते हैं, और इसी कारण असफल हो जाते हैं
- Rust हमेशा इसमें सफल नहीं होता, लेकिन इसे बेहतर बनाने के लिए लगातार प्रयास कर रहा है
आगे की योजना
- यह लेख इस श्रृंखला का पहला लेख है, और आगे चार और लेखों में उन निवेश क्षेत्रों को प्रस्तुत किया जाएगा जिनकी Rust को foundational software के लिए और अधिक उपयुक्त बनने हेतु आवश्यकता है
- smooth language interop और extensibility
- type system के माध्यम से clarity of purpose
- ecosystem को मजबूत करना: बेहतर guidelines, tools, और Rust Foundation का उपयोग
- अंतिम लेख में Rust open source organization संचालन पर चर्चा होगी, और यह देखा जाएगा कि contribution और maintenance को यथासंभव अधिक सुलभ और आनंददायक गतिविधि कैसे बनाया जाए
15 टिप्पणियां
मुझे लगता है कि Rust अकेली ऐसी भाषा है जो चाहे ठीक-ठाक लगती हो, लेकिन उसके toxic fandom(?) की वजह से उससे दूरी बनती है.
काश C या C++ के लिए भी कोई standard package manager होता। Cargo को देखते ही हमेशा यही ख्याल आता है।
पालक कितनी स्वादिष्ट होती है....
आजकल ऐसा कोई क्षेत्र नहीं बचा जहाँ Rust का इस्तेमाल न हो रहा हो।
मैं भले ही एक बड़ी कंपनी में काम करता हूँ, लेकिन वहाँ Rust इस्तेमाल होने वाला कोई क्षेत्र नहीं है। कृपया बढ़ा-चढ़ाकर पेश न करें।
झगड़ा मत शुरू कीजिए
धत्त;;
बेवजह पंगा मत लो डोल डोल
ओह ;;;
वाह;;;
बाकी सब छोड़ दें, आजकल के Rust फैनबॉयज़ की वजह से हालत खराब होने लगी है। ऑफ़लाइन में तो यह माइनर में भी बहुत ही छोटा माइनर है, लेकिन ऑनलाइन पर तो लगभग ISIS जैसा... काश ये लोग कहीं एक जगह इकट्ठा होकर बस आपस में ही खेलते रहते...
Rust के बड़े समर्थकों में भी अक्सर यह शक होता है कि क्या वे खुद वास्तव में इसे ठीक से इस्तेमाल कर रहे हैं।
फिर भी... आपको Rust पसंद है, है न?
Rust-इस्लाम से नफ़रत करें तो भी चलेगा, लेकिन Rust से प्यार कीजिए T_T
FFmpeg की वजह से बुरी तरह पिटने के बाद भी कहते हैं कि सारा कोड Rust में ही लिखना चाहिए वगैरह।
Hacker News टिप्पणियाँ
मुख्य सॉफ़्टवेयर की बात करते समय Rust में सबसे खलने वाली चीज़ ABI है। अगर Rust से OS बनाकर समृद्ध सेवाएँ देनी हैं, तो OS अपग्रेड होने पर भी एप्लिकेशन लाइब्रेरी को दोबारा compile किए बिना चलने चाहिए। Windows ने COM, Apple ने एक समय ObjC के dynamic dispatch (और अब Swift ABI), Android ने JVM और bytecode के जरिए इस समस्या को हल किया। Rust व्यावहारिक रूप से सिर्फ
extern "C"ही सपोर्ट करता है, इसलिए dynamic library का उपयोग सीमित है। VM लेयर (JVM, .NET) के बिना ABI देना बहुत कठिन है, और एक बार तय किए गए implementation details को कभी बदलना नहीं पड़ना चाहिए, इसलिए इसका प्राथमिकता में पीछे रहना स्वाभाविक लगता है। वास्तव में इस मॉडल में सफल उदाहरण Swift और COM जैसे ही हैं। अगर Rust में एक पूर्ण ABI आ जाए, तो यह लगभग एक परफ़ेक्ट भाषा बन सकती है। (binary रूप में dependencies मैनेज करने से compile time भी बहुत घटेगा)dlopen) करने के लिए stabby, abi_stable जैसे tools मौजूद हैं और काफ़ी अच्छे से काम करते हैं। अधिक सामान्य inter-language interoperability के लिए crABI (crABI प्रस्ताव) भविष्य का विकल्प हो सकता है। लेकिन यह ऐसी समस्या नहीं है जिसे सिर्फ Rust अकेले हल कर सके; दूसरी भाषाओं और Linux distribution जैसे कई समुदायों का समर्थन और सहयोग चाहिए होगा। यह भी कहा गया कि क्योंकि Rust I/O और memory allocation का तरीका स्पष्ट रूप से चुनने वाली भाषा है, इसलिए Swift की तरह सब कुछ shared libraries से हल करने वाला ढांचा इस पर फिट न भी बैठेrepr(wasm)/extern "wasm"जितना आसान नहीं है, लेकिन wit-bindgen या wasm32-wasip2 target का उपयोग करके इसे बिना ज़्यादा कठिनाई के इस्तेमाल किया जा सकता है। Wasm Components परिचय वीडियोextern "C"ABI से ही ज़रूरी काम हो जाते हैं। औरexternABI को अधिक प्रकारों तक बढ़ाने का प्रस्ताव भी देखा गया हैCहैRust बहुत पसंद है, लेकिन कुछ पुरानी परेशान करने वाली समस्याएँ हैं जिन्हें और ध्यान मिलना चाहिए
“Smooth, iterative deepening” अभिव्यक्ति पर सोचते हुए कहा गया कि Rust अगर cross-language compatibility को बहुत ज़्यादा महत्व देगा तो उल्टा complexity बढ़ेगी और safety को नुकसान पहुँच सकता है। ऐसे में libc की तरह सिस्टम की निचली परत को बदलना ज़्यादा मददगार होगा। Go लगभग cross-language calls नहीं करता। Google ने core libraries खुद बनाकर मज़बूत आधार तैयार किया, लेकिन Rust में अलग-अलग versions की बुनियादी libraries बिखरी हुई हैं और बहुत-सी अधूरी हैं
इस बात पर ज़ोर दिया गया कि “allocation से बचो, GC trigger मत होने दो” जैसी सोच आधुनिक GC और JIT की समझ से मेल नहीं खाती। आधुनिक GC में कई बार stop-the-world latency लगभग न के बराबर होती है, और कुल GC CPU usage मुख्य रूप से resident set और heap size के अनुपात पर निर्भर करती है। JIT को AOT की तुलना में optimization के ज़्यादा अवसर मिलते हैं, और वह ज़्यादा आक्रामक खोज कर सकता है (speculative optimization की वजह से)। असली महत्व startup/warm-up delay, memory overhead, और worst-case performance के बिगड़ने की बजाय average performance का है। इसके अलावा, manual memory management ज़रूरी नहीं कि हमेशा ज़्यादा efficient हो, और RAM usage 3 गुना बढ़ने पर भी लागत का अंतर शून्य हो सकता है। इस विषय पर अच्छी ISMM कॉन्फ़्रेंस प्रस्तुति भी सुझाई गई
माना गया कि flagged comments और चर्चा ने मुद्दों को अच्छी तरह पकड़ा। “औपचारिक specification वाला language standard बनाया जाए”, “कई implementations की ज़रूरत है” जैसे सवाल व्यवहारिक रूप से महत्वपूर्ण हैं। विशेष रूप से @infogulch ने यह बात सही पकड़ी कि अगर किसी language को industry का आधार बनना है तो औपचारिक specification ज़रूरी है (संदर्भ टिप्पणी)
लोग अक्सर यह पूछे जाने पर ही सवाल उठाते हैं कि Rust को specification की ज़रूरत है भी या नहीं, और यह दिखाता है कि software engineering में वास्तविक engineering कितनी कम है
Rust को “ऐसी भाषा जिसे सिर्फ़ वे लोग इस्तेमाल करते हैं जो programmer जैसा दिखना चाहते हैं” कहने वाली टिप्पणी पर जवाब में कहा गया कि वह खुद programming से प्यार करता है और Rust उसके लिए एक ताज़ा झटका था। वह C++ के अत्यंत पीड़ादायक अतीत में लौटना नहीं चाहता। और language standard (ferrocene specification donation) या implementations की संख्या को इतना महत्वपूर्ण नहीं मानता। Python और Java भी एक केंद्रीय implementation पर निर्भर रहकर अच्छी तरह चलते हैं। C++ ने कई compilers को support करने की कोशिश में अंततः platform-specific complexity ही बढ़ाई।
cargoका “mess” आखिर क्या है, यह स्पष्ट नहीं, और C++ पक्ष कहीं ज़्यादा असुविधाजनक लगाcargoके बारे में खास तौर पर क्या समस्या है, यह पूछने वाली प्रतिक्रिया हैcargoइस समय दुनिया की प्रमुख भाषाओं में सबसे बेहतरीन package manager है। इसने पिछले package managers की विफलताओं से सीखकर सबसे polished और infrastructure के तौर पर भी उच्च स्तर का रूप लिया है। namespace, पूर्ण repeatable builds जैसी कुछ सुधारों की गुंजाइश हो सकती है, लेकिन आज केcargoको किसी दूसरी भाषा पर चढ़ा देना लगभग असंभव है। इतनी मज़बूत infrastructure वाली भाषाएँ बहुत कम हैं