我现在正在深入研究WebAssembly的类型检查原理,这里我不确定为什么值堆栈永远不会小于启动时的大小?测试用例如下所示:
i32.const 1
i32.const 2
block $main
i32.add
end
任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
您提供的代码段不会在当前的Wasm中进行类型检查。在块中,您无法访问在输入块之前在堆栈上推送的操作数。因此,您引用的描述是正确的。
但是,这是我们计划很快解除的限制,请参阅proposal for multi-values。有了这个提议,你可以写
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
(i32.add)
)
请注意,传入或传出块的任何操作数都需要显式类型注释。