পাইথনকে ওয়েবঅ্যাস্পেস্পলিতে সংকলন করা হচ্ছে


90

আমি পড়েছি যে পাইথন ২.7 কোডটি ওয়েব অ্যাসেমব্লিতে রূপান্তর করা সম্ভব, তবে কীভাবে এটি করা যায় তার কোনও নির্দিষ্ট গাইড খুঁজে পাচ্ছি না।

এ পর্যন্ত আমি, ওয়েব সভার একটি সি প্রোগ্রাম Emscripten এবং তার প্রয়োজনীয় সকল উপাদান ব্যবহার করে কম্পাইল যাতে আমি জানি এটা কাজ করছে (গাইড ব্যবহৃত: http://webassembly.org/getting-started/developers-guide/ )

উবুন্টু মেশিনে এটি করার জন্য আমার অবশ্যই কী পদক্ষেপ নিতে হবে? আমার কি অজগর কোডটি এলএলভিএম বিটকোডে রূপান্তর করতে হবে তারপর ইমস্ক্রিপ্টেন ব্যবহার করে এটি সংকলন করতে হবে? যদি তা হয় তবে আমি কীভাবে এটি অর্জন করব?




4
পাইওডাইড ওয়েব অ্যাসোসাপশনের মাধ্যমে পাইথন রানটাইমটি ব্রাউজারে নিয়ে আসে: github.com/iodide-project/pyodide
guettli

উত্তর:


146

ওয়েব অ্যাসাব্ল্যাসেস বনাম asm.js

প্রথমে আসুন একনজরে দেখে নেওয়া যাক, নীতিগতভাবে কীভাবে ওয়েবএএসব্লিউশন asm.js থেকে আলাদা এবং বিদ্যমান জ্ঞান এবং সরঞ্জামাদি পুনরায় ব্যবহার করার সম্ভাবনা রয়েছে কি না। নিম্নলিখিতটি বেশ ভাল ওভারভিউ দেয়:

আসুন পুনরুক্তি করা যাক, ওয়েবঅ্যাসাব্ল্যাস (এমভিপি, যেমন এর রোডম্যাপে আরও রয়েছে , মোটামুটি):

  • স্ট্যাটিক টাইপিং সহ এটিএসটির একটি বাইনারি ফর্ম্যাট যা বিদ্যমান জাভাস্ক্রিপ্ট ইঞ্জিনগুলি দ্বারা কার্যকর করা যেতে পারে (এবং এইভাবে জেআইটি-সক্ষম বা সংকলিত এওটি),
  • এটি জাভাস্ক্রিপ্টের তুলনায় আরও 10-10% আরও কমপ্যাক্ট (জিজেপড তুলনা) এবং পরিমাপের ক্রমটি পার্স করার জন্য দ্রুত,
  • এটি আরও নিম্ন-স্তরের অপারেশন প্রকাশ করতে পারে যা জাভাস্ক্রিপ্ট সিনট্যাক্সের সাথে খাপ খায় না, asm.js পড়বে (যেমন (৪-বিট পূর্ণসংখ্যা, বিশেষ সিপিইউ নির্দেশাবলী, সিমডি ইত্যাদি)
  • asm.js. তে / থেকে রূপান্তরযোগ্য (কিছু পরিমাণে)

সুতরাং, বর্তমানে ওয়েবএ্যাস্পাবলটি asm.js এর উপর একটি পুনরাবৃত্তি এবং কেবলমাত্র সি / সি ++ (এবং অনুরূপ ভাষা) লক্ষ্য করে।

ওয়েবে পাইথন

দেখে মনে হচ্ছে না যে জিসি হ'ল একমাত্র জিনিস যা পাইথন কোডটিকে ওয়েবঅ্যাসাব্যাস / asm.js টার্গেট করা থেকে বিরত করে। উভয়ই নিম্ন-স্তরের স্ট্যাটিকালি টাইপড কোডটি উপস্থাপন করে, যেখানে পাইথন কোডটি (বাস্তবসম্মতভাবে) উপস্থাপন করা যায় না। যেহেতু ওয়েবএএসব্যাশন / asm.js এর বর্তমান টুলচেনটি এলএলভিএম এর উপর ভিত্তি করে, একটি ভাষা যা সহজেই এলএলভিএম আইআর দ্বারা সংকলন করা যায় তা ওয়েবঅ্যাস্পেস্পল / asm.js এ রূপান্তর করতে পারে। তবে হায়, পাইথন এটির সাথে ফিট করার পক্ষে খুব গতিশীল নয়, যেমন আনলাডেন গেলা এবং পাইপাইয়ের বিভিন্ন প্রচেষ্টা দ্বারা প্রমাণিত ।

এই asm.js উপস্থাপনায় গতিশীল ভাষার অবস্থা সম্পর্কে স্লাইড রয়েছে । এর অর্থ হ'ল বর্তমানে কেবলমাত্র সম্পূর্ণ ভিএম (সি / সি ++ তে ভাষা বাস্তবায়ন) কে ওয়েবঅ্যাসাব্যাস / asm.js এবং সংক্ষিপ্ত বিবরণ (যেখানে সম্ভব যেখানে জেআইটি সহ) মূল উত্সগুলি সংকলন করা সম্ভব। পাইথনের জন্য বেশ কয়েকটি বিদ্যমান প্রকল্প রয়েছে:

  1. পাইপাই : পাইপাই.জেএস ( পাইকনে লেখকের আলাপ )। এখানে প্রকাশিত রেপো । প্রধান জেএস ফাইলটি, pypyjs.vm.js13 মেগাবাইট (2MB পরে gzip -6) + পাইথন স্টাডলিব + অন্যান্য স্টাফ।

  2. CPython: pyodide , EmPython , CPython-Emscripten , EmCPython , ইত্যাদি empython.js5.8 মেগাবাইট (2.1 মেগাবাইট পরে gzip -6), কোন stdlib।

  3. Micropython: এই কাঁটাচামচ

    সেখানে কোনও বিল্ট জেএস ফাইল ছিল না, তাই আমি এটি 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 
    

    এটি micropython.js1.1 এমবি (225 কেবি পরে gzip -d) উত্পাদন করে। দ্বিতীয়টি ইতিমধ্যে বিবেচনা করার মতো একটি বিষয়, যদি আপনার যদি 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এই ফাইলগুলি কীভাবে ব্যবহার করতে হয় তা দেখতে আপনি এইচটিএমএল আউটপুটটি দেখতে পারেন।

    এইভাবে আপনি সম্মতিযুক্ত ব্রাউজারে আপনার পাইথন অ্যাপ্লিকেশনটি ব্যাখ্যা করার জন্য ওয়েবঅ্যাস্পেসে পিপি এবং সিপিথন সম্ভাব্যভাবে তৈরি করতে পারেন।

এখানে আরও একটি সম্ভাব্য আকর্ষণীয় জিনিস হ'ল নুইটকা , পাইথন থেকে সি ++ সংকলক। সম্ভবত আপনার পাইথন অ্যাপটি সি ++ তে তৈরি করা সম্ভব হবে এবং তারপরে এটি এমস স্ক্রিপ্টেন সহ সিপাইথন সহ সংকলন করা সম্ভব। তবে কার্যত আমি কীভাবে এটি করব সে সম্পর্কে আমার কোনও ধারণা নেই।

সমাধান

কিছু সময়ের জন্য, আপনি একটি প্রচলিত ওয়েব সাইট বা ওয়েব অ্যাপ্লিকেশন যেখানে ডাউনলোড বিভিন্ন-মেগাবাইট জাতীয় ফাইল সবে একটি বিকল্পের ঘর তৈরী করছি, পাইথন টু জাভাস্ক্রিপ্ট transpilers কটাক্ষপাত (যেমন take Transcrypt ) অথবা জাভাস্ক্রিপ্ট পাইথন বাস্তবায়নের (যেমন Brython )। অথবা জাভা স্ক্রিপ্টে সংকলিত ভাষার তালিকা থেকে অন্যদের সাথে আপনার ভাগ্য চেষ্টা করুন ।

অন্যথায়, যদি ডাউনলোডের আকার কোনও সমস্যা না হয় এবং আপনি প্রচুর রুক্ষ প্রান্ত মোকাবেলা করতে প্রস্তুত হন, তবে উপরের তিনটির মধ্যে বেছে নিন।

Q3 2020 আপডেট

  1. জাভাস্ক্রিপ্ট পোর্টটি মাইক্রোপাইথনে একীভূত হয়েছিল। এটি পোর্ট / জাভাস্ক্রিপ্টে থাকে

  2. বন্দরটি একটি এনপিএম প্যাকেজ হিসাবে মাইক্রো পাইথন.জেএস হিসাবে উপলব্ধ । আপনি রানকিট এ চেষ্টা করে দেখতে পারেন ।

  3. মরিচায় একটি সক্রিয়ভাবে বিকশিত পাইথন বাস্তবায়ন রয়েছে যার নাম রুস্টপাইথন । মরিচা আনুষ্ঠানিকভাবে ওয়েব- স্পেসিকে কমপাইল লক্ষ্য হিসাবে সমর্থন করে, কারণ রিডমের শীর্ষে ডেমো লিঙ্কটি নেই surprise যদিও, এটা প্রথম। তাদের দাবি অস্বীকার।

    রুস্টপাইথন একটি বিকাশের পর্যায়ে রয়েছে এবং এটি উত্পাদন বা কোনও ফল্ট অসহিষ্ণু সেটিং ব্যবহার করা উচিত নয়।

    আমাদের বর্তমান বিল্ডটি পাইথন সিনট্যাক্সের কেবলমাত্র একটি উপসেটকে সমর্থন করে।


4
এই .js এবং .ওয়াসম মাপগুলি আসলে ন্যায্য নয়। স্ট্রিম সংক্ষেপণ ভালভাবে সমর্থিত এবং উভয়ের আকার হ্রাস করতে ব্যবহৃত হতে পারে। জিজিপ করা একই ফাইলগুলি কত বড়? তা ছাড়া অন্য, ভাল উত্তর।
এনজিমেটিক ফিজিসিস্ট

সুতরাং এটি যোগ করতে চেয়েছিলেন যে ২০২০ সালে, এটি পাইপাইড হ'ল ওপি সর্বাধিক নিকটতম জিনিস। এটি ওয়েব অ্যাসেমব্লিতে পাইথন রানটাইম (আমি পুট সি এবং তারপরে পাইথনকে জঞ্জাল হিসাবে গ্রহণ করব)। এটি পাশাপাশি একাধিক গ্রন্থাগার সমর্থন করে। এছাড়াও, ব্যবহার করা যথেষ্ট সহজ বলে মনে হচ্ছে।
ডেভিড ফ্রিক

3

যতক্ষণ না ওয়েব এসেম্বলী আবর্জনা সংগ্রহ কার্যকর না করে। আপনি এখানে অগ্রগতি অনুসরণ করতে পারেন: https://github.com/WebAsorses/proposals/issues/16


17
অগত্যা। আপনি জিসি বাস্তবায়িত করতে পারেন - এবং বিশেষত রেফারেন্স গণনা যেমন এটি পাইথন আইআইআরসি ব্যবহার করেছেন - জঞ্জাল শীর্ষে। নীতিগতভাবে, আপনার সিপিথন গ্রহণ করতে এবং ইমস্প্রিপ্টেন ব্যবহার করে তা ওয়েসমে সংকলন করতে সক্ষম হওয়া উচিত।
Andreas রসবার্গ

4
ওপি থেকে আমার গ্রহণযোগ্যতাটি ছিল যে তারা বিদ্যমান সরঞ্জামগুলি ব্যবহার করতে চেয়েছিল - ছত্রাকের শীর্ষে সিপিথন জিসি প্রয়োগ করা নিজের মধ্যে একটি প্রকল্পের মতো মনে হচ্ছে
ম্যালকম হোয়াইট

4
আপনার অতিরিক্ত কিছু করার দরকার নেই, কেবল সংকলনের জন্য সিপিথন পান। এটি ইতিমধ্যে আরসি বাস্তবায়ন, এএএএফসিটি রয়েছে।
আন্দ্রেয়াস রসবার্গ

3

সংক্ষেপে: ট্রান্সপোর্টার রয়েছে, তবে আপনি কোনও অযৌক্তিক পাইথনকে ওয়েব অ্যাসেমব্লিতে স্বয়ংক্রিয়ভাবে রূপান্তর করতে পারবেন না এবং আমি সন্দেহ করি যে আপনি দীর্ঘ সময় ধরে আসতে সক্ষম হবেন doubt যদিও তাত্ত্বিকভাবে ভাষা সমানভাবে শক্তিশালী এবং ম্যানুয়াল অনুবাদ সর্বদা সম্ভব, পাইথন কিছু ডেটা স্ট্রাকচার এবং এক্সপ্রটিভ মোডের জন্য মঞ্জুরি দেয় যার জন্য খুব স্মার্ট আন্তঃভাষার সংকলক (বা ট্রান্সপোর্টার) প্রয়োজন [নীচে দেখুন]। পাইথন-টু-সি প্রযুক্তির পরিমিত পরিপক্ক হওয়ায় পাইথন থেকে সি অ্যাসেম্বল অ্যাসেমব্লির একটি কার্যনির্বাহী হতে পারে, তবে পাইথন-টু-সিও ভঙ্গুর হওয়ার কারণে এটি সাধারণত কার্যকর হয় না (নীচে দেখুন)।

আপনি http://webassembly.org/docs/high-level-goals/ এ দেখতে পাওয়ায় ওয়েবঅ্যাস্পাবলিউশন বিশেষত সি-এর মতো ভাষাগুলির কাছে লক্ষ্যযুক্ত is

পাইথন থেকে সি তে অনুবাদ পাইপাইয়ের মতো সরঞ্জামগুলির সাহায্যে করা যেতে পারে, যা দীর্ঘদিন ধরে বিকাশাধীন, তবে যা পাইথন কোড স্বেচ্ছাসেবীর জন্য এখনও কাজ করে না। এর বেশ কয়েকটি কারণ রয়েছে:

  1. পাইথনের কয়েকটি খুব কার্যকরী, বিমূর্ত এবং সুন্দর ডেটা স্ট্রাকচার রয়েছে তবে এগুলি স্ট্যাটিক কোডে অনুবাদ করা শক্ত।
  2. পাইথন গতিশীল আবর্জনা সংগ্রহের উপর নির্ভর করে।
  3. বেশিরভাগ পাইথন কোড বিভিন্ন লাইব্রেরিতে খুব বেশি নির্ভর করে, যার প্রত্যেকটির নিজস্ব ক্রিকস এবং ইস্যু রয়েছে (যেমন সি তে লেখা হয়, বা এমনকি এসেমব্লার)।

পাইথন-টু-সি (বা পাইথন থেকে সি ++) কেন এত জটিল হয়েছে তা যদি আপনি আরও যত্ন সহকারে দেখেন তবে আপনি এই সংক্ষিপ্ত উত্তরের পিছনে বিশদ কারণগুলি দেখতে পাচ্ছেন, তবে আমি মনে করি এটি আপনার প্রশ্নের ক্ষেত্রের বাইরে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.