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
+
1
125
Version 1.53.0 (2021-06-17)
2
126
============================
3
127
@@ -81,13 +205,6 @@ Stabilised APIs
81
205
- [`Vec::extend_from_within`]
82
206
- [`array::from_mut`]
83
207
- [`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`]
91
208
- [`cmp::max_by_key`]
92
209
- [`cmp::max_by`]
93
210
- [`cmp::min_by_key`]
@@ -120,6 +237,7 @@ Compatibility Notes
120
237
In particular, this was known to be a problem in the `lexical-core` crate,
121
238
but they have published fixes for semantic versions 0.4 through 0.7. To
122
239
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.
123
241
124
242
Internal Only
125
243
-------------
@@ -156,13 +274,6 @@ related tools.
156
274
[cargo/9298]: https://github.com/rust-lang/cargo/pull/9298
157
275
[cargo/9282]: https://github.com/rust-lang/cargo/pull/9282
158
276
[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
166
277
[`AtomicBool::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicBool.html#method.fetch_update
167
278
[`AtomicPtr::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicPtr.html#method.fetch_update
168
279
[`BTreeMap::retain`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.retain
@@ -324,6 +435,7 @@ Compatibility Notes
324
435
- [Rustc now catches more cases of `pub_use_of_private_extern_crate`][80763]
325
436
- [Changes in how proc macros handle whitespace may lead to panics when used
326
437
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]
327
439
328
440
[84136]: https://github.com/rust-lang/rust/issues/84136
329
441
[80763]: https://github.com/rust-lang/rust/pull/80763
@@ -350,6 +462,7 @@ Compatibility Notes
350
462
[78429]: https://github.com/rust-lang/rust/pull/78429
351
463
[82733]: https://github.com/rust-lang/rust/pull/82733
352
464
[82594]: https://github.com/rust-lang/rust/pull/82594
465
+ [79078]: https://github.com/rust-lang/rust/pull/79078
353
466
[cargo/9181]: https://github.com/rust-lang/cargo/pull/9181
354
467
[`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX
355
468
[`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER
@@ -1760,6 +1873,7 @@ Language
1760
1873
- [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
1761
1874
that you can create an enum that has the exact layout and ABI of the type
1762
1875
it contains.
1876
+ - [You can now use outer attribute procedural macros on inline modules.][64273]
1763
1877
- [There are some *syntax-only* changes:][67131]
1764
1878
- `default` is syntactically allowed before items in `trait` definitions.
1765
1879
- Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
@@ -1821,6 +1935,7 @@ Compatibility Notes
1821
1935
[67935]: https://github.com/rust-lang/rust/pull/67935/
1822
1936
[68339]: https://github.com/rust-lang/rust/pull/68339/
1823
1937
[68122]: https://github.com/rust-lang/rust/pull/68122/
1938
+ [64273]: https://github.com/rust-lang/rust/pull/64273/
1824
1939
[67712]: https://github.com/rust-lang/rust/pull/67712/
1825
1940
[67887]: https://github.com/rust-lang/rust/pull/67887/
1826
1941
[67131]: https://github.com/rust-lang/rust/pull/67131/
0 commit comments