33个版本 (稳定版)
新 4.3.6 | 2024年8月22日 |
---|---|
4.3.5 | 2024年7月16日 |
4.3.2 | 2024年6月11日 |
4.2.7 | 2024年3月19日 |
0.1.0 | 2021年4月1日 |
#1484 在 WebAssembly
每月112 次下载
用于 6 个crate(直接使用2个)
56KB
1K SLoC
Wasm接口
这是一个用于验证WebAssembly模块导入和导出的实验性crate。
目前,Wasm Interface提供
- 一种方便的文本格式,用于指定Wasm模块的要求
- 一种方便的方式来安全地组合接口(它确保没有冲突(允许重复,但它们必须一致))
- 验证模块是否符合要求
语法示例
以下是WASI当前版本的接口
(interface "wasi_unstable"
;; Here's a bunch of function imports!
(func (import "wasi_unstable" "args_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "args_sizes_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "clock_res_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "clock_time_get") (param i32 i32 i32) (result i32))
(func (import "wasi_unstable" "environ_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "environ_sizes_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_advise") (param i32 i64 i64 i32) (result i32))
(func (import "wasi_unstable" "fd_allocate") (param i32 i64 i64) (result i32))
(func (import "wasi_unstable" "fd_close") (param i32) (result i32))
(func (import "wasi_unstable" "fd_datasync") (param i32) (result i32))
(func (import "wasi_unstable" "fd_fdstat_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_fdstat_set_flags") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_fdstat_set_rights") (param i32 i64 i64) (result i32))
(func (import "wasi_unstable" "fd_filestat_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_filestat_set_size") (param i32 i64) (result i32))
(func (import "wasi_unstable" "fd_filestat_set_times") (param i32 i64 i64 i32) (result i32))
(func (import "wasi_unstable" "fd_pread") (param i32 i32 i32 i64 i32) (result i32))
(func (import "wasi_unstable" "fd_prestat_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_prestat_dir_name") (param i32 i32 i32) (result i32))
(func (import "wasi_unstable" "fd_pwrite") (param i32 i32 i32 i64 i32) (result i32))
(func (import "wasi_unstable" "fd_read") (param i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "fd_readdir") (param i32 i32 i32 i64 i32) (result i32))
(func (import "wasi_unstable" "fd_renumber") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_seek") (param i32 i64 i32 i32) (result i32))
(func (import "wasi_unstable" "fd_sync") (param i32) (result i32))
(func (import "wasi_unstable" "fd_tell") (param i32 i32) (result i32))
(func (import "wasi_unstable" "fd_write") (param i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_create_directory") (param i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_filestat_get") (param i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_filestat_set_times") (param i32 i32 i32 i32 i64 i64 i32) (result i32))
(func (import "wasi_unstable" "path_link") (param i32 i32 i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_open") (param i32 i32 i32 i32 i32 i64 i64 i32 i32) (result i32))
(func (import "wasi_unstable" "path_readlink") (param i32 i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_remove_directory") (param i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_rename") (param i32 i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_symlink") (param i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "path_unlink_file") (param i32 i32 i32) (result i32))
(func (import "wasi_unstable" "poll_oneoff") (param i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "proc_exit") (param i32))
(func (import "wasi_unstable" "proc_raise") (param i32) (result i32))
(func (import "wasi_unstable" "random_get") (param i32 i32) (result i32))
(func (import "wasi_unstable" "sched_yield") (result i32))
(func (import "wasi_unstable" "sock_recv") (param i32 i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "sock_send") (param i32 i32 i32 i32 i32) (result i32))
(func (import "wasi_unstable" "sock_shutdown") (param i32 i32) (result i32))
)
注意
- 允许存在多个
assert-import
和assert-export
声明。 - 注释(以
;
开头并结束于换行符)和空白字符在任意标记之间都是有效的
语义
模块使用的所有导入必须在接口中指定。
接口中的所有导出必须由模块导出。
因此,模块可能比接口有更多的导出或比接口指定的导入更少,但仍被视为有效。
其他
Wasm Interface的目的与提议的Wasm标准WebIDL略有不同,但在将来如果情况发生变化,可能会被它取代。
由于Rust中嵌套闭包的问题,wasm-interface
无法同时在稳定版编译并且有良好的错误报告。这个问题正在修复,wasm-interface
将更新以拥有更好的错误处理。
请参阅parser.rs
文件中的注释,其中包含BNF风格的语法。
欢迎提出建议、贡献和思考!这是一个处于早期阶段的实验,但我们希望与更广泛的社区合作,并与所有感兴趣的一方合作开发。
依赖项
~1.2–2.4MB
~50K SLoC