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

Download history 9079/week @ 2024-03-14 7841/week @ 2024-03-21 7703/week @ 2024-03-28 9295/week @ 2024-04-04 14202/week @ 2024-04-11 17478/week @ 2024-04-18 15567/week @ 2024-04-25 19132/week @ 2024-05-02 16804/week @ 2024-05-09 25487/week @ 2024-05-16 24864/week @ 2024-05-23 27620/week @ 2024-05-30 26892/week @ 2024-06-06 28182/week @ 2024-06-13 25841/week @ 2024-06-20 21549/week @ 2024-06-27

每月下载量 108,801
192 Crates中使用(直接使用5个)

Apache-2.0…

295KB
6K SLoC

WASI(X)

WASIX在WASI上添加扩展并由wasix.org社区管理。

WASI(X) API绑定库

Crates.io version Download docs.rs docs

WASI API绑定库

Crates.io version Download docs.rs docs

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线程规范扩展而来)
  • 对套接字的完全支持(socketbindconnectresolve
    • IPv4、IPv6
    • UDP、TCP
    • 组播、任播
    • 原始套接字
  • 当前目录支持(chdir)与运行时集成
  • setjmp / longjmp支持(通过asyncifylibc中广泛使用)
  • 进程创建(forkvfork
  • 子进程创建和等待(execwait
  • TTY支持
  • 套接字和文件的异步轮询
  • 管道和事件支持(pipeevent
  • DNS解析支持(resolve

WASI(X) 贡献

欢迎提交扩展WASI(X)的pull request。只需在此处提交,我们将通过正常的GitHub流程进行审查。

https://github.com/orgs/wasix-org/repositories

长期支持

WASIX 将获得本社区的长期支持,并保证 ABI 的向下兼容性。支持此 ABI 的运行时将确保其稳定性,就像标准库和库也可以依赖这种相同的稳定性来连接点和建立联系。

重大错误修复和/或零日漏洞将在这里得到及时处理,同时将仔细考虑在不影响长期支持目标的情况下解决问题。

依赖图

Dependencieis

使用方法

首先,您可以通过 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