1+ Version 1.54.0 (2021-07-29)
2+ ============================
3+
4+ Language
5+ -----------------------
6+
7+ - [You can now use macros for values in built-in attribute macros.][83366]
8+ While a seemingly minor addition on its own, this enables a lot of
9+ powerful functionality when combined correctly. Most notably you can
10+ now include external documentation in your crate by writing the following.
11+ ```rust
12+ #![doc = include_str!("README.md")]
13+ ```
14+ You can also use this to include auto-generated modules:
15+ ```rust
16+ #[path = concat!(env!("OUT_DIR"), "/generated.rs")]
17+ mod generated;
18+ ```
19+
20+ - [You can now cast between unsized slice types (and types which contain
21+ unsized slices) in `const fn`.][85078]
22+ - [You can now use multiple generic lifetimes with `impl Trait` where the
23+ lifetimes don't explicitly outlive another.][84701] In code this means
24+ that you can now have `impl Trait<'a, 'b>` where as before you could
25+ only have `impl Trait<'a, 'b> where 'b: 'a`.
26+
27+ Compiler
28+ -----------------------
29+
30+ - [Rustc will now search for custom JSON targets in
31+ `/lib/rustlib/<target-triple>/target.json` where `/` is the "sysroot"
32+ directory.][83800] You can find your sysroot directory by running
33+ `rustc --print sysroot`.
34+ - [Added `wasm` as a `target_family` for WebAssembly platforms.][84072]
35+ - [You can now use `#[target_feature]` on safe functions when targeting
36+ WebAssembly platforms.][84988]
37+ - [Improved debugger output for enums on Windows MSVC platforms.][85292]
38+ - [Added tier 3\* support for `bpfel-unknown-none`
39+ and `bpfeb-unknown-none`.][79608]
40+
41+ \* Refer to Rust's [platform support page][platform-support-doc] for more
42+ information on Rust's tiered platform support.
43+
44+ Libraries
45+ -----------------------
46+
47+ - [`panic::panic_any` will now `#[track_caller]`.][85745]
48+ - [Added `OutOfMemory` as a variant of `io::ErrorKind`.][84744]
49+ - [ `proc_macro::Literal` now implements `FromStr`.][84717]
50+ - [The implementations of vendor intrinsics in core::arch have been
51+ significantly refactored.][83278] The main user-visible changes are
52+ a 50% reduction in the size of libcore.rlib and stricter validation
53+ of constant operands passed to intrinsics. The latter is technically
54+ a breaking change, but allows Rust to more closely match the C vendor
55+ intrinsics API.
56+
57+ Stabilized APIs
58+ ---------------
59+
60+ - [`BTreeMap::into_keys`]
61+ - [`BTreeMap::into_values`]
62+ - [`HashMap::into_keys`]
63+ - [`HashMap::into_values`]
64+ - [`arch::wasm32`]
65+ - [`VecDeque::binary_search`]
66+ - [`VecDeque::binary_search_by`]
67+ - [`VecDeque::binary_search_by_key`]
68+ - [`VecDeque::partition_point`]
69+
70+ Cargo
71+ -----
72+
73+ - [Added the `--prune <spec>` option to `cargo-tree` to remove a package from
74+ the dependency graph.][cargo/9520]
75+ - [Added the `--depth` option to `cargo-tree` to print only to a certain depth
76+ in the tree ][cargo/9499]
77+ - [Added the `no-proc-macro` value to `cargo-tree --edges` to hide procedural
78+ macro dependencies.][cargo/9488]
79+ - [A new environment variable named `CARGO_TARGET_TMPDIR` is available.][cargo/9375]
80+ This variable points to a directory that integration tests and benches
81+ can use as a "scratchpad" for testing filesystem operations.
82+
83+ Compatibility Notes
84+ -------------------
85+ - [Mixing Option and Result via `?` is no longer permitted in closures for inferred types.][86831]
86+ - [Previously unsound code is no longer permitted where different constructors in branches
87+ could require different lifetimes.][85574]
88+ - As previously mentioned the [`std::arch` instrinsics now uses stricter const checking][83278]
89+ than before and may reject some previously accepted code.
90+ - [`i128` multiplication on Cortex M0+ platforms currently unconditionally causes overflow
91+ when compiled with `codegen-units = 1`.][86063]
92+
93+ [85574]: https://github.com/rust-lang/rust/issues/85574
94+ [86831]: https://github.com/rust-lang/rust/issues/86831
95+ [86063]: https://github.com/rust-lang/rust/issues/86063
96+ [86831]: https://github.com/rust-lang/rust/issues/86831
97+ [79608]: https://github.com/rust-lang/rust/pull/79608
98+ [84988]: https://github.com/rust-lang/rust/pull/84988
99+ [84701]: https://github.com/rust-lang/rust/pull/84701
100+ [84072]: https://github.com/rust-lang/rust/pull/84072
101+ [85745]: https://github.com/rust-lang/rust/pull/85745
102+ [84744]: https://github.com/rust-lang/rust/pull/84744
103+ [85078]: https://github.com/rust-lang/rust/pull/85078
104+ [84717]: https://github.com/rust-lang/rust/pull/84717
105+ [83800]: https://github.com/rust-lang/rust/pull/83800
106+ [83366]: https://github.com/rust-lang/rust/pull/83366
107+ [83278]: https://github.com/rust-lang/rust/pull/83278
108+ [85292]: https://github.com/rust-lang/rust/pull/85292
109+ [cargo/9520]: https://github.com/rust-lang/cargo/pull/9520
110+ [cargo/9499]: https://github.com/rust-lang/cargo/pull/9499
111+ [cargo/9488]: https://github.com/rust-lang/cargo/pull/9488
112+ [cargo/9375]: https://github.com/rust-lang/cargo/pull/9375
113+ [`BTreeMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_keys
114+ [`BTreeMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_values
115+ [`HashMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_keys
116+ [`HashMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_values
117+ [`arch::wasm32`]: https://doc.rust-lang.org/core/arch/wasm32/index.html
118+ [`VecDeque::binary_search`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search
119+ [`VecDeque::binary_search_by`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by
120+
121+ [`VecDeque::binary_search_by_key`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by_key
122+
123+ [`VecDeque::partition_point`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.partition_point
124+
1125Version 1.53.0 (2021-06-17)
2126============================
3127
@@ -81,13 +205,6 @@ Stabilised APIs
81205- [`Vec::extend_from_within`]
82206- [`array::from_mut`]
83207- [`array::from_ref`]
84- - [`char::MAX`]
85- - [`char::REPLACEMENT_CHARACTER`]
86- - [`char::UNICODE_VERSION`]
87- - [`char::decode_utf16`]
88- - [`char::from_digit`]
89- - [`char::from_u32_unchecked`]
90- - [`char::from_u32`]
91208- [`cmp::max_by_key`]
92209- [`cmp::max_by`]
93210- [`cmp::min_by_key`]
@@ -120,6 +237,7 @@ Compatibility Notes
120237 In particular, this was known to be a problem in the `lexical-core` crate,
121238 but they have published fixes for semantic versions 0.4 through 0.7. To
122239 update this dependency alone, use `cargo update -p lexical-core`.
240+ - Incremental compilation remains off by default, unless one uses the `RUSTC_FORCE_INCREMENTAL=1` environment variable added in 1.52.1.
123241
124242Internal Only
125243-------------
@@ -156,13 +274,6 @@ related tools.
156274[cargo/9298]: https://github.com/rust-lang/cargo/pull/9298
157275[cargo/9282]: https://github.com/rust-lang/cargo/pull/9282
158276[cargo/9392]: https://github.com/rust-lang/cargo/pull/9392
159- [`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX
160- [`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER
161- [`char::UNICODE_VERSION`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.UNICODE_VERSION
162- [`char::decode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.decode_utf16
163- [`char::from_u32`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32
164- [`char::from_u32_unchecked`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32_unchecked
165- [`char::from_digit`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_digit
166277[`AtomicBool::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicBool.html#method.fetch_update
167278[`AtomicPtr::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicPtr.html#method.fetch_update
168279[`BTreeMap::retain`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.retain
@@ -324,6 +435,7 @@ Compatibility Notes
324435- [Rustc now catches more cases of `pub_use_of_private_extern_crate`][80763]
325436- [Changes in how proc macros handle whitespace may lead to panics when used
326437 with older `proc-macro-hack` versions. A `cargo update` should be sufficient to fix this in all cases.][84136]
438+ - [Turn `#[derive]` into a regular macro attribute][79078]
327439
328440[84136]: https://github.com/rust-lang/rust/issues/84136
329441[80763]: https://github.com/rust-lang/rust/pull/80763
@@ -350,6 +462,7 @@ Compatibility Notes
350462[78429]: https://github.com/rust-lang/rust/pull/78429
351463[82733]: https://github.com/rust-lang/rust/pull/82733
352464[82594]: https://github.com/rust-lang/rust/pull/82594
465+ [79078]: https://github.com/rust-lang/rust/pull/79078
353466[cargo/9181]: https://github.com/rust-lang/cargo/pull/9181
354467[`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX
355468[`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER
@@ -1760,6 +1873,7 @@ Language
17601873- [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
17611874 that you can create an enum that has the exact layout and ABI of the type
17621875 it contains.
1876+ - [You can now use outer attribute procedural macros on inline modules.][64273]
17631877- [There are some *syntax-only* changes:][67131]
17641878 - `default` is syntactically allowed before items in `trait` definitions.
17651879 - Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
@@ -1821,6 +1935,7 @@ Compatibility Notes
18211935[67935]: https://github.com/rust-lang/rust/pull/67935/
18221936[68339]: https://github.com/rust-lang/rust/pull/68339/
18231937[68122]: https://github.com/rust-lang/rust/pull/68122/
1938+ [64273]: https://github.com/rust-lang/rust/pull/64273/
18241939[67712]: https://github.com/rust-lang/rust/pull/67712/
18251940[67887]: https://github.com/rust-lang/rust/pull/67887/
18261941[67131]: https://github.com/rust-lang/rust/pull/67131/
0 commit comments