#wasm-text #wat #wasm-binary #格式 #二进制文件 #导入 #工具

应用程序 愚蠢的wat链接器

一个使编写WebAssembly文本文件更简单的工具

10个版本 (6个破坏性更新)

0.7.1 2023年2月25日
0.6.1 2023年2月15日
0.6.0 2022年9月10日
0.3.0 2022年7月26日

WebAssembly类别中排名第383位

每月下载量30

Apache-2.0

95KB
3K SLoC

愚蠢的wat链接器

SWL是一个使编写WebAssembly文本文件更简单的工具。

它是未来兼容且简单的,因为它实际上并不理解WAT。相反,它是一个简化的S-表达式解析器,并使用表面级别的模式匹配来实现其功能。这样,WAT的未来版本和新语法的迭代不太可能破坏此工具。

WAT是WebAssembly文本格式,并在WebAssembly规范中定义。

使用方法

SWL可以从Cargo安装

$ cargo install silly-wat-linker

所有工作都在文本表示上进行。SWL可以调用wabt的wat2wasm来为您生成二进制文件。

$ silly-wat-linker ./main.wat      # Emits .wat test file
$ silly-wat-linker -c ./main.wat      # Emits .wasm binary

功能

SWL具有一些功能,可以帮助您在手动编写WAT文件时更轻松。大多数功能默认启用,但您可以使用--features标志显式选择要启用的功能。

# This will only run the `size_adjust` and `sort` feature.
$ silly-wat-linker --features size_adjust,sort ./my-file.wat

文件导入器 (import)

支持将另一个.wat文件导入到当前文件中。

(module
	(import "other_file.wat" (file))
	;; ...
)

数据导入器 (data_import)

允许您将其他文件作为数据段导入。

(module
	(data (i32.const 1024) (import "other_file.wat" (raw))
	;; ...
)

常量表达式 (constexpr)

向WAT添加常量表达式,允许在编译时评估复杂表达式。未使用常量表达式的全局变量仍然可用。

(module
	(global $DATA_PTR i32 (i32.const 0x4000))
	(data
		(i32.constexpr
			(i32.add
				(global.get $DATA_PTR)
				(i32.const 0x100)))
		"My data")
	;; ...
)

特别支持用于storeload操作的offset属性

(module
	(func
		(i32.store
			offset=(i32.constexp
				(i32.add
					(i32.const 0x123)
					(i32.const 0x100)))
			(i32.const 4)))
	;; ...
)

大小调整器 (size_adjust)

自动调整memory指令的大小,以确保有足够的空间来存储所有活动的数据段。(此功能也打算对tableselem段执行相同的操作,但尚未实现。)

启动合并器 (start_merge)

如果存在多个 (start) 指令(在多文件项目中很容易发生),SWL 将创建一个新的、单一的开始函数,该函数调用所有其他开始函数。

排序器(sort

对所有顶级模块段进行排序,以便导入项首先出现。这个特性主要存在是因为 wat2wasm 要求导入项首先出现。


许可证 Apache-2.0

依赖项

约5MB
约90K SLoC