WebAssemblyのEmbedderからのインターフェース一覧
WebAssemblyは単体で完結するよりは、ホスト環境に埋め込まれて使う用途が想定されているようです(ただし、最近はそれだけでもない)。例えば、JavaScriptが典型的なホスト環境だと言えます。specには、それらのEmbedderとWebAssemblyのインターフェースが規定されていて、整理のために以下、概略とともに一覧をRustコードで示します。詳細、気になる点もありますが別途。
なお、これらを実装していることがEmbedderの必須条件ではない、と書かれている点は注意です。
mod store; pub use store::store_init; // storeを初期化する mod module; pub use module::{ module_decode, // バイト列を読み込んでmoduleを返す module_parse, // utf-8文字列を読み込んでmoduleを返す module_validate, // moduleを検査する module_instanciate, // moduleを初期化してinstanceを生成する(要素をstoreに入れる) module_imports, // 指定したmoduleのimport情報を全て返す module_exports, // 指定したmoduleのexport情報を全て返す }; mod instance; pub use instance::instance_export; // 特定のinstanceから指定したexport要素の値を返す mod func; pub use func::{ func_alloc, // 指定したhostfuncをstoreに割り当てる func_type, // 指定したfuncaddrの型を返す func_invoke, // 指定したfuncaddrにひもづく関数を指定した引数で呼び出し、結果を返す }; mod table; pub use table::{ table_alloc, // 指定したtabletypeからtableを生成し、storeに割り当てる table_type, // 指定したtableaddrのtabletypeを返す table_read, // table内の指定した場所にあるfuncaddrを返す table_write, // table内の指定した場所にfuncaddrを書き込む table_size, // tableの長さを返す table_grow, // 指定した長さだけtableを伸ばす }; mod mem; pub use mem::{ mem_alloc, // 指定したmemtypeからmemを生成し、storeに割り当てる mem_type, // 指定したmemaddrのmemtypeを返す mem_read, // mem内の指定した場所にあるbyteを返す mem_write, // mem内の指定した場所にbyteを書き込む mem_size, // memの長さを返す mem_grow, // 指定した長さだけmemを伸ばす }; mod global; pub use global::{ global_alloc, // 指定したglobaltypeからglobalを生成し、storeに割り当てる global_type, // 指定したglobaladdrのglobaltypeを返す global_read, // global内の指定した場所にある値を返す global_write, // global内の指定した場所に値を書き込む };
PlantUMLコード
@startuml rectangle hostenv { rectangle embedder interface funcs as funcs rectangle wasm { } wasm -up-( funcs embedder -down- funcs } @endum