Component Model — standard 2024+, позволяющий WASM-модулям обмениваться rich-типами (records, variants, strings, lists) без ручной сериализации. Описание интерфейсов на WIT (WebAssembly Interface Type). Runtime: Wasmtime, WasmEdge. Результат: JavaScript может импортировать Rust-компонент как обычный npm-package (ComponentizeJS, JCO).
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// 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)
}WebAssembly Component Model (Wasm CM) представляет собой стандарт, который упрощает создание и использование компонентов WebAssembly, позволяя разработчикам легко интегрировать различные модули. Это решение оптимизирует взаимодействие между модулями, обеспечивая высокую производительность и безопасность. Основные концепции включают в себя интероперабельность, модульность и возможность повторного использования кода.
Внедрение WebAssembly Component Model в рабочий процесс разработки предлагает ряд значительных преимуществ:
Эти преимущества делают WebAssembly Component Model идеальным выбором для создания высокопроизводительных веб-приложений и сервисов.
Рассмотрим создание простого компонента с использованием WebAssembly Component Model. Для начала вам потребуется установленный wasm-pack и cargo. Следуйте этим шагам:
cargo new --lib my_wasm_componentcd my_wasm_componentCargo.toml:[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
src/lib.rs и добавьте следующий код:use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
format!("Привет, {}!", name)
}wasm-pack build --target webindex.js:import init, { greet } from './my_wasm_component';
async function run() {
await init();
console.log(greet('Мир'));
}
run();Этот простой пример демонстрирует, как создать компонент на WebAssembly и интегрировать его в ваше веб-приложение. Используя WebAssembly Component Model, вы можете создавать более сложные и производительные приложения, которые легко масштабируются и поддерживаются.
Раньше WASM-модули обменивались только i32/i64/f32/f64 и указателями в shared memory. Component Model даёт rich types.
Fastly Compute@Edge, Cloudflare Workers (experimental), Spin от Fermyon.
Language-agnostic микросервисы: написал компонент на Rust, JS/Python/Go его импортируют как родной — без REST/gRPC/сериализации.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.