- यह एक ऐसी कंपनी (गोपनीय) है जो करोड़ों उपयोगकर्ताओं को सेवा देती है और अपने core systems में C और C++ का उपयोग करती है
- 2023 के दौरान इस बात पर चर्चा हुई कि Rust और Zig में से किस भाषा को अपनाया जाए
- मुख्य विचार बिंदु:
- C भाषा के साथ interoperability
- इंजीनियर scalability (hiring, maintenance आदि)
- अंतिम चयन: Zig
- यह चयन प्रक्रिया इसलिए साझा की गई क्योंकि यह बड़े पैमाने की कंपनियों में "जब code कई targets पर चलता हो और करोड़ों उपयोगकर्ताओं को प्रभावित करता हो, तब किन बातों पर विचार किया जाता है" को अच्छी तरह दिखाती है
C interoperability का महत्व
- जिस library को फिर से लिखा जाना है, उसके सभी platforms (web, mobile, VR headsets, game consoles, desktop आदि) पर उपयोग होने की संभावना है
- इसलिए C API देना और FFI के माध्यम से उसका उपयोग करना ही सभी platforms पर चलना सुनिश्चित करने का एकमात्र तरीका है
मुख्य चर्चा के मुद्दे
Rust
- उस समय Zig की तुलना में 25 गुना से अधिक लोकप्रिय था (survey और subreddit के आधार पर)
- लंबे समय से अधिक स्थिर स्थिति में है
- Rust Foundation का industry sponsorship स्थिर दिखाई देता है
- उत्कृष्ट LSP और developer experience
- Cargo: उद्योग के सर्वश्रेष्ठ package managers में से एक
- memory safety और "undefined behavior नहीं" (पूरी तरह सही नहीं, लेकिन चर्चा में इसका उल्लेख हुआ)
- C++ से आगे बढ़ना हो तो memory errors और undefined behavior की संभावना के बिना Rust अधिक उपयुक्त है
nightly version में SIMD support
- WASM support Zig जितना ही सहज
- performance के मामले में Zig के बराबर, या कुछ मामलों में "काफी तेज़"
Rust की C interoperability:
- Rust का अपना ecosystem समृद्ध है, इसलिए C interoperability का महत्व अपेक्षाकृत कम है
- Python bindings जैसे high-level languages के साथ integration की संभावना अच्छी है
- यह तर्क दिया गया कि Rust के उपयोग के लाभ, C bindings देने के नुकसान से अधिक हैं
Zig
- C/C++ या TypeScript background वाले developers के लिए सीखना आसान
- C background वाले developers को सुखद coding experience देता है
- Zig compiler, C और C++ को भी compile कर सकता है, इसलिए dependency management और C ABI libraries बनाने में लाभदायक है
- विभिन्न target platforms का support बहुत आसान है (
zig targets command की काफी सराहना हुई)
- software जल्दी लिखना आसान है (native
Vector support, SIMD का उपयोग आदि)
- मौजूदा debuggers के साथ compatible
- उत्कृष्ट build system (मौजूदा Makefile की तुलना में 100 गुना सुधार)
- Zig Software Foundation की उच्च financial transparency
- मौजूदा C++ code को धीरे-धीरे port करके उसे "Zig-ify" करना संभव
- सभी target platforms के लिए linking/compilation समस्याओं का निश्चित समाधान
निष्कर्ष
- Zig, मौजूदा codebase को port करने और सभी platforms के साथ compatibility सुनिश्चित करने के लिए आवश्यक समय और मेहनत को काफी कम करता है
- कुछ अप्रत्याशित निर्णायक कारक:
- सीखने में आसानी और hiring का प्रभाव अपेक्षा से अधिक बड़ा निकला (Zig के पक्ष में)
- toolchain से जुड़ा developer experience महत्वपूर्ण भूमिका निभाता है
- Zig compiler और build system ने मौजूदा codebase के साथ compatibility के कारण बहुत मदद की
- Rust का ecosystem, community, और memory safety की गारंटी का प्रभाव अपेक्षा से कम रहा
10 टिप्पणियां
मज़ेदार लेख बहुत अच्छे से पढ़ा! node, bun और deno के बारे में खोजते-खोजते पता चला कि bun, Zig जैसी मेरे लिए अनजान भाषा में लिखा गया है, तो जिज्ञासा हुई थी कि यह कैसी भाषा है — यह बढ़िया झलक मिली!
zigमें एक बड़ी समस्या यह है कि compile करते समय अगर user द्वारा लिखे गए code में error हो, तो यह उसकी सटीक location या जानकारी नहीं बताता। लगता है कि यह सिर्फ standard library तक ही दिखाता है।विचार करने वाले बिंदु, चर्चा के मुद्दे और निष्कर्ष वगैरह पढ़कर लगा कि शुरुआत से ही यह Rust की ज़रूरत वाला माहौल नहीं था। क्या आपने कभी खाना डिलीवर करने के लिए off-roader चलाते किसी डिलीवरी कर्मी को देखा है?
Native भाषा में development करना ज़रूरी हो सकता है, लेकिन अगर काम memory-critical नहीं है तो जिस विकल्प में development करना आसान हो, वही चुनना सही है। इसके लिए भला एक साल तक बहस करने की क्या ज़रूरत थी...
करोड़ों यूज़र्स को लक्षित....
कौन-सी कंपनी है, यह जानने की जिज्ञासा हो रही है। लगता है यह ऐसी कंपनी है जो authentication जैसी औपचारिक प्रक्रियाओं से बंधी नहीं है... जलन हो रही है...
मैं साल में एक बार Zig को देखता हूँ, और लगता है कि लगभग हर साल कोई न कोई breaking change हुआ है;;
इसके अलावा, भाषा स्तर पर queue या threads के बीच message passing के लिए लाइब्रेरी भी तैयार नहीं है, इसलिए Rust की maturity की तुलना में अभी इसे काफी लंबा रास्ता तय करना बाकी लगता है.
बेशक, अगर उपयोगकर्ता OS APIs में बहुत अच्छी पकड़ रखता हो तो यह कोई बड़ी समस्या न भी हो सकती है…
Rust, Zig की तुलना में 25 गुना से भी ज़्यादा लोकप्रिय है, लेकिन भर्ती के मामले में Zig ज़्यादा फ़ायदेमंद लगता है।
मुझे लगता है कि यह बिंदु 1 की वजह से है: C/C++ या TypeScript बैकग्राउंड वाले डेवलपर्स के लिए इसे सीखना आसान है।
C बैकग्राउंड वाले डेवलपर्स के लिए आनंददायक coding अनुभव देता है
तेज़ी से software लिखना आसान है (native Vector support, SIMD उपयोग आदि)
यह वैसा ही एहसास है जैसा पहली बार Python सीखते समय होता है
Bun को Zig भाषा में विकसित होते देखकर मुझे यह जिज्ञासा थी कि आखिर Zig ही क्यों चुना गया, लेकिन Rust के साथ इस अच्छे तुलना-लेख की वजह से अब समझ में आ गया। वैसे C भाषा सचमुच हमेशा अमर रहने वाली लगती है।