Skip to content
EN

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)
}

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

Что такое WebAssembly Component Model?

WebAssembly Component Model (Wasm CM) представляет собой стандарт, который упрощает создание и использование компонентов WebAssembly, позволяя разработчикам легко интегрировать различные модули. Это решение оптимизирует взаимодействие между модулями, обеспечивая высокую производительность и безопасность. Основные концепции включают в себя интероперабельность, модульность и возможность повторного использования кода.

Преимущества использования WebAssembly Component Model

Внедрение WebAssembly Component Model в рабочий процесс разработки предлагает ряд значительных преимуществ:

  • Упрощенная интеграция: Модули могут взаимодействовать друг с другом без необходимости сложной настройки.
  • Высокая производительность: Wasm CM оптимизирует загрузку и исполнение кода, позволяя приложениям работать быстрее.
  • Безопасность: Изоляция модулей снижает риски, связанные с уязвимостями.
  • Повторное использование: Разработчики могут легко использовать существующие модули, сокращая время на разработку.

Эти преимущества делают WebAssembly Component Model идеальным выбором для создания высокопроизводительных веб-приложений и сервисов.

Практический пример: создание и использование компонентов с WebAssembly

Рассмотрим создание простого компонента с использованием WebAssembly Component Model. Для начала вам потребуется установленный wasm-pack и cargo. Следуйте этим шагам:

  1. Создайте новый проект:
cargo new --lib my_wasm_component
  1. Перейдите в директорию проекта:
cd my_wasm_component
  1. Добавьте зависимости в Cargo.toml:
[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
  1. Создайте файл src/lib.rs и добавьте следующий код:
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn greet(name: &str) -> String {
    format!("Привет, {}!", name)
}
  1. Соберите проект:
wasm-pack build --target web
  1. Теперь вы можете использовать этот модуль в вашем веб-приложении. Например, добавьте следующий код в index.js:
import init, { greet } from './my_wasm_component';

async function run() {
    await init();
    console.log(greet('Мир'));
}

run();

Этот простой пример демонстрирует, как создать компонент на WebAssembly и интегрировать его в ваше веб-приложение. Используя WebAssembly Component Model, вы можете создавать более сложные и производительные приложения, которые легко масштабируются и поддерживаются.

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

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

Чем отличается от классического 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/сериализации.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.