WebAssembly中"type-checking"原理的混淆
Confusion of the "type-checking" principle in WebAssembly
我现在正在研究WebAssembly的类型检查原理,这里我不确定为什么值堆栈永远不会小于开始时的大小?测试用例如下:
i32.const 1
i32.const 2
block $main
i32.add
end
任何帮助将不胜感激!!谢谢!
您提供的代码片段在当前的 Wasm 中不 type-check。在块内,您无法访问在输入块之前压入堆栈的操作数。因此,您引用的描述是正确的。
但是,这是我们计划很快取消的限制,请参阅 proposal for multi-values。有了这个建议你可以写
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
(i32.add)
)
请注意,传入或传出块的任何操作数都需要显式类型注释。
我现在正在研究WebAssembly的类型检查原理,这里我不确定为什么值堆栈永远不会小于开始时的大小?测试用例如下:
i32.const 1
i32.const 2
block $main
i32.add
end
任何帮助将不胜感激!!谢谢!
您提供的代码片段在当前的 Wasm 中不 type-check。在块内,您无法访问在输入块之前压入堆栈的操作数。因此,您引用的描述是正确的。
但是,这是我们计划很快取消的限制,请参阅 proposal for multi-values。有了这个建议你可以写
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
(i32.add)
)
请注意,传入或传出块的任何操作数都需要显式类型注释。