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+
1172Version 1.50.0 (2021-02-11)
2173============================
3174
@@ -12,7 +183,6 @@ Compiler
12183- [ Added tier 3\* support for the ` armv5te-unknown-linux-uclibceabi ` target.] [ 78142 ]
13184- [ Added tier 3 support for the ` aarch64-apple-ios-macabi ` target.] [ 77484 ]
14185- [ The ` x86_64-unknown-freebsd ` is now built with the full toolset.] [ 79484 ]
15- - [ Dropped support for all cloudabi targets.] [ 78439 ]
16186
17187\* Refer to Rust's [ platform support page] [ forge-platform-support ] for more
18188information on Rust's tiered platform support.
@@ -43,23 +213,6 @@ The following previously stable methods are now `const`.
43213
44214- [ ` IpAddr::is_ipv4 ` ]
45215- [ ` 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 ` ]
63216- [ ` Layout::size ` ]
64217- [ ` Layout::align ` ]
65218- [ ` Layout::from_size_align ` ]
@@ -68,7 +221,7 @@ The following previously stable methods are now `const`.
68221- ` saturating_pow ` for all integer types.
69222- ` wrapping_pow ` for all integer types.
70223- ` 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.
72225
73226Cargo
74227-----------------------
@@ -95,6 +248,7 @@ Compatibility Notes
95248- [ ` #![test] ` as an inner attribute is now considered unstable like other inner macro
96249 attributes, and reports an error by default through the ` soft_unstable ` lint.] [ 79003 ]
97250- [ 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 ]
98252- [ You can no longer intercept ` panic! ` calls by supplying your own macro.] [ 78343 ] It's
99253 recommended to use the ` #[panic_handler] ` attribute to provide your own implementation.
100254- [ Semi-colons after item statements (e.g. ` struct Foo {}; ` ) now produce a warning.] [ 78296 ]
@@ -121,23 +275,6 @@ Compatibility Notes
121275[ cargo/8725 ] : https://github.com/rust-lang/cargo/pull/8725
122276[ `IpAddr::is_ipv4` ] : https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv4
123277[ `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
141278[ `Layout::align` ] : https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align
142279[ `Layout::from_size_align` ] : https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.from_size_align
143280[ `Layout::size` ] : https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.size
0 commit comments