Skip to content

Commit 6c09a68

Browse files
rossmacarthurmark-i-m
authored andcommitted
Rewrap stability.md to column 79
1 parent 3e7993a commit 6c09a68

File tree

1 file changed

+44
-39
lines changed

1 file changed

+44
-39
lines changed

src/stability.md

+44-39
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
# Stability attributes
22

3-
This section is about the stability attributes and schemes that allow stable APIs to use unstable
4-
APIs internally in the rustc standard library.
3+
This section is about the stability attributes and schemes that allow stable
4+
APIs to use unstable APIs internally in the rustc standard library.
55

6-
For instructions on stabilizing a language feature see
7-
[Stabilizing Features](./stabilization_guide.md).
6+
For instructions on stabilizing a language feature see [Stabilizing
7+
Features](./stabilization_guide.md).
88

99
## unstable
1010

11-
The `#[unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")]` attribute explicitly
12-
marks an item as unstable. Items that are marked as "unstable" cannot be used
13-
without a corresponding `#![feature]` attribute on the crate, even on a
14-
nightly compiler. This restriction only applies across crate boundaries, unstable
15-
items may be used within the crate they are defined.
11+
The `#[unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")]`
12+
attribute explicitly marks an item as unstable. Items that are marked as
13+
"unstable" cannot be used without a corresponding `#![feature]` attribute on
14+
the crate, even on a nightly compiler. This restriction only applies across
15+
crate boundaries, unstable items may be used within the crate they are defined.
1616

17-
The `unstable` attribute infects all sub-items, where the attribute doesn't have to be
18-
reapplied. So if you apply this to a module, all items in the module will be unstable.
17+
The `unstable` attribute infects all sub-items, where the attribute doesn't
18+
have to be reapplied. So if you apply this to a module, all items in the module
19+
will be unstable.
1920

20-
You can make specific sub-items stable by using the `#[stable]` attribute on them.
21-
The stability scheme works similarly to how `pub` works. You can have public functions of
22-
nonpublic modules and you can have stable functions in unstable modules or vice versa.
21+
You can make specific sub-items stable by using the `#[stable]` attribute on
22+
them. The stability scheme works similarly to how `pub` works. You can have
23+
public functions of nonpublic modules and you can have stable functions in
24+
unstable modules or vice versa.
2325

2426
Note, however, that due to a [rustc bug], stable items inside unstable modules
2527
*are* available to stable code in that location! So, for example, stable code
26-
can import `core::intrinsics::transmute` even though `intrinsics` is an unstable
27-
module. Thus, this kind of nesting should be avoided when possible.
28+
can import `core::intrinsics::transmute` even though `intrinsics` is an
29+
unstable module. Thus, this kind of nesting should be avoided when possible.
2830

2931
The `unstable` attribute may also have the `soft` value, which makes it a
3032
future-incompatible deny-by-default lint instead of a hard error. This is used
@@ -35,29 +37,32 @@ prevents breaking dependencies by leveraging Cargo's lint capping.
3537

3638
## stable
3739

38-
The `#[stable(feature = "foo", "since = "1.420.69")]` attribute explicitly marks an item as
39-
stabilized. To do this, follow the instructions in
40+
The `#[stable(feature = "foo", "since = "1.420.69")]` attribute explicitly
41+
marks an item as stabilized. To do this, follow the instructions in
4042
[Stabilizing Features](./stabilization_guide.md).
4143

4244
Note that stable functions may use unstable things in their body.
4345

4446
## allow_internal_unstable
4547

46-
Macros, compiler desugarings and `const fn`s expose their bodies to the call site. To
47-
work around not being able to use unstable things in the standard library's macros, there's the
48-
`#[allow_internal_unstable(feature1, feature2)]` attribute that whitelists the given features for
49-
usage in stable macros or `const fn`s.
50-
51-
Note that `const fn`s are even more special in this regard. You can't just whitelist any feature,
52-
the features need an implementation in `qualify_min_const_fn.rs`. For example the `const_fn_union`
53-
feature gate allows accessing fields of unions inside stable `const fn`s. The rules for when it's
54-
ok to use such a feature gate are that behavior matches the runtime behavior of the same code
55-
(see also [this blog post][blog]). This means that you may not create a
56-
`const fn` that e.g. transmutes a memory address to an integer, because the addresses of things
57-
are nondeterministic and often unknown at compile-time.
58-
59-
Always ping @oli-obk, @RalfJung, and @Centril if you are adding more `allow_internal_unstable`
60-
attributes to any `const fn`
48+
Macros, compiler desugarings and `const fn`s expose their bodies to the call
49+
site. To work around not being able to use unstable things in the standard
50+
library's macros, there's the `#[allow_internal_unstable(feature1, feature2)]`
51+
attribute that whitelists the given features for usage in stable macros or
52+
`const fn`s.
53+
54+
Note that `const fn`s are even more special in this regard. You can't just
55+
whitelist any feature, the features need an implementation in
56+
`qualify_min_const_fn.rs`. For example the `const_fn_union` feature gate allows
57+
accessing fields of unions inside stable `const fn`s. The rules for when it's
58+
ok to use such a feature gate are that behavior matches the runtime behavior of
59+
the same code (see also [this blog post][blog]). This means that you may not
60+
create a `const fn` that e.g. transmutes a memory address to an integer,
61+
because the addresses of things are nondeterministic and often unknown at
62+
compile-time.
63+
64+
Always ping @oli-obk, @RalfJung, and @Centril if you are adding more
65+
`allow_internal_unstable` attributes to any `const fn`
6166

6267
## staged_api
6368

@@ -83,13 +88,13 @@ item must also have a `stable` or `unstable` attribute.
8388
)]
8489
```
8590

86-
The `suggestion` field is optional. If given, it should be a string that can
87-
be used as a machine-applicable suggestion to correct the warning. This is
88-
typically used when the identifier is renamed, but no other significant
89-
changes are necessary.
91+
The `suggestion` field is optional. If given, it should be a string that can be
92+
used as a machine-applicable suggestion to correct the warning. This is
93+
typically used when the identifier is renamed, but no other significant changes
94+
are necessary.
9095

91-
Another difference from the `deprecated` attribute is that the `since` field
92-
is actually checked against the current version of `rustc`. If `since` is in a
96+
Another difference from the `deprecated` attribute is that the `since` field is
97+
actually checked against the current version of `rustc`. If `since` is in a
9398
future version, then the `deprecated_in_future` lint is triggered which is
9499
default `allow`, but most of the standard library raises it to a warning with
95100
`#![warn(deprecated_in_future)]`.

0 commit comments

Comments
 (0)