Component-Modelで何ができるようになるか
Component-ModelとはWASM(WebAssembly)の現在策定中の新しい仕様。
このComponent-Modelでは抽象化された、静的解析可能で、機能安全で、言語にとらわれないインターフェースを定義することを目標としている。
主な用途
- ネイティブプラグインの代替
- サーバレスなプラットフォームでの低レイテンシで高速なインスタンス化ができるサンドボックス環境
- 簡単に効率的にスクリプトを導入するサポートの提供
- ライブラリをサンドボックス環境で安全に外部のunsafeなライブラリを実行する
経緯
このComponent-Modelはもともと二つの提案に分かれていました。
- interface-types
- 入出力の構造を定義してインターフェースを作りやすくする
- module-linking
- 他のwasmのモジュールに動的にリンクする
WIT
Component-Modelにおいてのインターフェースを記述する言語
まだ仕様策定中
default world sample-plugin {
record plugin-config {
name: string,
version: string,
}
record response {
content: string,
}
import get-config: func() -> plugin-config
export gen-response: func(user: string) -> response
}
想定される活用先
これらのインターフェース定義がwit経由になると考えられる
Rust等の言語でフロントエンド
DOMを直接操作できるようになる。yewとかが高速化するはず
fass
witでインターフェースを定義したwasmを設定することになるはず
https://wasmer.io/wasmer-for-faas
https://github.com/cloudflare/workerd
https://deislabs.io/posts/introducing-spiderlightning-and-slight/
WAPM
IRB,RustPython,sqlite
Wasmのパッケージをimportなどして呼べるようになる。
Rustへの影響
wasmと親和性が高いRustにいろいろメリットがあると思われる
yewなどのRust製フロントエンドの高速化
Domが直接操作できるようになるので高速化、効率化する
wit-bindgen
- ランタイム(ホスト)として
- wasm-time wasmer
- ゲスト
- 対象のコンポーネントが実装されることをtrait定義で確認することができる
まとめ
Component-Modelでwasmの表現力が高まり、様々な用途で使いやすくなると思われる。