WebAssembly Runtime Vocabulary: WASM, WASI and the Component Model (англійською)
Освоєння англійської мови для інженерії часу виконання WebAssembly — створення екземплярів, лінійна пам’ ять, WASI, модель компонентів і типи інтерфейсів WIT для інженерів WASM.
Словник WebAssembly все ще розвивається
WebAssembly - це молода і швидко розвивається технологія. Його словник складається з багатьох традицій — дизайн віртуальної машини, системне програмування і веб-стандарти — і нові терміни вводяться з кожною новою пропозицією. Для інженерів, які працюють над WASM runtimes або програмами, слідкувати за термінологією є частиною слідкування за екосистемою.
Цей посібник містить основні відомості з англійської мови для інженерів часу виконання WASM, починаючи з моделі виконання ядра і закінчуючи моделлю WASI і моделлю компонентів.
Основний WASM Execution Vocabulary
| Term | Definition |
|---|---|
| Module | A compiled WebAssembly binary — a stateless, loadable unit of code and data |
| Instance | A running module with its own memory, table, and global state |
| Instantiation | The process of creating an instance from a module, resolving imports and allocating resources |
| Linear memory | The flat, resizable byte array that a WASM instance uses as its heap |
| Memory page | The unit of memory growth in WASM: 64 KiB; memory is grown one page at a time |
| Table | A typed array of references (typically function references) in a WASM module |
| Import | An external value (function, memory, table, or global) that a module requires from the host |
| Export | A value (function, memory, table, or global) that a module exposes to the host or other modules |
| Host function | A function implemented outside WASM (by the runtime or the embedding application) and imported into a module |
| Trap | A runtime error that terminates execution of a WASM module — the WASM equivalent of a panic or segfault |
** Пастки ** виникають з певних причин: недосяжна інструкція, ділення на нуль, доступ до пам’ яті за межами обмежень, невідповідність типів або переповнення стека. На відміну від винятків, пастки неможливо відновити самим модулем WASM — вони обробляються програмою виконання.
Словник-довідник
WebAssembly System Interface (WASI) — набір стандартизованих API, які дозволяють модулям WASM взаємодіяти з операційною системою в портативний спосіб.
| Term | Definition |
|---|---|
| WASI | WebAssembly System Interface — a capability-based API for system access from WASM |
| Capability | A token that grants a WASM module access to a specific resource (a file, a socket, etc.) |
| Preopened directory | A directory that the host grants the WASM module access to before execution begins |
| WASI Preview 1 | The original WASI specification (unstable), based on POSIX-like file descriptor APIs |
| WASI Preview 2 | The stable, Component Model-based version of WASI, using the WIT interface definition language |
| Snapshot | An earlier version of the WASI specification (used informally in the Preview 1 era) |
| Sandboxing | The isolation guarantees that prevent a WASM module from accessing resources it has not been granted |
Модель можливостей WASI відрізняється від традиційної POSIX важливим чином: модуль WASM не може отримати доступ до файлової системи або мережі, якщо вузол * явно не надає * йому можливості. Це ключова перевага для розгортання, що вимагають безпеки.
Компонентний словник моделей
WASM Component Model — це пропозиція, яка розширює основний формат WASM для підтримки композиції вищого рівня і співпраці мов.
| Term | Definition |
|---|---|
| Component | A 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 |
| World | A WIT concept that defines the imports and exports of a component — its complete interface contract |
| Interface | A named, typed collection of functions defined in WIT |
| Canonical ABI | The calling convention that defines how high-level WIT types are lowered to and lifted from core WASM values |
| Lifting | Converting core WASM values into high-level Component Model types |
| Lowering | Converting high-level Component Model types into core WASM values |
| Linking | Composing multiple components by connecting their imports to other components’ exports |
| Registry | A service for distributing and discovering WASM components (analogous to npm or cargo) |
Runtime and Toolchain Vocabulary (англійською)
| Term | Definition |
|---|---|
| Wasmtime | A production WASM runtime maintained by the Bytecode Alliance |
| Wasmer | An alternative WASM runtime with support for multiple embedding languages |
| wasm-bindgen | A Rust tool that generates bindings between WASM modules and JavaScript |
| wit-bindgen | A tool that generates language bindings from WIT interface definitions |
| AOT compilation | Ahead-of-time compilation — compiling WASM bytecode to native machine code before execution |
| JIT compilation | Just-in-time compilation — compiling WASM bytecode to native code at runtime |
| Interpreted execution | Running WASM bytecode directly without native compilation — slower but faster to start |
| Fuel | A 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 для взаємодії між мовами.” *
- “Механізм підняття і опускання моделі компонента автоматично обробляє відмінності в кодуванні рядків між 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. Зрозуміти цей вивід - такі терміни як “розмір регіону”, “зсув” і “прапори” - є ключовим для обговорення управління пам’яттю і оптимізації. Це практична демонстрація того, як ці абстрактні поняття перетворюються на матеріальні дані.