WebAssembly有一个基于S-表达式的文本表示形式,设计为在文本编辑器,浏览器开发人员工具等中暴露的一个中间形式。本文解释了它是如何工作的一些内容以及如何使用可用的工具把文本格式文件转换为.wasm汇编格式文件。
注:文本格式文件通常被保存为.wat扩展名;有时.wast也被使用,它是说文件包含了额外的测试命令(断言等)并且它们不需要转换到.wasm中。
让我们看一个简单的例子——下面的程序从一个叫做imports的模块中导入了一个叫做imported_func的函数并且导出了一个叫做exported_func的函数:
(module
(func $i (import "imports" "imported_func") (param i32))
(func (export "exported_func")
i32.const 42
call $i
)
)
WebAssembly函数exported_func是被导出供我们的环境(比如,使用了WebAssembly模块的网络应用)使用。当被调用的时,它进而调用了一个被导入的叫做imported_func的函数并且向该函数传递了一个值(42)作为参数。
让我们尝试一下把前面提到的wat文本表示的例子转换为wasm汇编格式。
下一步,执行wast2wasm程序,把输入文件的路径传递给它,紧跟一个-o参数,然后是输出文件的路径:
wast2wasm simple.wat -o simple.wasm
该命令会把wasm输出到一个叫做simple.wasm的文件,该文件包含了.wasm汇编代码。
注:你可以使用wasm2wast工具把汇编代码转换为文本表示;例如,wasm2wast simple.wasm -o text.wat。
因为输出文件是基于汇编的,所以,它不能在常规的文本编辑器中查看。尽管如此,你可以使用wast2wasm工具的-v选项来查看。试试这个:
wast2wasm simple.wat -v
这会在终端产生一个如下所示的输出: