WebAssembly এ ব্যবহারযোগ্য ডেটা টাইপস
WebAssembly (WASM) একটি কম্পাইলড বাইনারি ফরম্যাট যা সাধারণত সি, সি++, রাস্ট, ইত্যাদি ভাষা থেকে তৈরি হয়। WebAssembly কোডের জন্য কিছু নির্দিষ্ট ডেটা টাইপস রয়েছে, যা বিভিন্ন গাণিতিক অপারেশন এবং ডেটা প্রক্রিয়াকরণে ব্যবহৃত হয়। এই ডেটা টাইপগুলো নির্দিষ্ট আকার এবং ফরম্যাটে মেমরিতে সংরক্ষিত থাকে এবং দ্রুত কাজ করতে সক্ষম।
WebAssembly এর ব্যবহৃত ডেটা টাইপগুলি সাধারণত দুটি প্রধান বিভাগে ভাগ করা যায়:
- Value Types – এই টাইপগুলো হল মৌলিক ডেটা যেগুলি একে অপরের সাথে গাণিতিক বা লজিক্যাল অপারেশন করতে সক্ষম।
- Reference Types – এই টাইপগুলো হল রেফারেন্স ডেটা, যেমন টেবিল, ফাংশন, এবং মেমরি রেফারেন্স।
এখানে বিস্তারিতভাবে WebAssembly এর প্রধান ডেটা টাইপস আলোচনা করা হলো।
1. Value Types (মূল ডেটা টাইপ)
Value types হল WebAssembly এর মৌলিক ডেটা টাইপ যা প্রাথমিকভাবে গাণিতিক অপারেশন (যেমন যোগ, বিয়োগ, গুণ) বা লজিক্যাল অপারেশন (যেমন তুলনা) করতে ব্যবহৃত হয়।
1.1 Integer Types (পূর্ণসংখ্যা টাইপ)
- i32: এটি 32-বিট সাইনড পূর্ণসংখ্যা, যা -231 থেকে 231-1 পরিসরে মান ধারণ করতে পারে।
- i64: এটি 64-বিট সাইনড পূর্ণসংখ্যা, যা -263 থেকে 263-1 পরিসরে মান ধারণ করতে পারে।
1.2 Floating-Point Types (ফ্লোটিং-পয়েন্ট টাইপ)
- f32: এটি 32-বিট ফ্লোটিং পয়েন্ট টাইপ, যা IEEE 754 স্ট্যান্ডার্ড অনুসারে দশমিক সংখ্যা সংরক্ষণ করে।
- f64: এটি 64-বিট ফ্লোটিং পয়েন্ট টাইপ, যা আরও বেশি সঠিকতা এবং বৃহত্তর পরিসরের মান ধারণ করতে পারে।
1.3 Other Integer Types (অন্যান্য পূর্ণসংখ্যা টাইপ)
- i8, i16: 8-বিট এবং 16-বিট পূর্ণসংখ্যা (সাইনড এবং অ-সাইনড)।
1.4 Boolean Type
WebAssembly তে সরাসরি boolean টাইপ নেই, কিন্তু i32 টাইপ ব্যবহার করে boolean মান মডেল করা হয়। এখানে, 0 মানে false এবং 1 মানে true।
2. Reference Types (রেফারেন্স টাইপ)
Reference types হল ডেটা টাইপ যা সিস্টেমের মধ্যে রেফারেন্স বা পয়েন্টার হিসাবে ব্যবহৃত হয়। এগুলো সাধারণত complex structures তৈরি করতে বা ডেটা শেয়ার করতে ব্যবহৃত হয়।
2.1 Memory
WebAssembly তে memory হল একটি রেফারেন্স টাইপ, যা একাধিক ডেটা ধারণ করতে পারে এবং সেগুলি কার্যকরভাবে এক্সেস এবং প্রসেস করতে সহায়তা করে। এই মেমরি বাইনারি ফরম্যাটে কাজ করে এবং ওয়েব অ্যাসেম্বলি ফাংশনগুলির মাধ্যমে ডেটা পরিচালনা করা হয়।
(memory 1) ;; 1 পেজের মেমরি2.2 Table
Table হল ফাংশন পয়েন্টার বা অন্য রেফারেন্স সঞ্চয় করতে ব্যবহৃত একটি টাইপ। এটি indirect function calls করতে বা callback রেফারেন্স তৈরি করতে ব্যবহৃত হয়। সাধারণত, WebAssembly মডিউলগুলো function table এর মাধ্যমে ফাংশন পয়েন্টার রেফারেন্স তৈরি করতে পারে।
(table 10 funcref) ;; ফাংশন পয়েন্টার সঞ্চয়ের জন্য একটি টেবিল2.3 Function
Function রেফারেন্স হল একটি টাইপ যা WebAssembly মডিউল বা JavaScript এর মধ্যে ফাংশন কল করতে ব্যবহৃত হয়। এটি ফাংশন পয়েন্টার হিসেবে কাজ করে।
(func $add (param i32 i32) (result i32)
local.get 0
local.get 1
i32.add)এখানে, $add ফাংশনটি একটি ফাংশন রেফারেন্সের মতো কাজ করে।
2.4 Externref
Externref হল একটি রেফারেন্স টাইপ যা JavaScript এ যে কোনো বস্তু বা ডেটার রেফারেন্স ধারণ করতে পারে, যেমন ইন্টারফেস, ইভেন্ট হ্যান্ডলার ইত্যাদি।
3. Array and String Handling in WebAssembly
WebAssembly তে arrays এবং strings সাধারণত মেমরি স্লট হিসাবে পরিচালিত হয়। JavaScript এ রকম ডেটা ব্যবহারের জন্য WebAssembly মেমরি (Linear Memory) ব্যবহৃত হয়।
3.1 Handling Arrays
WebAssembly তে অ্যারে রিড ও রাইট করার জন্য i32.load, i32.store ইত্যাদি ইন্সট্রাকশন ব্যবহার করা হয়। এগুলি মেমরির নির্দিষ্ট সেল থেকে ডেটা এক্সেস এবং প্রসেস করতে সাহায্য করে।
3.2 Handling Strings
WebAssembly তে স্ট্রিং সাধারণত Uint8Array বা Int8Array এর মাধ্যমে হ্যান্ডল করা হয়, কারণ WebAssembly সরাসরি স্ট্রিং টাইপ সাপোর্ট করে না। JavaScript থেকে WebAssembly তে স্ট্রিং পাস করতে হয়, এবং ফাংশন থেকে স্ট্রিং ফেরত আসতে মেমরি এক্সেস করতে হয়।
(func $setString (param $ptr i32) (param $len i32)
;; স্ট্রিং এর আউটপুট বা প্রসেসিং করা
)4. Summary of Data Types in WebAssembly
| টাইপ | বর্ণনা |
|---|---|
| i32 | 32-বিট সাইনড পূর্ণসংখ্যা |
| i64 | 64-বিট সাইনড পূর্ণসংখ্যা |
| f32 | 32-বিট ফ্লোটিং পয়েন্ট সংখ্যা |
| f64 | 64-বিট ফ্লোটিং পয়েন্ট সংখ্যা |
| i8, i16 | 8-বিট এবং 16-বিট পূর্ণসংখ্যা (সাইনড এবং অ-সাইনড) |
| memory | মেমরি, যা ডেটা ধারণ করতে এবং প্রসেস করতে ব্যবহৃত হয় |
| table | ফাংশন পয়েন্টার বা রেফারেন্স সঞ্চয় করতে ব্যবহৃত হয় |
| externref | JavaScript এর অবজেক্ট রেফারেন্স ধারণ করতে ব্যবহৃত |
| function | ফাংশন পয়েন্টার বা রেফারেন্স |
Conclusion
WebAssembly তে ডেটা টাইপগুলি সাধারণত দুটি প্রধান বিভাগে ভাগ করা হয়: value types এবং reference types। Value types গাণিতিক অপারেশন এবং প্রাথমিক ডেটা প্রক্রিয়া করার জন্য ব্যবহৃত হয়, যেমন i32, f64, ইত্যাদি। অন্যদিকে, reference types সাধারণত ফাংশন পয়েন্টার, মেমরি, টেবিল এবং গ্লোবাল ভ্যারিয়েবলস ধারণ করতে ব্যবহৃত হয়।
WebAssembly এর এই ডেটা টাইপসগুলি উন্নত পারফরম্যান্সের জন্য ডিজাইন করা হয়েছে এবং ওয়েব অ্যাপ্লিকেশনগুলিতে আরও শক্তিশালী, দ্রুত এবং কার্যকরী ডেটা ম্যানেজমেন্ট প্রদান করে।
Read more