इस प्रोजेक्ट के बारे में
qzjs C अनुप्रयोगों के लिए Platform Abstraction Layer (PAL) के साथ एक एम्बेडेबल QuickJS-ng रनटाइम प्रदान करता है। यह अपने आंतरिक थ्रेड पर libuv इवेंट लूप के साथ पूर्ण ES2023 इंजन चलाता है, जिससे होस्ट-साइड इवेंट-लूप पंपिंग की आवश्यकता समाप्त हो जाती है। रनटाइम fetch, console, crypto.subtle, ReadableStream, setTimeout, fs, URL, TextEncoder और अधिक सहित 21 WinterTC-संगत मॉड्यूल लागू करता है।
Key capabilities:
- ES2023 सपोर्ट तेज़ स्टार्टअप (~4.82ms मेडियन lazy WAMR init के बाद) और कम मेमोरी फुटप्रिंट के साथ
- libuv-नेटिव एक्ज़ीक्यूशन: qzjs का अपना आंतरिक थ्रेड + libuv लूप है; होस्ट कभी भी JS को सीधे नहीं छूता
- mbedTLS के माध्यम से स्ट्रीमिंग HTTP/TLS जिसमें chunked transfer डिकोडिंग और सर्टिफिकेट वेरिफिकेशन है
- कम्प्रेशन (miniz), क्रिप्टो (mbedTLS), टेक्स्ट कोडेक्स (UTF-8/Base64) और WebAssembly (डिफ़ॉल्ट WAMR, वैकल्पिक wasm3) के लिए नेटिव एक्सटेंशन
- डिस्क पर सॉफ्ट सस्पेंड/रिज़्यूम के साथ मल्टी-कॉन्टेक्स्ट एक्ज़ीक्यूशन; Web Workers वास्तविक पैरेलल थ्रेड्स या आइसोलेटेड प्रोसेसेस के रूप में चलते हैं (मल्टी-प्रोसेस M-P2 माइलस्टोन के बाद से डिफ़ॉल्ट)
- JSON के माध्यम से थ्रेड-सेफ होस्ट ↔ रनटाइम मैसेजिंग (qz_post_message / message_cb) और JS साइड पर postMessage/onmessage
- WinterTC Web APIs को सीधे चलाने के लिए स्टैंडअलोन CLI एक्ज़ीक्यूटेबल (कोई Node.js APIs नहीं)
- लाइब्रेरी में बिल्ट-इन DAP स्टेप-डिबगर (-DQZ_BUILD_DEBUGGER=ON के साथ सक्षम करें)
- GoogleTest के साथ व्यापक टेस्ट सूट, निर्धारक ऑफलाइन टेस्ट के लिए mock_libuv, और लेबल्ड टेस्ट कैटेगरी (offline, network, benchmark, test262)
बिल्ड सिस्टम CMake का उपयोग करता है जिसमें वैकल्पिक एक्सटेंशन के लिए फीचर टॉगल (QZ_WITH_*) , बिल्ड प्रोफाइल (minimal/standard) और टेस्ट, उदाहरण और डिबगर के लिए टारगेट हैं। सभी डिपेंडेंसी (QuickJS-ng, libuv, mbedTLS, miniz, WAMR, wasm3) को सख्त C99 के तहत git सबमॉड्यूल के रूप में सोर्स से बनाया जाता है। पॉलीफिल रीबिल्ड npm devDependencies (esbuild, urlpattern-polyfill, @ungap/structured-clone, web-streams-polyfill) का उपयोग करता है लेकिन वे बाइनरी में शिप नहीं किए जाते।
आर्किटेक्चर: होस्ट एप्लिकेशन थ्रेड-सेफ JSON मैसेजिंग के माध्यम से qz_t रनटाइम के साथ संचार करता है। रनटाइम अपने स्वयं के थ्रेड पर libuv लूप, JSContext और I/O ब्रिज के साथ चलता है। डिफ़ॉल्ट रूप से (QZ_PROCESS_MODEL=ISOLATED), होस्ट और रनटाइम अलग-अलग प्रोसेस हैं जो क्रैश आइसोलेशन के लिए socketpair पर FlatBuffers-फ्रेम्ड एनवेलप के माध्यम से संचार करते हैं। लाइसेंस MIT।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.