Binaryen হল WebAssembly-এর জন্য একটি কম্পাইলার এবং টুলচেইন অবকাঠামো লাইব্রেরি, C++ এ লেখা। এটির লক্ষ্য হল WebAssembly-এ কম্পাইলিংকে স্বজ্ঞাত, দ্রুত এবং কার্যকর করা। এই পোস্টে, ExampleScript নামক একটি সিন্থেটিক খেলনা ভাষার উদাহরণ ব্যবহার করে, Binaryen.js API ব্যবহার করে জাভাস্ক্রিপ্টে WebAssembly মডিউল কীভাবে লিখতে হয় তা শিখুন। আপনি মডিউল তৈরির মৌলিক বিষয়গুলি কভার করবেন, মডিউলে ফাংশন যোগ করবেন এবং মডিউল থেকে ফাংশন রপ্তানি করবেন। এটি আপনাকে WebAssembly-এ প্রকৃত প্রোগ্রামিং ভাষা কম্পাইল করার সামগ্রিক মেকানিক্স সম্পর্কে জ্ঞান দেবে। আরও, আপনি শিখবেন কিভাবে Binaryen.js এর সাথে এবং wasm-opt এর সাথে কমান্ড লাইনে Wasm মডিউল অপ্টিমাইজ করতে হয়।
Binaryen উপর পটভূমি
বাইনারিনের একটি একক শিরোনামে একটি স্বজ্ঞাত C API রয়েছে এবং এটি JavaScript থেকেও ব্যবহার করা যেতে পারে। এটি WebAssembly আকারে ইনপুট গ্রহণ করে, তবে এটি পছন্দ করে এমন কম্পাইলারদের জন্য একটি সাধারণ নিয়ন্ত্রণ প্রবাহ গ্রাফও গ্রহণ করে।
একটি মধ্যবর্তী প্রতিনিধিত্ব (IR) হল ডেটা স্ট্রাকচার বা কোড যা অভ্যন্তরীণভাবে একটি কম্পাইলার বা ভার্চুয়াল মেশিন দ্বারা সোর্স কোডের প্রতিনিধিত্ব করার জন্য ব্যবহৃত হয়। Binaryen এর অভ্যন্তরীণ IR কমপ্যাক্ট ডেটা স্ট্রাকচার ব্যবহার করে এবং সমস্ত উপলব্ধ CPU কোর ব্যবহার করে সম্পূর্ণ সমান্তরাল কোড জেনারেশন এবং অপ্টিমাইজেশনের জন্য ডিজাইন করা হয়েছে। WebAssembly-এর একটি উপসেট হওয়ার কারণে Binaryen-এর IR WebAssembly-এ কম্পাইল করা হয়।
বাইনারিনের অপ্টিমাইজারের অনেকগুলি পাস রয়েছে যা কোডের আকার এবং গতি উন্নত করতে পারে। এই অপ্টিমাইজেশানগুলি বাইনারিনকে যথেষ্ট শক্তিশালী করে তোলার লক্ষ্যে নিজেই একটি কম্পাইলার ব্যাকএন্ড হিসাবে ব্যবহার করা যায়। এতে WebAssembly-নির্দিষ্ট অপ্টিমাইজেশান অন্তর্ভুক্ত রয়েছে (যেটি সাধারণ-উদ্দেশ্য কম্পাইলাররা নাও করতে পারে), যা আপনি Wasm minification হিসাবে ভাবতে পারেন।
Binaryen এর একটি উদাহরণ ব্যবহারকারী হিসাবে অ্যাসেম্বলিস্ক্রিপ্ট
বাইনারিন বেশ কয়েকটি প্রজেক্ট দ্বারা ব্যবহৃত হয়, উদাহরণস্বরূপ, অ্যাসেম্বলিস্ক্রিপ্ট , যা টাইপস্ক্রিপ্ট-এর মতো ভাষা থেকে সরাসরি WebAssembly-এ কম্পাইল করতে Binaryen ব্যবহার করে। অ্যাসেম্বলিস্ক্রিপ্ট খেলার মাঠে উদাহরণ চেষ্টা করুন ।
সমাবেশস্ক্রিপ্ট ইনপুট:
export function add(a: i32, b: i32): i32 {
return a + b;
}
Binaryen দ্বারা উত্পন্ন পাঠ্য আকারে সংশ্লিষ্ট WebAssembly কোড:
(module
(type $0 (func (param i32 i32