内容提要
Rust 1.78将引入新的wasm32-wasip1和wasm32-wasip2目标,以支持WASI 0.2。建议WASI 0.1用户在Rust 1.84之前迁移到新的wasm32-wasip1目标。Rust计划在2024年内逐步完善wasm32-wasip2目标,并将wasm32-wasi目标更名为wasm32-wasip1。这些变化将为项目提供8个月的过渡期。
延伸解读
迁移时间线与关键节点
文章给出了明确的迁移时间表:Rust 1.78(2024年5月2日)引入wasm32-wasip1,1.81(2024年9月5日)开始对使用wasm32-wasi发出警告,1.84(2025年1月9日)移除该目标。用户有8个月过渡期,需在更新工具链时切换目标名称。注意wasm32-wasi-preview1-threads在1.78直接更名为wasm32-wasip1-threads,无过渡期。
wasm32-wasip2的现状与使用建议
wasm32-wasip2在Rust 1.78中以tier 3级别引入,初期缺少stdlib支持等许多预期功能,因此官方不建议立即使用。目前若想编译到WASI 0.2,推荐使用cargo-component工具,它通过转换层将WASI 0.1二进制转为WASI 0.2组件,虽有效率损失但已可用。Rust计划在2024年内完善该目标并提升至tier 2,届时cargo-component将原生支持。
命名变更的背景与影响
将wasm32-wasi重命名为wasm32-wasip1,是为了给未来的WASI 1.0目标腾出wasm32-wasi名称,并保持目标命名一致性。wasip1可读作“WASI 0.1”或“WASI预览1”,官方规范使用“预览”术语。这一变更仅影响WASI目标,wasm32-unknown-unknown和wasm32-unknown-emscripten不受影响。
Q&A
Rust 1.78将引入哪些新的目标?
Rust 1.78将引入wasm32-wasip1和wasm32-wasip2目标,以支持WASI 0.2。
WASI 0.1用户应该在何时迁移到新目标?
WASI 0.1用户应在Rust 1.84之前迁移到新的wasm32-wasip1目标。
wasm32-wasip1和wasm32-wasip2的区别是什么?
wasm32-wasip1是现有wasm32-wasi目标的重命名,而wasm32-wasip2是新的目标,初期缺少许多功能。
Rust计划如何完善wasm32-wasip2目标?
Rust计划在2024年内逐步完善wasm32-wasip2目标,最终将其提升为tier 2目标。
如何将WASI 0.1二进制文件转换为WASI 0.2组件?
用户可以使用cargo-component工具将WASI 0.1二进制文件转换为WASI 0.2组件。
wasm32-wasi目标何时会被移除?
wasm32-wasi目标将在Rust 1.84(2025年1月9日)被移除。