rust-lang / wg-cargo-std-aware

Repo for working on "std aware cargo"
138 stars 8 forks source link

Build the standard library with different cargo features #4

Open ehuss opened 5 years ago

ehuss commented 5 years ago

This is a "use case" issue to try to clarify and discuss a use case, and how it will be addressed.

There has been some interest in being able to pass different cargo feature flags to the standard library to change it some way; either to change the implementation, or to disable sections of the library.

This is unlikely to be possible with Cargo's current features system. There are some problems with backwards-compatibility, and generally the level of commitment to stabilize a feature flag would likely be extremely high.

Please leave a comment if you have any specific use cases to consider. Some that have come up in the past:

This issue is to explore possible features, how they can be expressed from Cargo, and whether or not it is feasible to accomplish in a stable way.

This is partially related to #8.

SimonSapin commented 5 years ago

If we expose some control over this, I think it will be limited to #[cfg(feature = "…")] like in "normal" dependency crates, not arbitrary #[cfg(…)] like the issue title and description suggest.

ehuss commented 5 years ago

If we expose some control over this, I think it will be limited to …

Yes, that is what I meant. I think this originally started as a broader thought about portability issues (cfg being influenced by target settings and rustc flags), but I didn't update the title when I narrowed it down.

ehuss commented 4 years ago

An experimental flag has been added to control the features used: docs, PR

Aaron1011 commented 3 years ago

Use case: Opt-in support for having RefCell capture backtraces for outstanding borrows, and print them when borrow()/borrow_mut() panics. See https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/Attaching.20backtraces.20to.20RefCell/near/226273614 for more details

macpp commented 2 years ago

I'm not sure if this is intended or accidental (i didn't see it mentioned in unstable docs or cargo test suite) but it is currently possible to specify features on libcore directly, like this : -Z build-std=std -Z build-std-features=core/debug_refcell. In the case of debug_refcell it is actually usefull, because this feature is currently not forwarded by libstd and libtest, so just using -Z build-std-features=debug_refcell will not work