7 पॉइंट द्वारा GN⁺ 2024-11-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Nova एक JavaScript इंजन है जिसकी खासियत data-oriented design है, और यह performance व cache efficiency को अधिकतम करने के लिए तैयार की गई संरचना अपनाता है
    • memory vulnerabilities को रोकने और performance optimization, दोनों को साथ में हासिल करने की कोशिश
  • मुख्य विशेषताएँ:
    • JavaScript heap में allocated सभी डेटा type-specific vectors में store होते हैं (numbers number vector में, strings string vector में आदि).
    • heap references को type के अनुसार विभाजित indices के रूप में handle किया जाता है, जिससे memory safety और size efficiency मिलती है.
    • objects को type के अनुसार अलग करके vectors में store किया जाता है (general objects, arrays, DataView आदि).
    • non-general objects को इस तरह design किया गया है कि वे केवल जरूरत पड़ने पर general object data को reference करें.
    • objects को इस तरह aggressively separate करके store किया जाता है कि unused data reads से बचा जा सके.
  • अभी development में है. इंजन की functionality अभी बहुत सीमित है, इसलिए यह test262 test suite का लगभग 47% ही pass करता है

1 टिप्पणियां

 
GN⁺ 2024-11-19
Hacker News राय
  • आर्किटेक्चरल चुनावों पर चर्चा दिलचस्प है, लेकिन ज़्यादातर लोगों के पास तुलना करने लायक संदर्भ की कमी है। V8 की आर्किटेक्चर से तुलना करने पर क्या फ़ायदे हैं, यह समझना मुश्किल है
  • मैंने Lisp interpreter जैसे प्रोजेक्ट्स के बारे में सोचा है, और कुछ मुख्य फ़ायदे पहचाने हैं
    • uniform allocation का मतलब है कि alignment gaps नहीं होते
    • garbage collection में linear access के फ़ायदे
    • pointers से छोटे indices
    • type के हिसाब से अलग किए गए indices आकार बचा सकते हैं
  • V8 से तुलना तुरंत करना ज़रूरी नहीं है। V8 अरबों डॉलर के पैमाने का प्रोजेक्ट है
  • Fabrice Bellard के JS engine को संदर्भ के रूप में देखना अच्छा हो सकता है
  • V8 का data allocation तरीका
    • सारा data heap के कई हिस्सों में से किसी एक में allocate किया जाता है
    • heap references या तो वास्तविक pointers होते हैं, या pointer compression इस्तेमाल होने पर heap base से offset होते हैं
    • V8 के objects में ज़रूरी सारा data शामिल होता है, और ज़्यादातर एक ही allocation में store होता है
  • data-oriented design इस बात से संचालित होता है कि data को कैसे access किया जाता है। यह मानने की वजह क्या है कि सामान्य data access एक ही type के objects पर linear access होगा?
  • "numbers go into a vector of numbers" सामान्य नहीं है। JS engines आमतौर पर NaN-boxing या inline small integers का इस्तेमाल करते हैं
  • सोच रहा हूँ कि क्या NaN-boxing के उपयोग पर विचार किया गया है। यह भी जानना है कि type-specific vectors को GC compress करता है या वे free list बनाए रखते हैं
  • "Don’t Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically Typed Languages" पढ़ने की सिफारिश है
  • यह जानना है कि यह JS engine experimental है या ECMAscript specification को पूरा implement करने का लक्ष्य रखता है
  • मैं Rust Boa प्रोजेक्ट को follow कर रहा हूँ, लेकिन मुझे नहीं लगता कि यह अभी production-ready है
  • data-oriented approach और type-specific vectors, V8 जैसी पारंपरिक आर्किटेक्चर से काफ़ी अलग हैं
    • वास्तविक परिदृश्यों में performance: यह जानना है कि क्या ऐसे benchmarks हैं जो Nova की तुलना V8 या SpiderMonkey से उन scenarios में करते हों जहाँ जटिल और non-linear data access patterns हों
    • garbage collection में trade-offs: यह जानना है कि vector growth और compaction memory fragmentation या performance bottlenecks पैदा कर सकते हैं या नहीं
  • यह जानना है कि क्या किसी खास application profile को ध्यान में रखा गया है
    • games में scripting engine embed करने के लिए उपयोगी हो सकता है
  • "kind-specific vectors" में "kind" शब्द का क्या मतलब है, यह जानना है
    • function X(a) { this.a = a; } और function Y(b) { this.b = b; } को क्या objects के अलग kind माना जाएगा?
    • object को literal से बनाते समय क्या {a: 1} और {b: 2} को objects के अलग kind माना जाएगा?