asm.js
पहले बनाम WebAssembly
, चलो एक बार देख ले कैसे, सिद्धांत रूप में, WebAssemblyasm.js से अलग है, और वहाँ मौजूदा पुन: उपयोग करने की क्षमता है, चाहे ज्ञान और टूलींग।
(, एमवीपी के रूप में वहाँ its roadmap के बारे में अधिक, मोटे तौर पर), के पुनरावृत्ति करते WebAssembly:
- निम्नलिखित काफ़ी अच्छा सिंहावलोकन देता है स्थिर टाइपिंग के साथ एएसटी का एक द्विआधारी प्रारूप है, जो हो सकता है मौजूदा JavaScript इंजन (और इस प्रकार JIT करने योग्य या संकलित AOT) द्वारा निष्पादित,
- यह 10-20% अधिक कॉम्पैक्ट (gzipped तुलना) और परिमाण तेजी जावास्क्रिप्ट से पार्स करने के लिए की एक आदेश,
- इसे और अधिक कम व्यक्त कर सकते हैं है स्तरीय ऑपरेशन जो जावास्क्रिप्ट सिंटैक्स में फिट नहीं होगा, asm.js पढ़ें (उदाहरण के लिए 64-बिट पूर्णांक, विशेष सीपीयू निर्देश, सिम, आदि)
- परिवर्तनीय (कुछ हद तक) asm.js. से/से है।
इस प्रकार, वर्तमान में WebAssembly asm.js पर एक पुनरावृत्ति है और केवल सी/सी ++ को लक्षित करता है।
अजगर वेब
यह जीसी तरह नहीं दिखता है पर केवल एक चीज है कि लक्षित कर WebAssembly/asm.js से अजगर कोड बंद हो जाता है। दोनों निम्न स्तर के स्थैतिक टाइप किए गए कोड का प्रतिनिधित्व करते हैं, जिसमें पाइथन कोड (वास्तविक रूप से) का प्रतिनिधित्व नहीं किया जा सकता है। चूंकि WebAssembly/asm.js का वर्तमान टूलचेन एलएलवीएम पर आधारित है, एक ऐसी भाषा जिसे आसानी से एलएलवीएम आईआर में संकलित किया जा सकता है उसे WebAssembly/asm.js में परिवर्तित किया जा सकता है। लेकिन हां, पाइथन भी इसमें फिट होने के लिए बहुत गतिशील है, जैसा कि Unladen Swallow और several attempts पाइप के द्वारा साबित हुआ है।
यह asm.js प्रस्तुति slides about the state of dynamic languages है। इसका अर्थ यह है कि वर्तमान में वेब Vssembly/asm.js में पूरे वीएम (सी/सी ++ में भाषा कार्यान्वयन) को संकलित करना और मूल स्रोतों के साथ (जहां संभव हो वहां जेआईटी के साथ) संकलन करना संभव है।
- PyPy: PyPy.js (लेखक का talk at PyCon) पायथन के लिए वहाँ कई मौजूदा परियोजनाओं कर रहे हैं।यहां release repo है। मुख्य जेएस फ़ाइल,
pypyjs.vm.js
, 13 एमबी (gzip -6
के बाद 2 एमबी) + पायथन stdlib + अन्य सामान है।
- CPython: EmPython, CPython-Emscripten, EmCPython, आदि
empython.js
5.8 एमबी (2.1 एमबी gzip -6
के बाद), कोई stdlib है।
माइक्रोप्रिथॉन: this fork।
वहां कोई निर्मित जेएस फ़ाइल नहीं थी, इसलिए मैं इसे trzeci/emscripten/
, एक तैयार किए गए ईएमएसस्क्रिप्ट टूलचैन के साथ बनाने में सक्षम था। कुछ की तरह:
git clone https://github.com/matthewelse/micropython.git
cd micropython
docker run --rm -it -v $(pwd):/src trzeci/emscripten bash
apt-get update && apt-get install -y python3
cd emscripten
make -j
# to run REPL: npm install && nodejs server.js
यह 1.1 की micropython.js
एमबी (gzip -d
के बाद 225 KB) पैदा करता है। उत्तरार्द्ध पहले से ही कुछ विचार करने के लिए है, अगर आपको stdlib के बिना केवल बहुत ही अनुकूल कार्यान्वयन की आवश्यकता है।
WebAssembly उत्पादन करने के लिए आप लाइन से 13 को बदल सकते हैं का निर्माण Makefile
को CC = emcc -s RESERVED_FUNCTION_POINTERS=20 -s WASM=1
फिर make -j
पैदा करता है:
113 KB micropython.js
240 KB micropython.wasm
आप emcc hello.c -s WASM=1 -o hello.html
के HTML आउटपुट में देख सकते हैं, कि कैसे इन उपयोग करने के लिए देखने के लिए फ़ाइलें।
इस तरह आप एक कुशल ब्राउज़र में अपने पायथन एप्लिकेशन की व्याख्या करने के लिए वेबएस्क्रिप्ट में संभावित रूप से पीपीपी और सीपीथन बना सकते हैं।
एक अन्य संभावित दिलचस्प बात यह है यहाँ Nuitka, एक अजगर सेल्सियस तक ++ संकलक है। संभावित रूप से आपके पाइथन ऐप को सी ++ में बनाना संभव हो सकता है और उसके बाद इसे साइप्रथन के साथ ईएमएसस्क्रिप्ट के साथ संकलित करना संभव हो सकता है। लेकिन व्यावहारिक रूप से मुझे नहीं पता कि यह कैसे करना है।
समाधान
कुछ समय के लिए, आप एक पारंपरिक वेब साइट या वेब अनुप्रयोग जहां डाउनलोड कई-मेगाबाइट जे एस फ़ाइल मुश्किल से एक विकल्प है का निर्माण कर रहे हैं, अजगर करने वाली जावास्क्रिप्ट transpilers पर एक नज़र डालें (जैसे Transcrypt) या जावास्क्रिप्ट पायथन कार्यान्वयन (उदाहरण के लिए Brython)। या list of languages that compile to JavaScript से दूसरों के साथ अपनी किस्मत आजमाएं।
अन्यथा, यदि डाउनलोड आकार कोई मुद्दा नहीं है, और आप बहुत से मोटे किनारों से निपटने के लिए तैयार हैं, तो ऊपर दिए गए तीनों के बीच चयन करें।
@guettli https://github.com/pypyjs/pypyjs/issues/145 – denfromufa