混淆了WebAssembly中的“类型检查”原则

时间:2018-02-20 14:33:43

标签: webassembly

enter image description here

我现在正在深入研究WebAssembly的类型检查原理,这里我不确定为什么值堆栈永远不会小于启动时的大小?测试用例如下所示:

i32.const 1
i32.const 2
block $main
  i32.add
end

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

您提供的代码段不会在当前的Wasm中进行类型检查。在块中,您无法访问在输入块之前在堆栈上推送的操作数。因此,您引用的描述是正确的。

但是,这是我们计划很快解除的限制,请参阅proposal for multi-values。有了这个提议,你可以写

(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
  (i32.add)
)

请注意,传入或传出块的任何操作数都需要显式类型注释。