- Rust में शुरुआत से बनाया गया JavaScript इंजन, जिसकी संरचना ECMAScript स्पेसिफिकेशन को लगभग पूरी तरह सपोर्ट करने के लिए तैयार की गई है
- फिलहाल ECMAScript भाषा के 97% से अधिक टेस्ट पास करता है, और test262 आधारित टेस्टिंग से सत्यापित है
- V8 के Ignition डिज़ाइन और SerenityOS के LibJS से प्रेरित, और अधिकांश घटकों को न्यूनतम dependencies के साथ सीधे इम्प्लीमेंट किया गया है
- bytecode VM, compacting garbage collector, custom RegExp इंजन और parser सहित स्पेसिफिकेशन-अनुरूप built-in objects और functions प्रदान करता है
- अभी production उपयोग के लिए अधूरा है, लेकिन ES2025 स्तर की क्षमताओं वाले Rust-आधारित JS इंजन विकास में यह एक महत्वपूर्ण प्रगति है
Brimstone अवलोकन
- Brimstone एक Rust में पूरी तरह नया लिखा गया JavaScript इंजन है, जिसका लक्ष्य ECMAScript स्पेसिफिकेशन को faithfully इम्प्लीमेंट करना है
- यह फिलहाल ECMAScript भाषा के 97% से अधिक को सपोर्ट करता है और test262 टेस्ट पास करता है
- यह अभी production environment में उपयोग के लिए तैयार नहीं, बल्कि विकासाधीन प्रोजेक्ट है
डिज़ाइन और इम्प्लीमेंटेशन
- यह ECMAScript स्पेसिफिकेशन को सीधे इम्प्लीमेंट करता है, और V8 तथा SerenityOS के LibJS से डिज़ाइन प्रेरणा लेता है
- इंजन के अधिकांश घटकों को बिना dependencies के सीधे इम्प्लीमेंट किया गया है, हालांकि ICU4X इसका एकमात्र अपवाद है
- प्रमुख घटक:
- V8 Ignition से प्रेरित bytecode-आधारित VM
- काफ़ी unsafe Rust code में लिखा गया compacting garbage collector
- custom RegExp इंजन और parser
- स्पेसिफिकेशन-अनुरूप built-in objects और functions का इम्प्लीमेंटेशन
बिल्ड और रन
टेस्टिंग व्यवस्था
- आधिकारिक test262 सहित first-party और third-party integration test suites का उपयोग किया जाता है
- custom integration test runner शामिल है (
cargo brimstone-test कमांड से चलाया जा सकता है)
- unit और snapshot tests
cargo test से चलाए जाते हैं
- अतिरिक्त टेस्ट जानकारी
tests/README.md में देखी जा सकती है
अभी तक इम्प्लीमेंट न की गई सुविधाएँ
- ES2024 तक की सभी सुविधाएँ और फ़रवरी 2025 की TC39 बैठक के अनुसार Stage 4 proposals का अधिकांश हिस्सा इम्प्लीमेंट किया जा चुका है
- अभी सपोर्ट न की गई सुविधाएँ:
- SharedArrayBuffer
- Atomics
2 टिप्पणियां
कमाल है..
Hacker News राय
@ivankra ने इसे javascript-zoo में जोड़ा और benchmark चलाए, इसके लिए मैं आभारी हूँ
पिछले 3 सालों से पूर्णता और performance बढ़ाने के लिए लगातार समय देता आया हूँ; यह एक hobby project था
Boa-स्तर की functionality पूरी करके इसे production के लिए मजबूत बनाया जाए तो आकार बढ़ सकता है, लेकिन इस छोटे आकार में स्पेक का 97% पास करना काफ़ी प्रभावशाली है
Brimstone ऐसा नहीं करता, इसलिए आकार के अंतर का बड़ा हिस्सा वहीं से आता है
Unicode को सही तरह से handle करने के लिए कई MB data चाहिए, इसलिए आजकल छोटे executable बनाना आसान नहीं है
अगर Unicode support ज़रूरी है, तो न्यूनतम आकार की एक सीमा बन जाती है
default settings आम तौर पर performance-केंद्रित होती हैं, इसलिए
codegen-units=1या panic removal जैसे options बदलने पर नतीजे अलग हो सकते हैंBoa लगभग 91% ही पास करता है, इसलिए Brimstone अधिक पूर्ण है
छोटे प्रोजेक्ट्स में code अक्सर छोटा, साफ़ और maintain करना आसान होता है
collaboration के साथ हमेशा एक निश्चित overhead आता है
Boa repository
functionality Boa से लगभग मिलती-जुलती है, और कुछ benchmarks में speed दोगुनी है
मुझे यह एक स्वाभाविक प्रवाह लगता है
हालांकि कहा गया है कि यह प्रोजेक्ट unsafe का काफ़ी उपयोग करता है
यह किसी तरह का Blub phenomenon लगता है
आख़िरकार यह marketing element भी है, लेकिन औसतन इसकी पूर्णता अधिक होना सच है
OS boot होने से पहले Ikari intro चलने की कल्पना की
C/C++ linking के बिना पूरी तरह Rust native
40MB के single-binary server में JS scripting जोड़ी जा सकती है
कई Rust-आधारित JS engines का आना वाकई शानदार बात है
अगर unsafe area को न्यूनतम रखा जाए, तो मुझे यह ठीक लगता है
Vecजैसी standard library भी अंदरूनी तौर पर unsafe का उपयोग करती हैमहत्वपूर्ण बात यह है कि unsafe को छोटे दायरे तक सीमित रखा जाए ताकि उसकी जाँच संभव हो
GC implementation ऐसा ही एक अपवाद क्षेत्र है
अगर मैं JS runtime Rust में बनाता, तो पहले उसे सुरक्षित तरीके से implement करता और ज़रूरत पड़ने पर ही unsafe इस्तेमाल करता
high-performance GC implement करने के लिए कुछ हिस्सों में यह अनिवार्य हो जाता है
Rust बस एक तेज़ और अच्छी imperative language है
RcयाArcइस्तेमाल करने पर ही reference counting लागू होती है