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 日 |
1565 在 WebAssembly 中
24,178 每月下载量
用于 31 个 Crates(直接使用 5 个)
310KB
7.5K SLoC
使用 cap-std 的 Rust 中的 WASI 实现。
lib.rs
:
该 wasi-cap-std-sync
包提供了 WasiFile
和 WasiDir
的实现,这些类型以 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