WASM — WebAssembly binary module fayllari va ularni bajarish ekotizimiga nisbatan ishlatiladigan qisqa nom. .wasm fayl portable bytecodega o‘xshash binary formatda function, type, memory, import, export va boshqa sectionlarni saqlaydi.
WebAssembly texnologiyaning to‘liq nomi bo‘lsa, WASM atamasi amaliyotda ko‘pincha binary artifact, target platforma yoki runtime workloadni anglatadi.
Magic number
WASM binary fayli maxsus magic byte va version bilan boshlanadi.
Runtime fayl haqiqiy WebAssembly module ekanini shu header orqali tekshiradi.
Faqat .wasm extensionga tayanish yetarli emas.
Noto‘g‘ri yoki unsupported version validation xatosi beradi.
Section
Module bir nechta sectionlardan tashkil topadi.
Standard sectionlar:
- custom;
- type;
- import;
- function;
- table;
- memory;
- global;
- export;
- start;
- element;
- code;
- data;
- data countga oid section.
Har section ID va encoded lengthga ega.
Type section
Function signature’lari type sectionda saqlanadi.
Signature parameter va return qiymat turlarini belgilaydi.
Function import, local function va indirect call shu type’ga murojaat qilishi mumkin.
Validation signature mosligini tekshiradi.
Code section
Function body instructionlar ketma-ketligini saqlaydi.
Local variable declaration va expression mavjud.
Har body uzunligi bilan chegaralangan.
Runtime invalid opcode, noto‘g‘ri stack yoki type mismatchni execute’dan oldin rad etadi.
Data section
Initial byte data linear memoryga joylashtirilishi mumkin.
Masalan:
- string literal;
- static array;
- compiled data;
- lookup table.
Active va passive data segmentlar runtime version hamda feature’ga bog‘liq ishlatiladi.
Custom section
Custom section standard execution semantikasini o‘zgartirmaydi.
U:
saqlashi mumkin.
Runtime noma’lum custom sectionni e’tiborsiz qoldirishi mumkin.
Name section
Name custom section function va local nomlarini debugging uchun saqlashi mumkin.
Production optimization nomlarni olib tashlashi yoki qisqartirishi mumkin.
Name section execution uchun majburiy emas.
U source code detailini oshkor qilishi ehtimoli bor.
Validation
WASM module instantiate bo‘lishidan oldin tekshiriladi:
Validation xavfli yoki buzilgan bytecode’ni bajarishni cheklaydi.
Compilation
Runtime WASMni:
- ahead-of-time;
- just-in-time;
- tiered compilation;
- interpreter
orqali bajarishi mumkin.
Browser tez startup uchun avval sodda compiler, keyin hot functionlar uchun optimizatsiya ishlatishi ehtimoli bor.
Instantiation
Compilation module code’ini tayyorlaydi.
Instantiation esa:
- importlarni bog‘laydi;
- memory va table yaratadi;
- globalni initializatsiya qiladi;
- data segmentni joylashtiradi;
- start functionni bajarishi mumkin.
Import mos kelmasa instantiation xato beradi.
Start function
Module optional start functionga ega bo‘lishi mumkin.
U instance yaratilganda avtomatik ishlaydi.
Start function parameter va returnga ega bo‘lmasligi kerak.
Host module’ni ishonchsiz deb bilsa uning startup xarajatini ham limitlaydi.
WASM fayl hajmi
Binary format text JavaScript yoki WATga qaraganda compact bo‘lishi mumkin.
Biroq compiled runtime, standard library va debug section faylni kattalashtiradi.
Optimization:
- dead code elimination;
- stripping;
- compression;
- code splittingga yaqin module bo‘lish;
- kichik runtime
orqali amalga oshiriladi.
MIME type
Web server .wasm fayl uchun to‘g‘ri media type berishi kerak:
Content-Type: application/wasm
Bu streaming compilation va browser integrationga yordam beradi.
Noto‘g‘ri type ayrim API’da fallback yoki xato yaratishi mumkin.
Streaming compilation
Browser response kelishi bilan module’ni bosqichma-bosqich compile qilishi mumkin.
To‘g‘ri MIME va streaming response muhim.
Agar server faylni noto‘g‘ri type bilan bersa to‘liq ArrayBuffer olib keyin compile qilish talab qilinishi mumkin.
Integrity
WASM artifact CDN yoki tashqi source’dan yuklansa integrity va supply-chain nazorati zarur.
Yondashuvlar:
- HTTPS;
- checksum;
- Subresource Integrityga mos qo‘llanish;
- signed package;
- immutable version;
- trusted build.
Binary inson ko‘zida tekshirish qiyin.
Reverse engineering
WASM native machine code emas, ammo structure va instructionlarini tool bilan disassemble qilish mumkin.
Debug symbol olib tashlansa ham algorithm va stringlar tahlil qilinishi ehtimoli bor.
Clientga yuborilgan code secret sifatida qaralmaydi.
Obfuscation
Code minification yoki symbol stripping tahlilni qiyinlashtirishi mumkin, lekin security boundary emas.
API key, private algorithm secret yoki credential WASM ichiga yashirilmaydi.
User binary’ni yuklab tahlil qilishi mumkin.
Standalone runtime
WASM browserdan tashqarida server, edge, plugin va sandbox runtime’da bajarilishi mumkin.
Host file va network capability’ni explicit beradi.
WASI system interface standartlashuviga yordam beradi.
Runtime policy module accessini cheklaydi.
Component va module
Core WASM module low-level type va linear memoryga tayanadi.
Yuqori darajadagi component model language va interface interoperabilityni yaxshilashga qaratilgan.
String, record va resource kabi tushunchalar interface type orqali ifodalanishi mumkin.
WASM va JavaScript bundle
JavaScript bundle browser API va dynamic UI uchun qulay.
WASM compute-heavy compiled code uchun mos.
Ko‘p application:
JavaScript UI
+ WASM hisoblash
modelidan foydalanadi.
Har UI componentni WASMga ko‘chirish zarur emas.
Fayl extensioni
.wasm extension artifact turini ko‘rsatadi, lekin module qaysi importlar, ABI yoki runtime talab qilishini bildirmaydi. Bir browser module standalone WASI runtime’da ishlamasligi mumkin. Artifact bilan target, feature va interface metadata’si versionlanadi.
Bog‘liq tushunchalar
WASM binary, WebAssembly, Module section, Magic number, Code section, Data section, Validation, Streaming compilation, WAT, WASI, application/wasm