Bosh sahifa Wiki WASM

WASM

WASMWebAssembly 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:

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