1
+ Version 1.51.0 (2021-03-25)
2
+ ============================
3
+
4
+ Language
5
+ --------
6
+ - [You can now parameterize items such as functions, traits, and `struct`s by constant
7
+ values in addition to by types and lifetimes.][79135] Also known as "const generics"
8
+ E.g. you can now write the following. Note: Only values of primitive integers,
9
+ `bool`, or `char` types are currently permitted.
10
+ ```rust
11
+ struct GenericArray<T, const LENGTH: usize> {
12
+ inner: [T; LENGTH]
13
+ }
14
+
15
+ impl<T, const LENGTH: usize> GenericArray<T, LENGTH> {
16
+ const fn last(&self) -> Option<&T> {
17
+ if LENGTH == 0 {
18
+ None
19
+ } else {
20
+ Some(&self.inner[LENGTH - 1])
21
+ }
22
+ }
23
+ }
24
+ ```
25
+
26
+
27
+ Compiler
28
+ --------
29
+
30
+ - [Added the `-Csplit-debuginfo` codegen option for macOS platforms.][79570]
31
+ This option controls whether debug information is split across multiple files
32
+ or packed into a single file. **Note** This option is unstable on other platforms.
33
+ - [Added tier 3\* support for `aarch64_be-unknown-linux-gnu`,
34
+ `aarch64-unknown-linux-gnu_ilp32`, and `aarch64_be-unknown-linux-gnu_ilp32` targets.][81455]
35
+ - [Added tier 3 support for `i386-unknown-linux-gnu` and `i486-unknown-linux-gnu` targets.][80662]
36
+ - [The `target-cpu=native` option will now detect individual features of CPUs.][80749]
37
+ - [Rust now uses `inline-asm` for stack probes when used with LLVM 11.0.1+][77885]
38
+
39
+ \* Refer to Rust's [platform support page][forge-platform-support] for more
40
+ information on Rust's tiered platform support.
41
+
42
+ Libraries
43
+ ---------
44
+
45
+ - [`Box::downcast` is now also implemented for any `dyn Any + Send + Sync` object.][80945]
46
+ - [`str` now implements `AsMut<str>`.][80279]
47
+ - [`u64` and `u128` now implement `From<char>`.][79502]
48
+ - [`Error` is now implemented for `&T` where `T` implements `Error`.][75180]
49
+ - [`Poll::{map_ok, map_err}` are now implemented for `Poll<Option<Result<T, E>>>`.][80968]
50
+ - [`unsigned_abs` is now implemented for all signed integer types.][80959]
51
+ - [`io::Empty` now implements `io::Seek`.][78044]
52
+ - [`rc::Weak<T>` and `sync::Weak<T>`'s methods such as `as_ptr` are now implemented for
53
+ `T: ?Sized` types.][80764]
54
+
55
+ Stabilized APIs
56
+ ---------------
57
+
58
+ - [`Arc::decrement_strong_count`]
59
+ - [`Arc::increment_strong_count`]
60
+ - [`Once::call_once_force`]
61
+ - [`Peekable::next_if_eq`]
62
+ - [`Peekable::next_if`]
63
+ - [`Seek::stream_position`]
64
+ - [`array::IntoIter`]
65
+ - [`panic::panic_any`]
66
+ - [`ptr::addr_of!`]
67
+ - [`ptr::addr_of_mut!`]
68
+ - [`slice::fill_with`]
69
+ - [`slice::split_inclusive_mut`]
70
+ - [`slice::split_inclusive`]
71
+ - [`slice::strip_prefix`]
72
+ - [`slice::strip_suffix`]
73
+ - [`str::split_inclusive`]
74
+ - [`sync::OnceState`]
75
+ - [`task::Wake`]
76
+
77
+ Cargo
78
+ -----
79
+ - [Added the `split-debuginfo` profile option to control the -Csplit-debuginfo
80
+ codegen option.][cargo/9112]
81
+ - [Added the `resolver` field to `Cargo.toml` to enable the new feature resolver
82
+ and CLI option behavior.][cargo/8997] Version 2 of the feature resolver will try
83
+ to avoid unifying features of dependencies where that unification could be unwanted.
84
+ Such as using the same dependency with a `std` feature in a build scripts and
85
+ proc-macros, while using the `no-std` feature in the final binary. See the
86
+ [Cargo book documentation][feature-resolver@2.0] for more information on the feature.
87
+
88
+ Rustdoc
89
+ -------
90
+
91
+ - [Rustdoc will now include documentation for methods available from `Deref` traits.][80653]
92
+ - [You can now provide a `--default-theme` flag which sets the default theme to use for
93
+ documentation.][79642]
94
+
95
+ Various improvements to intra-doc links:
96
+
97
+ - [You can link to non-path primitives such as `slice`.][80181]
98
+ - [You can link to associated items.][74489]
99
+ - [You can now include generic parameters when linking to items, like `Vec<T>`.][76934]
100
+
101
+ Misc
102
+ ----
103
+ - [You can now pass `--include-ignored` to tests (e.g. with
104
+ `cargo test -- --include-ignored`) to include testing tests marked `#[ignore]`.][80053]
105
+
106
+ Compatibility Notes
107
+ -------------------
108
+
109
+ - [WASI platforms no longer use the `wasm-bindgen` ABI, and instead use the wasm32 ABI.][79998]
110
+ - [`rustc` no longer promotes division, modulo and indexing operations to `const` that
111
+ could fail.][80579]
112
+ - [The minimum version of glibc for the following platforms has been bumped to version 2.31
113
+ for the distributed artifacts.][81521]
114
+ - `armv5te-unknown-linux-gnueabi`
115
+ - `sparc64-unknown-linux-gnu`
116
+ - `thumbv7neon-unknown-linux-gnueabihf`
117
+ - `armv7-unknown-linux-gnueabi`
118
+ - `x86_64-unknown-linux-gnux32`
119
+
120
+ Internal Only
121
+ -------------
122
+
123
+ - [Consistently avoid constructing optimized MIR when not doing codegen][80718]
124
+
125
+ [79135]: https://github.com/rust-lang/rust/pull/79135
126
+ [74489]: https://github.com/rust-lang/rust/pull/74489
127
+ [76934]: https://github.com/rust-lang/rust/pull/76934
128
+ [79570]: https://github.com/rust-lang/rust/pull/79570
129
+ [80181]: https://github.com/rust-lang/rust/pull/80181
130
+ [79642]: https://github.com/rust-lang/rust/pull/79642
131
+ [80945]: https://github.com/rust-lang/rust/pull/80945
132
+ [80279]: https://github.com/rust-lang/rust/pull/80279
133
+ [80053]: https://github.com/rust-lang/rust/pull/80053
134
+ [79502]: https://github.com/rust-lang/rust/pull/79502
135
+ [75180]: https://github.com/rust-lang/rust/pull/75180
136
+ [79135]: https://github.com/rust-lang/rust/pull/79135
137
+ [81521]: https://github.com/rust-lang/rust/pull/81521
138
+ [80968]: https://github.com/rust-lang/rust/pull/80968
139
+ [80959]: https://github.com/rust-lang/rust/pull/80959
140
+ [80718]: https://github.com/rust-lang/rust/pull/80718
141
+ [80653]: https://github.com/rust-lang/rust/pull/80653
142
+ [80579]: https://github.com/rust-lang/rust/pull/80579
143
+ [79998]: https://github.com/rust-lang/rust/pull/79998
144
+ [78044]: https://github.com/rust-lang/rust/pull/78044
145
+ [81455]: https://github.com/rust-lang/rust/pull/81455
146
+ [80764]: https://github.com/rust-lang/rust/pull/80764
147
+ [80749]: https://github.com/rust-lang/rust/pull/80749
148
+ [80662]: https://github.com/rust-lang/rust/pull/80662
149
+ [77885]: https://github.com/rust-lang/rust/pull/77885
150
+ [cargo/8997]: https://github.com/rust-lang/cargo/pull/8997
151
+ [cargo/9112]: https://github.com/rust-lang/cargo/pull/9112
152
+ [feature-resolver@2.0]: https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2
153
+ [`Once::call_once_force`]: https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.call_once_force
154
+ [`sync::OnceState`]: https://doc.rust-lang.org/stable/std/sync/struct.OnceState.html
155
+ [`panic::panic_any`]: https://doc.rust-lang.org/stable/std/panic/fn.panic_any.html
156
+ [`slice::strip_prefix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
157
+ [`slice::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
158
+ [`Arc::increment_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.increment_strong_count
159
+ [`Arc::decrement_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.decrement_strong_count
160
+ [`slice::fill_with`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.fill_with
161
+ [`ptr::addr_of!`]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of.html
162
+ [`ptr::addr_of_mut!`]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of_mut.html
163
+ [`array::IntoIter`]: https://doc.rust-lang.org/nightly/std/array/struct.IntoIter.html
164
+ [`slice::split_inclusive`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive
165
+ [`slice::split_inclusive_mut`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive_mut
166
+ [`str::split_inclusive`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_inclusive
167
+ [`task::Wake`]: https://doc.rust-lang.org/nightly/std/task/trait.Wake.html
168
+ [`Seek::stream_position`]: https://doc.rust-lang.org/nightly/std/io/trait.Seek.html#method.stream_position
169
+ [`Peekable::next_if`]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if
170
+ [`Peekable::next_if_eq`]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if_eq
171
+
1
172
Version 1.50.0 (2021-02-11)
2
173
============================
3
174
@@ -12,7 +183,6 @@ Compiler
12
183
- [Added tier 3\* support for the `armv5te-unknown-linux-uclibceabi` target.][78142]
13
184
- [Added tier 3 support for the `aarch64-apple-ios-macabi` target.][77484]
14
185
- [The `x86_64-unknown-freebsd` is now built with the full toolset.][79484]
15
- - [Dropped support for all cloudabi targets.][78439]
16
186
17
187
\* Refer to Rust's [platform support page][forge-platform-support] for more
18
188
information on Rust's tiered platform support.
@@ -43,23 +213,6 @@ The following previously stable methods are now `const`.
43
213
44
214
- [`IpAddr::is_ipv4`]
45
215
- [`IpAddr::is_ipv6`]
46
- - [`IpAddr::is_unspecified`]
47
- - [`IpAddr::is_loopback`]
48
- - [`IpAddr::is_multicast`]
49
- - [`Ipv4Addr::octets`]
50
- - [`Ipv4Addr::is_loopback`]
51
- - [`Ipv4Addr::is_private`]
52
- - [`Ipv4Addr::is_link_local`]
53
- - [`Ipv4Addr::is_multicast`]
54
- - [`Ipv4Addr::is_broadcast`]
55
- - [`Ipv4Addr::is_documentation`]
56
- - [`Ipv4Addr::to_ipv6_compatible`]
57
- - [`Ipv4Addr::to_ipv6_mapped`]
58
- - [`Ipv6Addr::segments`]
59
- - [`Ipv6Addr::is_unspecified`]
60
- - [`Ipv6Addr::is_loopback`]
61
- - [`Ipv6Addr::is_multicast`]
62
- - [`Ipv6Addr::to_ipv4`]
63
216
- [`Layout::size`]
64
217
- [`Layout::align`]
65
218
- [`Layout::from_size_align`]
@@ -68,7 +221,7 @@ The following previously stable methods are now `const`.
68
221
- `saturating_pow` for all integer types.
69
222
- `wrapping_pow` for all integer types.
70
223
- `next_power_of_two` for all unsigned integer types.
71
- - `checked_next_power_of_two ` for all unsigned integer types.
224
+ - `checked_power_of_two ` for all unsigned integer types.
72
225
73
226
Cargo
74
227
-----------------------
@@ -95,6 +248,7 @@ Compatibility Notes
95
248
- [`#![test]` as an inner attribute is now considered unstable like other inner macro
96
249
attributes, and reports an error by default through the `soft_unstable` lint.][79003]
97
250
- [Overriding a `forbid` lint at the same level that it was set is now a hard error.][78864]
251
+ - [Dropped support for all cloudabi targets.][78439]
98
252
- [You can no longer intercept `panic!` calls by supplying your own macro.][78343] It's
99
253
recommended to use the `#[panic_handler]` attribute to provide your own implementation.
100
254
- [Semi-colons after item statements (e.g. `struct Foo {};`) now produce a warning.][78296]
@@ -121,23 +275,6 @@ Compatibility Notes
121
275
[cargo/8725]: https://github.com/rust-lang/cargo/pull/8725
122
276
[`IpAddr::is_ipv4`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv4
123
277
[`IpAddr::is_ipv6`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv6
124
- [`IpAddr::is_unspecified`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_unspecified
125
- [`IpAddr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_loopback
126
- [`IpAddr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_multicast
127
- [`Ipv4Addr::octets`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.octets
128
- [`Ipv4Addr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_loopback
129
- [`Ipv4Addr::is_private`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_private
130
- [`Ipv4Addr::is_link_local`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_link_local
131
- [`Ipv4Addr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_multicast
132
- [`Ipv4Addr::is_broadcast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_broadcast
133
- [`Ipv4Addr::is_documentation`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_documentation
134
- [`Ipv4Addr::to_ipv6_compatible`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.to_ipv6_compatible
135
- [`Ipv4Addr::to_ipv6_mapped`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.to_ipv6_mapped
136
- [`Ipv6Addr::segments`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.segments
137
- [`Ipv6Addr::is_unspecified`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_unspecified
138
- [`Ipv6Addr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_loopback
139
- [`Ipv6Addr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_multicast
140
- [`Ipv6Addr::to_ipv4`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.to_ipv4
141
278
[`Layout::align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align
142
279
[`Layout::from_size_align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.from_size_align
143
280
[`Layout::size`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.size
0 commit comments