76个版本
0.12.21 | 2023年6月22日 |
---|---|
0.12.13 | 2023年5月27日 |
0.11.65 | 2023年3月7日 |
0.11.62 | 2022年10月13日 |
0.11.36 | 2022年7月8日 |
在 WebAssembly 中排名 21
每月下载量 108,801
在 192 个 Crates中使用(直接使用5个)
295KB
6K SLoC
WASI(X) 扩展规范
WASI(X) 由 wasix.org 维护。
WASIX(发音为“was-x”)的目的是扩展WASI提议并充分完成ABI,以便现在构建有用和高效的应用程序 - 它不是为了分叉而是作为WASI的超集。因此,它与WASI的preview1
版本保持完全的前向和后向兼容性,并长期稳定它。
WASIX发布在 crates.io
https://crates.io/crates/wasix
当前扩展
以下是在WASIX中支持的当前扩展,它们都经过了全面测试并集成到支持运行时(s)
- 包括join、signal和
getpid
在内的多线程的完全支持 pthreads
支持(现在已从WASI线程规范扩展而来)- 对套接字的完全支持(
socket
、bind
、connect
、resolve
)- IPv4、IPv6
- UDP、TCP
- 组播、任播
- 原始套接字
- 当前目录支持(
chdir
)与运行时集成 setjmp
/longjmp
支持(通过asyncify
在libc
中广泛使用)- 进程创建(
fork
和vfork
) - 子进程创建和等待(
exec
、wait
) - TTY支持
- 套接字和文件的异步轮询
- 管道和事件支持(
pipe
、event
) - DNS解析支持(
resolve
)
WASI(X) 贡献
欢迎提交扩展WASI(X)的pull request。只需在此处提交,我们将通过正常的GitHub流程进行审查。
https://github.com/orgs/wasix-org/repositories
长期支持
WASIX 将获得本社区的长期支持,并保证 ABI 的向下兼容性。支持此 ABI 的运行时将确保其稳定性,就像标准库和库也可以依赖这种相同的稳定性来连接点和建立联系。
重大错误修复和/或零日漏洞将在这里得到及时处理,同时将仔细考虑在不影响长期支持目标的情况下解决问题。
依赖图
使用方法
首先,您可以通过 Cargo.toml
依赖此 crate。
[dependencies]
wasix = "0.11"
接下来,您可以使用模块根目录中的 API,如下所示
fn main() {
let stdout = 1;
let message = "Hello, World!\n";
let data = [wasix::Ciovec {
buf: message.as_ptr(),
buf_len: message.len(),
}];
wasix::fd_write(stdout, &data).unwrap();
}
接下来,您可以使用像 cargo wasix
这样的工具来编译和运行您的项目
要使用 WASI 将 Rust 项目编译为 wasm,请使用 wasm32-wasix
目标,如下所示
$ wasmer run my-all
Compiling wasix v0.11.0
Compiling wasi v0.11.0+wasix-snapshot-preview1
Compiling wut v0.1.0 (/code)
Finished dev [unoptimized + debuginfo] target(s) in 0.34s
Running `/.cargo/bin/cargo-wasix target/wasm64-wasix/debug/wut.wasm`
Running `target/wasm64-wasix/debug/wut.wasm`
Hello, World!
开发
大多数 wasix
crate 由 witx-bindgen
工具生成,该工具位于 crates/witx-bindgen
,是 cargo 工作空间的一部分。
可以使用以下命令重新生成 src/lib_generated.rs
文件
cargo run -p witx-bindgen -- crates/witx-bindgen/WASI/phases/snapshot/witx/wasix_v1.witx > src/lib_generated.rs
注意,这使用 WASIX 标准仓库作为子模块。如果您在源树中没有这个子模块,请运行
git submodule update --init
许可证
本项目根据 Apache 2.0 许可证和 LLVM 例外条款许可。有关详细信息,请参阅 LICENSE。
贡献
除非您明确声明,否则您提交的任何贡献,根据 Apache-2.0 许可证定义,都应按照上述方式许可,而不附加任何额外的条款或条件。
依赖关系
~0.5–0.8MB
~15K SLoC