78 个版本 (47 个稳定版)

17.0.3 2024 年 4 月 11 日
17.0.2 2024 年 2 月 28 日
17.0.0 2024 年 1 月 25 日
16.0.0 2023 年 12 月 20 日
0.25.0 2021 年 3 月 16 日

1565WebAssembly

Download history 10169/week @ 2024-04-28 11231/week @ 2024-05-05 10359/week @ 2024-05-12 9846/week @ 2024-05-19 10096/week @ 2024-05-26 9760/week @ 2024-06-02 9635/week @ 2024-06-09 10001/week @ 2024-06-16 8506/week @ 2024-06-23 7986/week @ 2024-06-30 7881/week @ 2024-07-07 6831/week @ 2024-07-14 6228/week @ 2024-07-21 6738/week @ 2024-07-28 5482/week @ 2024-08-04 4947/week @ 2024-08-11

24,178 每月下载量
用于 31 个 Crates(直接使用 5 个)

Apache-2.0 WITH LLVM-exception

310KB
7.5K SLoC

使用 cap-std 的 Rust 中的 WASI 实现。


lib.rs:

wasi-cap-std-sync 包提供了 WasiFileWasiDir 的实现,这些类型以 cap_std::fs::{File, Dir} 的形式存在。这些类型提供了对 Unix 和 Windows 上本地文件系统的沙盒访问。

所有系统调用都隐藏在 cap-std 层级之后,唯一的例外是 sched 实现,它以单独的模块分别提供给 Unix 和 Windows。

任何 wasi_common::{WasiCtx, WasiCtxBuilder} 都与 wasi-cap-std-sync 包兼容。但是为了方便,wasi-cap-std-sync 提供了自己的 WasiCtxBuilder,该构建器与包的所有组件连接,即填充 WasiCtx::builder(...) 的所有参数,以 cap_std::fs::Dir 的形式提供 preopen_dir,并提供方便的方法来继承父进程的 stdio、args 和 env。

为了方便消费者,cap_std::fs::Dir 从这个包中重新导出。这样,如果消费者想要避免它,就不需要追踪此包使用的 cap_std 的确切版本。

我们预计在 wasi-cap-std-sync 和未来将出现的其他实现crate之间可能遇到长期兼容性问题的地方是 Sched 抽象。一旦我们可以基于 Rust Future 构建异步调度器,异步实现将能够相互操作,但同步调度器依赖于将 WasiFile 类型下转换为已知的具体类型(这反过来实现了 AsFd 以传递给 Unix poll,或者 Windows 上的类似特质)。

为什么这个实现以 -sync 结尾?因为异步(async)即将到来!异步实现最终可能依赖于 tokio 或其他相对较重的依赖,因此我们将保留同步实现,以便 wasi-common 用户有选择不引入异步运行时的选项。

依赖项

~17–29MB
~464K SLoC