- PrimJS पर आधारित हल्का JavaScript इंजन, जिसे WebAssembly में compile किया गया है, इसलिए यह सुरक्षित और highly portable है
- memory safety और JavaScript फीचर-सीमित करने की क्षमता देने वाली मजबूत sandbox संरचना और
fail-fast दर्शन के जरिए security और scalability सुनिश्चित
- एक ही मशीन पर सैकड़ों VM को parallel में चलाया जा सकता है, और script की memory तथा computation मात्रा (gas) की limit भी सेट की जा सकती है
- जटिल build या FFI के बिना, एक ही
.wasm फ़ाइल से लगभग हर platform में embed किया जा सकता है, और इसका आकार भी लगभग 800KB है
- QuickJS की तुलना में अधिकतम 28% बेहतर performance, और JIT environment में native-स्तर की execution speed
Hako: छोटा, तेज और सुरक्षित JavaScript इंजन
Hako क्या है?
- PrimJS पर आधारित portable, security-focused, high-performance JavaScript इंजन
- Hako नाम जापानी शब्द “बॉक्स(箱)” से लिया गया है
- ऐसा WebAssembly-आधारित इंजन जिसे कोई भी किसी भी environment में आसानी से embed कर सके, इसी उद्देश्य से डिज़ाइन किया गया है
सुरक्षा: memory safety और फीचर सीमितकरण
- C/C++ में लिखा गया है, लेकिन WebAssembly में compile किया गया है → memory safety और execution sandbox सुनिश्चित
- JavaScript फीचर्स को भी सीमित किया जा सकता है:
- specific functions हटाना
- memory allocation को असंभव बनाकर सीमित करना
- execution time, memory usage, gas आदि पर limit
VMContext के जरिए malicious users की पहचान और resource control संभव
- fail-fast रणनीति के जरिए अस्थिर या अत्यधिक resource इस्तेमाल करने वाले code को जल्दी रोक दिया जाता है
embedding की आसानी: बस एक .wasm काफ़ी है
- Emscripten का उपयोग नहीं करता → सिर्फ modern WebAssembly runtime हो तो embed किया जा सकता है
- अलग-अलग भाषाओं के लिए FFI wrapper की ज़रूरत नहीं → जटिल build प्रक्रिया के बिना भी उपयोग संभव
- उदाहरण: Go में Hako embed करने का उदाहरण उपलब्ध
- release build सिर्फ 800KB आकार की
.wasm फ़ाइल से बना है
प्रदर्शन: QuickJS से तेज
- जैसे PrimJS, QuickJS से तेज है, वैसे ही Hako भी QuickJS की तुलना में औसतन 28% performance improvement देता है
- SIMD optimization और कुछ hot-path सुधारों से performance को अधिकतम किया गया है
- WebAssembly के कारण performance loss नहीं होता — V8, Wasmtime, JavaScriptCore में JIT optimization की वजह से लगभग native स्तर
- performance measurement और profiling API भी built-in हैं
सीमाएँ और आगे की योजना
- PrimJS में इस्तेमाल होने वाले कुछ फीचर्स (template interpreter, GC snapshot) अभी पूरी तरह supported नहीं हैं
- ByteDance का snapshot tool अभी open source नहीं हुआ है, इसलिए डेवलपर अपना स्वतंत्र tool implement कर रहे हैं
- यह अभी शुरुआती beta चरण में है, और API/ABI stabilization के लिए feedback बहुत महत्वपूर्ण है
- GitHub - hako
2 टिप्पणियां
https://github.com/fernvenue/hako-go-example
शायद यह लिंक मौजूद नहीं है। Go embedding का उदाहरण
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
लगता है।
ओह, लगता है यह बदल गया है। मैंने इसे ठीक कर दिया है। धन्यवाद।