Open3

NCCCコアライブラリ仕様(WASM)

okuokuokuoku

NCCC 仕様のライブラリを実行する実行環境に備えられるランタイムライブラリの仕様。

WASM専用のライブラリ(table、memoryとか)はそのうち分離したい。

okuokuokuoku

DLL インターフェース

NCCCコードを含むDLLがexportすべきシンボル。

(TBD)。

okuokuokuoku

1:WASM generic ランタイム

WASMの実行に必要なもの。将来的にはWASM固有のものは2番に逃したい ★。

1:1 wasm_library_info

[1 1 library_index] => [export_count import_count callinfo_count type_count]

export、import、callinfoとtypeのそれぞれの数を取得する。

1:2 wasm_set_bootstrap

[1 2 bootstrap_function_id context] => []

bootstrapライブラリのコンテキスト、つまり memory とか table の確保に使用するJavaScript側のクロージャを登録する。WASMライブラリの初期化前に必要とするライブラリは全て揃えておく必要がある。

1:3 wasm_init_module

[1 3] => []

set_bootstrap の完了通知。bootstrapライブラリを使用してモジュールを初期化する。

1:4 wasm_read_table

[1 4 instance_id index] => [res functype funcobj]

1:5 wasm_library_get_export

[1 5 idx] => [res name addr callinfoidx is_variable]

オブジェクトが呼び出し可能な場合は、 callinfoidx で引数と返却値の型情報を返却する。オブジェクトがデータの場合は、無引数 - 1値返しの関数としてcallinfoを返す。

1:6 wasm_library_get_import

[1 6 idx] => [res name0 name1 callinfoidx is_variable]

callinfoidx で引数と返却値の型情報を返却する。 WebAssembly MVPでは、全てのimportは呼び出し可能でなければならない。

1:7 wasm_library_set_import

[1 7 idx dispatch context_or_value] => [res]

(Jan20: 全てのimportが別々のdispatchを持てるようにした。一部をWASMで実装するとかしたいとき用)

1:8 wasm_callinfo_get_counts

[1 8 idx] => [res argcount retcount]

callinfoのサイズを得る。WASM MVPでは全ての関数は固定長引数となる。WASM Multi-Value提案が実装されると、 retcount > 1 が有り得る。

1:9 wasm_callinfo_get_types

[1 9 idx] => [res argcount retcount args ... rets ...]

呼び出しの引数情報を得る。WebAssembly の呼び出しには整数巾の概念はあるが符号の有無は保持されない。

https://webassembly.github.io/spec/core/syntax/types.html#value-types

valtype::=i32 | i64 | f32 | f64

これではJavaScript側に負値整数が返却できない(または全ての整数を符号付と見做すしかない)ので微妙に悩みどころと言える。

1:10 wasm_typebridge_get_counts

[1 10 idx] => [res argcount retcount]

1:11 wasm_typebridge_get_types

[1 11 idx] => [res stubctx argcount retcount args ... rets ...]

1:12 wasm_init_memory

[1 12 current_pages max_pages native_addr] => [instance_id]

JavaScript側でmemoryインスタンスを作成する場合に使用する。

1:13 wasm_init_table

[1 13 elements max_elements] => [instance_id]

JavaScript側でtableインスタンスを作成する場合に使用する。