WebAssembly Runtime Vocabulary: WASM, WASI and the Component Model (англійською)

Освоєння англійської мови для інженерії часу виконання WebAssembly — створення екземплярів, лінійна пам’ ять, WASI, модель компонентів і типи інтерфейсів WIT для інженерів WASM.

Словник WebAssembly все ще розвивається

WebAssembly - це молода і швидко розвивається технологія. Його словник складається з багатьох традицій — дизайн віртуальної машини, системне програмування і веб-стандарти — і нові терміни вводяться з кожною новою пропозицією. Для інженерів, які працюють над WASM runtimes або програмами, слідкувати за термінологією є частиною слідкування за екосистемою.

Цей посібник містить основні відомості з англійської мови для інженерів часу виконання WASM, починаючи з моделі виконання ядра і закінчуючи моделлю WASI і моделлю компонентів.


Основний WASM Execution Vocabulary

TermDefinition
ModuleA compiled WebAssembly binary — a stateless, loadable unit of code and data
InstanceA running module with its own memory, table, and global state
InstantiationThe process of creating an instance from a module, resolving imports and allocating resources
Linear memoryThe flat, resizable byte array that a WASM instance uses as its heap
Memory pageThe unit of memory growth in WASM: 64 KiB; memory is grown one page at a time
TableA typed array of references (typically function references) in a WASM module
ImportAn external value (function, memory, table, or global) that a module requires from the host
ExportA value (function, memory, table, or global) that a module exposes to the host or other modules
Host functionA function implemented outside WASM (by the runtime or the embedding application) and imported into a module
TrapA runtime error that terminates execution of a WASM module — the WASM equivalent of a panic or segfault

** Пастки ** виникають з певних причин: недосяжна інструкція, ділення на нуль, доступ до пам’ яті за межами обмежень, невідповідність типів або переповнення стека. На відміну від винятків, пастки неможливо відновити самим модулем WASM — вони обробляються програмою виконання.


Словник-довідник

WebAssembly System Interface (WASI) — набір стандартизованих API, які дозволяють модулям WASM взаємодіяти з операційною системою в портативний спосіб.

TermDefinition
WASIWebAssembly System Interface — a capability-based API for system access from WASM
CapabilityA token that grants a WASM module access to a specific resource (a file, a socket, etc.)
Preopened directoryA directory that the host grants the WASM module access to before execution begins
WASI Preview 1The original WASI specification (unstable), based on POSIX-like file descriptor APIs
WASI Preview 2The stable, Component Model-based version of WASI, using the WIT interface definition language
SnapshotAn earlier version of the WASI specification (used informally in the Preview 1 era)
SandboxingThe isolation guarantees that prevent a WASM module from accessing resources it has not been granted

Модель можливостей WASI відрізняється від традиційної POSIX важливим чином: модуль WASM не може отримати доступ до файлової системи або мережі, якщо вузол * явно не надає * йому можливості. Це ключова перевага для розгортання, що вимагають безпеки.


Компонентний словник моделей

WASM Component Model — це пропозиція, яка розширює основний формат WASM для підтримки композиції вищого рівня і співпраці мов.

TermDefinition
ComponentA higher-level WASM unit that encapsulates one or more core modules with typed interfaces
WIT (WebAssembly Interface Types)The interface definition language used to describe component interfaces
WorldA WIT concept that defines the imports and exports of a component — its complete interface contract
InterfaceA named, typed collection of functions defined in WIT
Canonical ABIThe calling convention that defines how high-level WIT types are lowered to and lifted from core WASM values
LiftingConverting core WASM values into high-level Component Model types
LoweringConverting high-level Component Model types into core WASM values
LinkingComposing multiple components by connecting their imports to other components’ exports
RegistryA service for distributing and discovering WASM components (analogous to npm or cargo)

Runtime and Toolchain Vocabulary (англійською)

TermDefinition
WasmtimeA production WASM runtime maintained by the Bytecode Alliance
WasmerAn alternative WASM runtime with support for multiple embedding languages
wasm-bindgenA Rust tool that generates bindings between WASM modules and JavaScript
wit-bindgenA tool that generates language bindings from WIT interface definitions
AOT compilationAhead-of-time compilation — compiling WASM bytecode to native machine code before execution
JIT compilationJust-in-time compilation — compiling WASM bytecode to native code at runtime
Interpreted executionRunning WASM bytecode directly without native compilation — slower but faster to start
FuelA mechanism in some runtimes (e.g., Wasmtime) that limits the number of WASM instructions a module can execute

Приклади висловлювань

    • “Спроба створення екземпляра цього модуля зазнала невдачі, оскільки вузол не надає потрібних можливостей для попереднього відкриття каталогів WASI — налаштування пісочниці потрібно оновити.” *
    • “Лінійний доступ до пам’ яті перевіряється за час виконання; доступ за межами обмежень буде перехоплювати, а не пошкоджувати сусідню пам’ ять, що є ключовою гарантією безпеки моделі виконання WASM.” *
    • “Ми переходимо з WASI Preview 1 на Preview 2, щоб визначити інтерфейси наших додатків за допомогою WIT і скористатися перевагами канонічного ABI для взаємодії між мовами.” *
  1. “Механізм підняття і опускання моделі компонента автоматично обробляє відмінності в кодуванні рядків між Rust і JavaScript — нам більше не потрібно вручну вводити анотації wasm-bindgen для рядкових аргументів.”
    • “Ми використовуємо компіляцію AOT у виробництві для передбачуваної затримки запуску, але зберігаємо резерв JIT для архітектур, для яких ми ще не створили національні цілі.” *

Поширені помилки в WASM Vocabulary

** « Модуль WASM » ** і ** « Компонент WASM » ** не є взаємозамінними у світі моделі компонентів. Модуль є основним артефактом WASM; компонент — це типова одиниця вищого рівня. Правильне використання цих термінів свідчить про знайомість з поточним специфікатором.

** « Пісочниця » ** часто використовується нерозбірливо. У WASM, гарантія пісочниці є специфічною: ізоляція пам’яті (жодного доступу за межі лінійної пам’яті) і доступ до ресурсів на основі можливостей (жодного неявного доступу до ОС). Під час обговорення безпеки WASM, будьте уважні щодо того, на які властивості пісочниці ви покладаєтеся.

Навигація нуансів: практичний погляд на термінологію

Будьмо чесними – іноді найскладнішим аспектом вивчення нової технології є не що, а як ми говоримо про це. Як інженер з часу виконання WebAssembly, ви часто стикаєтеся з певною термінологією, пов’ язаною з WASI і моделлю компонентів, яка може здатися незнайомою, коли ви говорите або пишете у професійному контексті. Це не просто про знання визначення; це про передачі своїх ідей чітко і ефективно, що є ключовим для перегляду коду, обговорення команди, і документації.

Розглянемо такий сценарій: Ви переглядаєте запит на збирання, у якому розробник реалізував нову можливість за допомогою WASI. У огляді з’ являється коментар: « Ця інстанціонація здається надто складною — чи можемо ми спростити її, використовуючи лінійну пам’ ять безпосередньо замість того, щоб проходити через інтерфейс WASI? » Це не просто про те, чи код * працює *; це про те, щоб сформулювати ваше розуміння компромісів, які беруть участь, посилаючись на конкретні концепції, такі як « інстанціонація », « лінійна пам’ ять », і потенційну потребу у більш прямому підході. Аналогічно, на каналі Slack, де обговорюється продуктивність, ви можете почути, як хтось каже: « Доступ до файлової системи WASI спричиняє вузьке місце; нам слід дослідити стратегії оптимізації ». Це вимагає знайомства з тим, як WASI обробляє взаємодії файлової системи і наслідки для продуктивності під час виконання — словник, зосереджений навколо самого « WASI ».

Інша поширена ситуація виникає під час опису вашої роботи у описі запиту на звантаження: « Цей компонент використовує стандартний потік вводу/ виводу WASI для зв’ язку з програмою- вузлом, полегшуючи обмін даними за допомогою інтерфейсів, визначених у моделі компонента. » Зауважте, що у цьому описі йдеться про * інтерфейси * і про те, як вони пов’ язані з зв’ язком — ключовими елементами у більш широкому розумінні моделі компонента. Освоєння цих термінів покращить вашу здатність ефективно співпрацювати з іншими інженерами і робити значний внесок у технічні обговорення. Не бійтеся запитати про пояснення; швидке запитання про « WASI » проти « лінійної пам’ яті » може врятувати вас від годин плутанини пізніше. Врешті-решт, чітке спілкування побудовано на простій зрозумілості основного словникового запасу.

Нарешті, пам’ ятайте, що точність має значення в інженерній документації і проектних пропозиціях. При викладенні вимог до нової функції WASI, заява про те, що вона потребує «прямого доступу до лінійної пам’яті», буде набагато ефективнішою, ніж просто сказати «вона повинна бути швидкою»

Ось приклад того, як ви можете скористатися wasi-sdk для перевірки наявності пам’ яті:

wasi-sdk --meminfo

Ця команда, яку виконують у середовищі розробки, надає докладні відомості про лінійні області пам’ яті, доступні під час виконання WASM. Зрозуміти цей вивід - такі терміни як “розмір регіону”, “зсув” і “прапори” - є ключовим для обговорення управління пам’яттю і оптимізації. Це практична демонстрація того, як ці абстрактні поняття перетворюються на матеріальні дані.

Поширені запитання

Про що ця стаття "WebAssembly Runtime Vocabulary: WASM, WASI and the Component Model (англійською)"?

Освоєння англійської мови для інженерії часу виконання WebAssembly — створення екземплярів, лінійна пам’ ять, WASI, модель компонентів і типи інтерфейсів WIT для інженерів WASM.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "WebAssembly Runtime Vocabulary: WASM, WASI and the Component Model (англійською)"?

Приблизно 8 min.