Skip to content

WebAssembly Component Model

Коротко:

Component Model — standard 2024+, позволяющий WASM-модулям обмениваться rich-типами (records, variants, strings, lists) без ручной сериализации. Описание интерфейсов на WIT (WebAssembly Interface Type). Runtime: Wasmtime, WasmEdge. Результат: JavaScript может импортировать Rust-компонент как обычный npm-package (ComponentizeJS, JCO).

Ниже: подробности, пример, смежные термины, FAQ.

Попробовать бесплатно →

Детали

  • WIT — .wit файлы описывают interface между компонентами
  • Канонические ABI: records/variants/strings передаются без FFI
  • jco (JS Component Tools) — transpile .wasm → pure JS
  • Wasmtime 14+ — host-runtime с Component Model out-of-the-box
  • WASI 0.2 построено на Component Model

Пример

// hello.wit
package example:hello;
world app {
    export greet: func(name: string) -> string;
}

// Rust implementation
#[export_name = "greet"]
pub extern "C" fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

Связанные термины

Больше по теме

Часто задаваемые вопросы

Чем отличается от классического WASM?

Раньше WASM-модули обменивались только i32/i64/f32/f64 и указателями в shared memory. Component Model даёт rich types.

Есть production use?

Fastly Compute@Edge, Cloudflare Workers (experimental), Spin от Fermyon.

Зачем это вообще?

Language-agnostic микросервисы: написал компонент на Rust, JS/Python/Go его импортируют как родной — без REST/gRPC/сериализации.