如何在 WebAssembly 中创建和引用 table?

How can I create and reference a table in WebAssembly?

有人可以分享语法来创建一个 table 静态地包含某些元素并引用它吗?我找不到这样做的任何 Web 程序集代码。

还有一些细节,比如我可以有多个列,如果索引不在 table 中会发生什么等会有所帮助吗?

在文本格式中,table 声明为 table 类型,即(初始)大小和元素类型——目前 anyfunc 是唯一支持的类型:

(table $name 100 anyfunc)

A table 可以通过提供一个或多个 element segments:

在模块中初始化
(elem (i32.const 0) $f1 $f2 $f3)

其中表达式表示偏移量,后面是模块中定义的函数列表。

使用这种 table 的唯一方法是通过 call_indirect 指令:

(call_indirect (type $t) (arg1) ... (argn) (index))

您可以在 Wasm 规范测试套件中找到一些简单的示例,例如这里:

https://github.com/WebAssembly/spec/blob/master/test/core/elem.wast

A table 没有列(尽管将来 Wasm 可能允许多个 table)。至于 execution,越界访问会导致陷阱,访问未初始化的索引或类型不匹配也是如此。