Skip to content

Commit 2dba276

Browse files
committed
Final amendments.
1 parent df1efff commit 2dba276

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

text/0000-language-semver.md

+24
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ relatively small, it could be an option to leave the "opt out"
144144
mechanism in place permanently. In either case, use of the "opt out"
145145
API would trigger the deprecation lint.
146146

147+
Note that we should make every effort to ensure that crates which
148+
employ this opt out can be used compatibly with crates that do not.
149+
147150
#### Changes that alter dynamic semantics versus typing rules
148151

149152
In some cases, fixing a bug may not cause crates to stop compiling,
@@ -266,6 +269,26 @@ observe on `crates.io` will be of the total breakage that will occur:
266269
it is certainly possible that all crates on `crates.io` work fine, but
267270
the change still breaks a large body of code we do not have access to.
268271

272+
**What attribute should we use to "opt out" of soundness changes?**
273+
The section on breaking changes indicated that it may sometimes be
274+
appropriate to includ an "opt out" that people can use to temporarily
275+
revert to older, unsound type rules, but did not specify precisely
276+
what that opt-out should look like. Ideally, we would identify a
277+
specific attribute in advance that will be used for such purposes. In
278+
the past, we have simply created ad-hoc attributes (e.g.,
279+
`#[old_orphan_check]`), but because custom attributes are forbidden by
280+
stable Rust, this has the unfortunate side-effect of meaning that code
281+
which opts out of the newer rules cannot be compiled on older
282+
compilers (even though it's using the older type system rules). If we
283+
introduce an attribute in advance we will not have this problem.
284+
285+
**Are there any other circumstances in which we might perform a
286+
breaking change?** In particular, it may happen from time to time that
287+
we wish to alter some detail of a stable component. If we believe that
288+
this change will not affect anyone, such a change may be worth doing,
289+
but we'll have to work out more precise guidelines. [RFC 1156] is an
290+
example.
291+
269292
[RFC 1105]: https://github.com/rust-lang/rfcs/pull/1105
270293
[RFC 320]: https://github.com/rust-lang/rfcs/pull/320
271294
[#744]: https://github.com/rust-lang/rfcs/issues/744
@@ -281,3 +304,4 @@ the change still breaks a large body of code we do not have access to.
281304
[RFC 560]: https://github.com/rust-lang/rfcs/pull/560
282305
[macro]: https://internals.rust-lang.org/t/pre-rfc-macro-improvements/2088
283306
[#24451]: https://github.com/rust-lang/rust/pull/24451
307+
[RFC 1156]: https://github.com/rust-lang/rfcs/pull/1156

0 commit comments

Comments
 (0)