@@ -44,12 +44,8 @@ prevents breaking dependencies by leveraging Cargo's lint capping.
4444[ rustc bug ] : https://github.com/rust-lang/rust/issues/15702
4545
4646## stable
47-
4847The ` #[stable(feature = "foo", "since = "1.420.69")] ` attribute explicitly
49- marks an item as stabilized. To do this, follow the instructions in
50- [ Stabilizing Features] ( ./stabilization_guide.md ) .
51-
52- Note that stable functions may use unstable things in their body.
48+ marks an item as stabilized. Note that stable functions may use unstable things in their body.
5349
5450## rustc_const_unstable
5551
@@ -72,6 +68,24 @@ even on an `unstable` function, if that function is called from another
7268Furthermore this attribute is needed to mark an intrinsic as callable from
7369` rustc_const_stable ` functions.
7470
71+ ## Stabilizing a library feature
72+
73+ To stabilize a feature, follow these steps:
74+
75+ 0 . Ask a ** @T-libs ** member to start an FCP on the tracking issue and wait for
76+ the FCP to complete (with ` disposition-merge ` ).
77+ 1 . Change ` #[unstable(...)] ` to ` #[stable(since = "version")] ` .
78+ ` version ` should be the * current nightly* , i.e. stable+2. You can see which version is
79+ the current nightly [ on Forge] ( https://forge.rust-lang.org/#current-release-versions ) .
80+ 2 . Remove ` #![feature(...)] ` from any test or doc-test for this API. If the feature is used in the
81+ compiler or tools, remove it from there as well.
82+ 3 . If applicable, change ` #[rustc_const_unstable(...)] ` to
83+ ` #[rustc_const_stable(since = "version")] ` .
84+ 4 . Open a PR against ` rust-lang/rust ` .
85+ - Add the appropriate labels: ` @rustbot modify labels: +T-libs ` .
86+ - Link to the tracking issue and say "Closes #XXXXX".
87+
88+ You can see an example of stabilizing a feature at [ #75132 ] ( https://github.com/rust-lang/rust/pull/75132 ) .
7589
7690## allow_internal_unstable
7791
@@ -130,35 +144,4 @@ default `allow`, but most of the standard library raises it to a warning with
130144` #![warn(deprecated_in_future)] ` .
131145
132146[ `deprecated` attribute ] : https://doc.rust-lang.org/reference/attributes/diagnostics.html#the-deprecated-attribute
133-
134- ## -Z force-unstable-if-unmarked
135-
136- The ` -Z force-unstable-if-unmarked ` flag has a variety of purposes to help
137- enforce that the correct crates are marked as unstable. It was introduced
138- primarily to allow rustc and the standard library to link to arbitrary crates
139- on crates.io which do not themselves use ` staged_api ` . ` rustc ` also relies on
140- this flag to mark all of its crates as unstable with the ` rustc_private `
141- feature so that each crate does not need to be carefully marked with
142- ` unstable ` .
143-
144- This flag is automatically applied to all of ` rustc ` and the standard library
145- by the bootstrap scripts. This is needed because the compiler and all of its
146- dependencies are shipped in the sysroot to all users.
147-
148- This flag has the following effects:
149-
150- - Marks the crate as "unstable" with the ` rustc_private ` feature if it is not
151- itself marked as stable or unstable.
152- - Allows these crates to access other forced-unstable crates without any need
153- for attributes. Normally a crate would need a ` #![feature(rustc_private)] `
154- attribute to use other unstable crates. However, that would make it
155- impossible for a crate from crates.io to access its own dependencies since
156- that crate won't have a ` feature(rustc_private) ` attribute, but * everything*
157- is compiled with ` -Z force-unstable-if-unmarked ` .
158-
159- Code which does not use ` -Z force-unstable-if-unmarked ` should include the
160- ` #![feature(rustc_private)] ` crate attribute to access these force-unstable
161- crates. This is needed for things that link ` rustc ` , such as ` miri ` , ` rls ` , or
162- ` clippy ` .
163-
164147[ blog ] : https://www.ralfj.de/blog/2018/07/19/const.html
0 commit comments