शुरू से बनाया गया एक प्रयोगात्मक AOT JS इंजन
Porffor एक अनोखा JS इंजन/कंपाइलर/रनटाइम है जो JS कोड को पहले से WebAssembly या native में कंपाइल करता है। फिलहाल इसका उपयोग शोध उद्देश्यों के लिए किया जाता है और वास्तविक उपयोग में इसकी सीमाएँ हैं।
Wasm कंपाइल
Porffor का WebAssembly आउटपुट मौजूदा JS -> Wasm प्रोजेक्ट्स की तुलना में कहीं तेज़ और छोटा है। ऐसा इसलिए है क्योंकि Porffor, JS को AOT के रूप में कंपाइल करता है।
- Wasm आकार: Javy से 32 गुना छोटा (~1.3MB -> ~40KB)
- Wasm प्रदर्शन: Javy से 18 गुना तेज़ (~70m -> ~4m)
Native कंपाइल
चूंकि यह JS को पहले से कंपाइल करता है, Porffor रनटाइम को पैकेज किए बिना वास्तविक native binary में कंपाइल कर सकता है। इससे ये परिणाम मिलते हैं:
- Binary आकार: 1000 गुना से अधिक छोटा (~90MB -> <50KB)
- Memory उपयोग: 40 गुना से अधिक कम (~50MB -> ~1MB)
- प्रदर्शन: अधिकतम 3 गुना तेज़
अतिरिक्त बातें
- Porffor सुरक्षित है: यह Wasm में कंपाइल होता है और memory-safe language (JS) में लिखा गया है।
- Porffor को शुरू से AOT को ध्यान में रखकर बनाया गया है: यह किसी मौजूदा JS इंजन पर आधारित नहीं है। इसकी एकमात्र dependency एक JS parser है।
- Porffor TypeScript input को सपोर्ट करता है: किसी झंझट वाले transpiler चरण की ज़रूरत नहीं है। सीधे TS फ़ाइल इनपुट दी जा सकती है।
Playground
आप Porffor को online या local पर आज़मा सकते हैं। इसके लिए npm i -g porffor@latest && porf कमांड का उपयोग करें।
- Prime Numbers
- Fibonacci
- Factorial
- Sum of Digits
- Exception
- Array Reading
- ArrayPrototype
- Math Proposals Parser: acorn, meriyah, hermes-parser, @babel/parser
- Target: wasm
const isPrime = number => {
if (number < 2) return false;
for (let i = 2; i < number; i++) {
if (number % i == 0) return false;
}
return true;
}
let counter = 0;
while (counter <= 10000) {
if (isPrime(counter)) Porffor.numberLog(counter);
counter++;
}
Test262
Test262 आधिकारिक ECMAScript conformity test suite है। Porffor हर commit पर इसे चलाकर conformity प्रगति को ट्रैक करता है।
GN⁺ का सार
Porffor एक अनोखा इंजन है जो JS कोड को पहले से WebAssembly या native में कंपाइल करता है। यह मौजूदा समाधानों की तुलना में बहुत छोटा आकार और तेज़ प्रदर्शन देता है। इसका उपयोग शोध उद्देश्यों के लिए किया जाता है और यह TypeScript input को सपोर्ट करता है। यह प्रोजेक्ट JS इंजन के प्रदर्शन और दक्षता पर शोध के लिए उपयोगी हो सकता है। इसी तरह की क्षमता वाले प्रोजेक्ट्स में Javy जैसे JS -> Wasm कंपाइलर शामिल हैं।
1 टिप्पणियां
Hacker News टिप्पणियाँ
evalजैसे कठिन JS scenarios को support करने के लिए fallback interpreter है, लेकिन Porffor केवल AOT compilation को support करता है