-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
wasip2 target should not conditionally feature gate stdlib APIs #130323
Copy link
Copy link
Open
Labels
C-bugCategory: This is a bug.Category: This is a bug.F-wasip2`#[feature(wasip2)]``#[feature(wasip2)]`O-wasiOperating system: Wasi, Webassembly System InterfaceOperating system: Wasi, Webassembly System InterfaceO-wasip2Operating System: WASI Preview 2 (*-wasip2)Operating System: WASI Preview 2 (*-wasip2)O-wasmTarget: WASM (WebAssembly), http://webassembly.org/Target: WASM (WebAssembly), http://webassembly.org/T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.Relevant to the library API team, which will review and decide on the PR/issue.
Metadata
Metadata
Assignees
Labels
C-bugCategory: This is a bug.Category: This is a bug.F-wasip2`#[feature(wasip2)]``#[feature(wasip2)]`O-wasiOperating system: Wasi, Webassembly System InterfaceOperating system: Wasi, Webassembly System InterfaceO-wasip2Operating System: WASI Preview 2 (*-wasip2)Operating System: WASI Preview 2 (*-wasip2)O-wasmTarget: WASM (WebAssembly), http://webassembly.org/Target: WASM (WebAssembly), http://webassembly.org/T-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.Relevant to the library API team, which will review and decide on the PR/issue.
Type
Fields
Give feedbackNo fields configured for Bug.
This was introduced in #119616 (cc @rylev)
Currently, any crate using
std::os::wasistuff needs to add a#![feature(wasip2)]if it is to be compiled with--target=wasm32-wasip2. This is due to this line:rust/library/std/src/os/wasi/mod.rs
Line 32 in 0307e40
This puts library authors targeting stable wasm stuff in an annoying situation of needing to add a feature gate to support downstream users who wish to use unstable wasm stuff (see servo/rust-url#960). This isn't really how feature gates should work: the entity using the feature should be the one opting in. I don't think any of the benefits of feature gates apply if every wasi-using dep in the ecosystem just slaps on a
#![cfg_attr(all(target_os = "wasi", target_env = "p2"), feature(wasip2))], which seems likely here.A somewhat legitimate reason I could see for having such a feature is if the wasip2 target is stable, but certain stdlib things are unstable under that target. It still has the same problems, and I'd argue a target with specially unstable stdlib APIs should not be considered stable, but at least there appears to be a meaningful thing that the stdlib feature gate is gating.
However, it appears to me that wasip2 is just unstable: what's the purpose of gating the stdlib API? If the goal is to gate the target, why not require
-Zunstable-optionsas we do for other CLI-level unstable things?