Asm.js ব্যবহার করে কীভাবে ব্রাউজারে সি ++ কোড চালাবেন?


21

একটি asm.js অ্যাপ্লিকেশনটি খুব দ্রুত (নেটিভ সি ++ গতির কাছাকাছি):

এখানে চিত্র বর্ণনা লিখুন

http://kripken.github.io/mloc_emscripten_talk/micro4b.png

তবে কীভাবে সি ++ তে একটি লিখতে, এটিকে এলএলভিএম কোডে রূপান্তর করতে হবে, তারপরে emscriptten / asm.js দিয়ে কিছু কৌশল করা সম্ভব? আমি এটি সম্পর্কে কোনও টিউটোরিয়াল পাইনি।

এবং যদি আমি কোডটি সি ++ তে লিখি, তবে জেএসআই এপিআই-এস কীভাবে ব্যবহার করব, উদাহরণস্বরূপ এক্সএমএলএইচটিপিআরকোস্ট, ওয়েবসকেটস, ক্যানভাস বা ওয়েবজিএল?


3
আপনার গবেষণা ভাগ করে নেওয়া প্রত্যেককে সহায়তা করে। আপনি কী চেষ্টা করেছেন এবং কেন এটি আপনার প্রয়োজনীয়তা মেটেনি তা আমাদের বলুন। এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে। এছাড়াও কীভাবে জিজ্ঞাসা করবেন দেখুন
gnat

এই তৃতীয় পক্ষের টিউটোরিয়ালটি এগুলির কয়েকটি প্রশ্নের সমাধান করতে উপস্থিত হবে: devosoft.org/an-intr
پيداوار-

উত্তর:


36

আমি বিশ্বাস করি আপনি asm.js বোঝার ক্ষেত্রে ভুল করেছেন ।

প্রথমে তাদের FAQ থেকে

প্র: asm.js একটি নতুন ভাষা?
উ: না, এটি জাভাস্ক্রিপ্ট (কেবলমাত্র একটি উপসেট)।

এবং আপনি যোগ স্পষ্টতা জিজ্ঞাসা :

তবে কীভাবে সি ++ তে একটি [an asm.js অ্যাপ্লিকেশন] লেখা সম্ভব

আপনি "asm.js অ্যাপ্লিকেশন" লিখবেন না, বরং asm.js আপনার সি ++ কোডটি সংকলন করার জন্য একটি লক্ষ্য 1

জন রেসিগের এই নিবন্ধটি বেশ কয়েকটি বিশদ সরবরাহ করে যা asm.js কীভাবে ব্যবহৃত হবে তা আরও ভালভাবে ব্যাখ্যা করতে পারে।

এই চিত্রটি দিয়ে শুরু:
সি ++ => ঝনঝন / এলএলভিএম => এমস্ক্রিপ্ট => জেএস ইঞ্জিন

আপনি দেখতে পারেন যে asm.js হ'ল একটি এমসক্রিপেনের অনুবাদ লক্ষ্য । এমস্প্রিপ্টেন এলএলভিএম অনুবাদ করে পরিচালনা করে হ'ল বাইকোডকে জাভাস্ক্রিপ্টে এবং asm.js জাভাস্ক্রিপ্টের একটি উপসেট। জাভাস্ক্রিপ্টের asm.js এর সীমিত সাবসেটের মধ্যে থাকা কোডটিকে অনুকূলিতকরণ এবং দ্রুত চালানোর অনুমতি দেয়।

আপনি আরও জিজ্ঞাসা করেছেন:

এবং যদি আমি কোডটি সি ++ এ লিখি তবে জেএসআই এপিআই-এস কীভাবে ব্যবহার করতে হয়

আবার আপনি একরকম পয়েন্ট মিস করছেন missing Asm.js বিদ্যমান সি / সি ++ অ্যাপ্লিকেশনগুলি জাভাস্ক্রিপ্টে পোর্টিং সক্ষম করে যাতে সেগুলি ব্রাউজারের মধ্যে চালানো যায়। আপনি সাধারণত আপনার সি / সি ++ কোডের মধ্যে জেএস এপিআই ব্যবহার করতে সক্ষম হবেন না এবং এটিএমএসজেএস-তে কোনও মায়াবী কিছুই নেই allow

যদি আপনার লিখতে কোনও নতুন অ্যাপ্লিকেশন থাকে যার জন্য জেএস এপিআই দরকার হয় তবে আপনার জেএসে অ্যাপ্লিকেশনটি লিখতে হবে এবং সি ++ এ লেখার চেষ্টা করার সাথে ফুটজ না করে জাভাস্ক্রিপ্টে পোর্ট করতে হবে।

এবং রেসিগের নিবন্ধে ফিরে গিয়ে, আপনার প্রশ্নের জন্য দুটি মূল উক্তি রয়েছে:

অদূর ভবিষ্যতে যে ধরণের অ্যাপ্লিকেশনগুলি Asm.js কে টার্গেট করতে চলেছে, সেগুলি হ'ল ব্রাউজারে চলার বহনযোগ্যতা থেকে যারা উপকৃত হবে তবে জাভাস্ক্রিপ্টের জন্য সরাসরি পোর্ট অক্ষম হবে এমন জটিলতার একটি স্তর রয়েছে

এবং

আপনি সম্ভবত Asm.js উপরের কোড থেকে দেখতে পারেন যে হাতে লেখা হয় নি। ... Asm.js এর জন্য এখনই সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রটি হল সি / সি ++ থেকে জাভাস্ক্রিপ্ট মেনে চলার অ্যাপ্লিকেশনগুলিতে। এর মধ্যে প্রায় কোনও অ্যাপ্লিকেশনই ডিওএমের সাথে ওয়েবজিএল এবং এর মতো ব্যবহার ছাড়াই অর্থবহভাবে যোগাযোগ করে না।

এর পরিবর্তে আপনি যা বিবেচনা করতে চান তা একটি জাভাস্ক্রিপ্ট প্রোগ্রাম থাকতে পারে যা আপনি জাভাস্ক্রিপ্টে সংকলিত সি ++ এ কল করার পাশাপাশি আপনার প্রয়োজনীয় জেএসপিআইপিগুলিকে কল করে। কটাক্ষপাত আছে এই emscripten টিউটোরিয়াল কিভাবে জাভাস্ক্রিপ্ট থেকে সি ++ কোড কল দেখতে।


কিছু অতিরিক্ত গবেষণার জন্য, এমস্ক্রিপ্টেনের একটি টিউটোরিয়াল রয়েছে যা আপনাকে সি ++ কোড কীভাবে গ্রহণ করতে হবে, এলএলভিএম এর মাধ্যমে চালনা করতে হবে এবং তারপরে asm.js লক্ষ্যবস্তু বুঝতে সাহায্য করতে পারে might

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


ASM.js সি / সি ++ এর জন্য একটি সংকলন লক্ষ্য। সুতরাং আপনার asm.js তে আপনার সি ++ লিখছেন না আপনার সংকলন সি ++ asm.js তে
ক্যালভিন

স্ক্র্যাচ থেকে শুরু হওয়া অ্যাপ্লিকেশনগুলির জন্য কেবল একটি উল্লেখ মনে আসে। গেমসের ক্ষেত্রে, সি ++ তে কোড থাকা একাধিক প্ল্যাটফর্মে মোতায়েনের জন্য সহায়ক হতে পারে।
ভ্লাদ নিকুলা

6

হ্যাঁ, আপনি সি ++ কোড লিখতে এবং এটি এসএমএসপিএস ব্যবহার করে asm.js তে সংকলন করতে পারেন। আমি নিজে চেষ্টা করে দেখিনি, এবং আমি নিশ্চিত নই যে এটি প্রাইম টাইমের জন্য কতটা প্রস্তুত। যদিও এটি একগুচ্ছ গেমগুলি চালানোর পক্ষে যথেষ্ট ভাল বলে মনে হচ্ছে।

এখানে একটি টিউটোরিয়াল দেওয়া হয়েছে: http://kripken.github.io/emscriptten-site/docs/getting_st সূত্র / টিউটোরিয়াল html । টিউটোরিয়ালটি দেখে, এটি সি ++ কোড সংকলন করা বেশ সহজ বলে মনে হচ্ছে:

// hello.cpp
#include<stdio.h>

int main() {
  printf("hello, world!\n");
  return 1;
}
$ ./emcc tests/hello.cpp -o hello.html

4
এটি আসলে সি কোড। একটি সি ++ সংকলক প্রায় দুই বা তিনটি আকারের জটিল আরও জটিল। ভাগ্যক্রমে, এমস্ক্রিপ্টেন এলএলভিএম সংকলন করে সেই কঠিন সমস্যাটিকে এড়িয়ে চলে এবং একটি বিদ্যমান সি ++ - থেকে-এলএলভিএম সংকলক রয়েছে।
এমসাল্টাররা

3
@ এসএমএলটারস: এটি বৈধ সি ++ কোডও। ভাবুন তো! কি দারুন!
টমাস এডিং

@ থমাসডিং: আপনি বিষয়টিটি মিস করেছেন missed আপনার যে ভাষাটি সমর্থন করতে হবে তত ছোট ভাষা ile সংকলন করা সহজ। সি এবং সি ++ এর ছেদটি অবশ্যই দু'জনের যে কোনওটির চেয়ে বড় নয়।
এমএসএলটাররা 10:54

আসুন ধরুন যে এই কোডটি খাঁটি সি ++, যে কোনও সি সংকলক হ্যান্ডেল করবে না, সেটির ব্যবহার emccবৈধ হবে কি?
হামজা ওয়াঘাদ

@ হামজাউয়াঘাদ - হ্যাঁ সি ++ এর কোট এবং স্ট্রিং ক্লাস সহ একটি সাধারণ হ্যালো ওয়ার্ল্ড এই এমএমসি কমান্ড লাইনের সাথে ঠিক সূক্ষ্মভাবে কাজ করে। সংস্করণ 1.35.0 ব্যবহার করে।
ওরিওন এলিজিল

0

সবচেয়ে সহজ উপায় হ'ল ডাব্লুসিপিপি , একটি প্যাকেজ ব্যবহার করা যা আপনাকে আপনার নোড প্রকল্পে প্রায় সরাসরি সি ++ আমদানি করতে দেয়।

আমাদের সি ++

// addTwo.cpp 

export int addTwo(int a, int b) {
  return a + b;
}

টার্মিনালে (আমাদের সি ++ সংকলন করতে)

$ wcpp

আমাদের জাভাস্ক্রিপ্ট

const ourModule = await require('wcpp')('./addTwo.cpp')

console.log(ourModule.addTwo(2, 3))

আরও তথ্যের জন্য, এনপিএম প্যাকেজ বা গিট রেপো দেখুন

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