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次
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")
;; ...
)
特别支持用于store
和load
操作的offset属性
(module
(func
(i32.store
offset=(i32.constexp
(i32.add
(i32.const 0x123)
(i32.const 0x100)))
(i32.const 4)))
;; ...
)
大小调整器 (size_adjust
)
自动调整memory
指令的大小,以确保有足够的空间来存储所有活动的数据段。(此功能也打算对tables
和elem
段执行相同的操作,但尚未实现。)
启动合并器 (start_merge
)
如果存在多个 (start)
指令(在多文件项目中很容易发生),SWL 将创建一个新的、单一的开始函数,该函数调用所有其他开始函数。
排序器(sort
)
对所有顶级模块段进行排序,以便导入项首先出现。这个特性主要存在是因为 wat2wasm
要求导入项首先出现。
许可证 Apache-2.0
依赖项
约5MB
约90K SLoC