]> git.proxmox.com Git - rustc.git/blob - RELEASES.md
Update upstream source from tag 'upstream/1.69.0+dfsg1'
[rustc.git] / RELEASES.md
1 Version 1.69.0 (2023-04-20)
2 ==========================
3
4 <a id="1.69.0-Language"></a>
5
6 Language
7 --------
8
9 - [Deriving built-in traits on packed structs works with `Copy` fields.](https://github.com/rust-lang/rust/pull/104429/)
10 - [Stabilize the `cmpxchg16b` target feature on x86 and x86_64.](https://github.com/rust-lang/rust/pull/106774/)
11 - [Improve analysis of trait bounds for associated types.](https://github.com/rust-lang/rust/pull/103695/)
12 - [Allow associated types to be used as union fields.](https://github.com/rust-lang/rust/pull/106938/)
13 - [Allow `Self: Autotrait` bounds on dyn-safe trait methods.](https://github.com/rust-lang/rust/pull/107082/)
14 - [Treat `str` as containing `[u8]` for auto trait purposes.](https://github.com/rust-lang/rust/pull/107941/)
15
16 <a id="1.69.0-Compiler"></a>
17
18 Compiler
19 --------
20
21 - [Upgrade `*-pc-windows-gnu` on CI to mingw-w64 v10 and GCC 12.2.](https://github.com/rust-lang/rust/pull/100178/)
22 - [Rework min_choice algorithm of member constraints.](https://github.com/rust-lang/rust/pull/105300/)
23 - [Support `true` and `false` as boolean flags in compiler arguments.](https://github.com/rust-lang/rust/pull/107043/)
24 - [Default `repr(C)` enums to `c_int` size.](https://github.com/rust-lang/rust/pull/107592/)
25
26 <a id="1.69.0-Libraries"></a>
27
28 Libraries
29 ---------
30
31 - [Implement the unstable `DispatchFromDyn` for cell types, allowing downstream experimentation with custom method receivers.](https://github.com/rust-lang/rust/pull/97373/)
32 - [Document that `fmt::Arguments::as_str()` may return `Some(_)` in more cases after optimization, subject to change.](https://github.com/rust-lang/rust/pull/106823/)
33 - [Implement `AsFd` and `AsRawFd` for `Rc`.](https://github.com/rust-lang/rust/pull/107317/)
34
35 <a id="1.69.0-Stabilized-APIs"></a>
36
37 Stabilized APIs
38 ---------------
39
40 - [`CStr::from_bytes_until_nul`](https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html#method.from_bytes_until_nul)
41 - [`core::ffi::FromBytesUntilNulError`](https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesUntilNulError.html)
42
43 These APIs are now stable in const contexts:
44
45 - [`SocketAddr::new`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.new)
46 - [`SocketAddr::ip`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.ip)
47 - [`SocketAddr::port`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.port)
48 - [`SocketAddr::is_ipv4`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.is_ipv4)
49 - [`SocketAddr::is_ipv6`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html#method.is_ipv6)
50 - [`SocketAddrV4::new`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.new)
51 - [`SocketAddrV4::ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.ip)
52 - [`SocketAddrV4::port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV4.html#method.port)
53 - [`SocketAddrV6::new`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.new)
54 - [`SocketAddrV6::ip`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.ip)
55 - [`SocketAddrV6::port`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.port)
56 - [`SocketAddrV6::flowinfo`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.flowinfo)
57 - [`SocketAddrV6::scope_id`](https://doc.rust-lang.org/stable/std/net/struct.SocketAddrV6.html#method.scope_id)
58
59 <a id="1.69.0-Cargo"></a>
60
61 Cargo
62 -----
63
64 - [Cargo now suggests `cargo fix` or `cargo clippy --fix` when compilation warnings are auto-fixable.](https://github.com/rust-lang/cargo/pull/11558/)
65 - [Cargo now suggests `cargo add` if you try to install a library crate.](https://github.com/rust-lang/cargo/pull/11410/)
66 - [Cargo now sets the `CARGO_BIN_NAME` environment variable also for binary examples.](https://github.com/rust-lang/cargo/pull/11705/)
67
68 <a id="1.69.0-Rustdoc"></a>
69
70 Rustdoc
71 -----
72
73 - [Vertically compact trait bound formatting.](https://github.com/rust-lang/rust/pull/102842/)
74 - [Only include stable lints in `rustdoc::all` group.](https://github.com/rust-lang/rust/pull/106316/)
75 - [Compute maximum Levenshtein distance based on the query.](https://github.com/rust-lang/rust/pull/107141/)
76 - [Remove inconsistently-present sidebar tooltips.](https://github.com/rust-lang/rust/pull/107490/)
77 - [Search by macro when query ends with `!`.](https://github.com/rust-lang/rust/pull/108143/)
78
79 <a id="1.69.0-Compatibility-Notes"></a>
80
81 Compatibility Notes
82 -------------------
83
84 - [The `rust-analysis` component from `rustup` now only contains a warning placeholder.](https://github.com/rust-lang/rust/pull/101841/) This was primarily intended for RLS, and the corresponding `-Zsave-analysis` flag has been removed from the compiler as well.
85 - [Unaligned references to packed fields are now a hard error.](https://github.com/rust-lang/rust/pull/102513/) This has been a warning since 1.53, and denied by default with a future-compatibility warning since 1.62.
86 - [Update the minimum external LLVM to 14.](https://github.com/rust-lang/rust/pull/107573/)
87 - [Cargo now emits errors on invalid characters in a registry token.](https://github.com/rust-lang/cargo/pull/11600/)
88 - [When `default-features` is set to false of a workspace dependency, and an inherited dependency of a member has `default-features = true`, Cargo will enable default features of that dependency.](https://github.com/rust-lang/cargo/pull/11409/)
89 - [Cargo denies `CARGO_HOME` in the `[env]` configuration table. Cargo itself doesn't pick up this value, but recursive calls to cargo would, which was not intended.](https://github.com/rust-lang/cargo/pull/11644/)
90 - [Debuginfo for build dependencies is now off if not explicitly set. This is expected to improve the overall build time.](https://github.com/rust-lang/cargo/pull/11252/)
91
92 <a id="1.69.0-Internal-Changes"></a>
93
94 Internal Changes
95 ----------------
96
97 These changes do not affect any public interfaces of Rust, but they represent
98 significant improvements to the performance or internals of rustc and related
99 tools.
100
101 - [Move `format_args!()` into AST (and expand it during AST lowering)](https://github.com/rust-lang/rust/pull/106745/)
102
103 Version 1.68.2 (2023-03-28)
104 ===========================
105
106 - [Update the GitHub RSA host key bundled within Cargo](https://github.com/rust-lang/cargo/pull/11883).
107 The key was [rotated by GitHub](https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/)
108 on 2023-03-24 after the old one leaked.
109 - [Mark the old GitHub RSA host key as revoked](https://github.com/rust-lang/cargo/pull/11889).
110 This will prevent Cargo from accepting the leaked key even when trusted by
111 the system.
112 - [Add support for `@revoked` and a better error message for `@cert-authority` in Cargo's SSH host key verification](https://github.com/rust-lang/cargo/pull/11635)
113
114 Version 1.68.1 (2023-03-23)
115 ===========================
116
117 - [Fix miscompilation in produced Windows MSVC artifacts](https://github.com/rust-lang/rust/pull/109094)
118 This was introduced by enabling ThinLTO for the distributed rustc which led
119 to miscompilations in the resulting binary. Currently this is believed to be
120 limited to the -Zdylib-lto flag used for rustc compilation, rather than a
121 general bug in ThinLTO, so only rustc artifacts should be affected.
122 - [Fix --enable-local-rust builds](https://github.com/rust-lang/rust/pull/109111/)
123 - [Treat `$prefix-clang` as `clang` in linker detection code](https://github.com/rust-lang/rust/pull/109156)
124 - [Fix panic in compiler code](https://github.com/rust-lang/rust/pull/108162)
125
126 Version 1.68.0 (2023-03-09)
127 ==========================
128
129 <a id="1.68.0-Language"></a>
130
131 Language
132 --------
133
134 - [Stabilize default_alloc_error_handler](https://github.com/rust-lang/rust/pull/102318/)
135 This allows usage of `alloc` on stable without requiring the
136 definition of a handler for allocation failure. Defining custom handlers is still unstable.
137 - [Stabilize `efiapi` calling convention.](https://github.com/rust-lang/rust/pull/105795/)
138 - [Remove implicit promotion for types with drop glue](https://github.com/rust-lang/rust/pull/105085/)
139
140 <a id="1.68.0-Compiler"></a>
141
142 Compiler
143 --------
144
145 - [Change `bindings_with_variant_name` to deny-by-default](https://github.com/rust-lang/rust/pull/104154/)
146 - [Allow .. to be parsed as let initializer](https://github.com/rust-lang/rust/pull/105701/)
147 - [Add `armv7-sony-vita-newlibeabihf` as a tier 3 target](https://github.com/rust-lang/rust/pull/105712/)
148 - [Always check alignment during compile-time const evaluation](https://github.com/rust-lang/rust/pull/104616/)
149 - [Disable "split dwarf inlining" by default.](https://github.com/rust-lang/rust/pull/106709/)
150 - [Add vendor to Fuchsia's target triple](https://github.com/rust-lang/rust/pull/106429/)
151 - [Enable sanitizers for s390x-linux](https://github.com/rust-lang/rust/pull/107127/)
152
153 <a id="1.68.0-Libraries"></a>
154
155 Libraries
156 ---------
157
158 - [Loosen the bound on the Debug implementation of Weak.](https://github.com/rust-lang/rust/pull/90291/)
159 - [Make `std::task::Context` !Send and !Sync](https://github.com/rust-lang/rust/pull/95985/)
160 - [PhantomData layout guarantees](https://github.com/rust-lang/rust/pull/104081/)
161 - [Don't derive Debug for `OnceWith` & `RepeatWith`](https://github.com/rust-lang/rust/pull/104163/)
162 - [Implement DerefMut for PathBuf](https://github.com/rust-lang/rust/pull/105018/)
163 - [Add O(1) `Vec -> VecDeque` conversion guarantee](https://github.com/rust-lang/rust/pull/105128/)
164 - [Leak amplification for peek_mut() to ensure BinaryHeap's invariant is always met](https://github.com/rust-lang/rust/pull/105851/)
165
166 <a id="1.68.0-Stabilized-APIs"></a>
167
168 Stabilized APIs
169 ---------------
170
171 - [`{core,std}::pin::pin!`](https://doc.rust-lang.org/stable/std/pin/macro.pin.html)
172 - [`impl From<bool> for {f32,f64}`](https://doc.rust-lang.org/stable/std/primitive.f32.html#impl-From%3Cbool%3E-for-f32)
173 - [`std::path::MAIN_SEPARATOR_STR`](https://doc.rust-lang.org/stable/std/path/constant.MAIN_SEPARATOR_STR.html)
174 - [`impl DerefMut for PathBuf`](https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#impl-DerefMut-for-PathBuf)
175
176 These APIs are now stable in const contexts:
177
178 - [`VecDeque::new`](https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.new)
179
180 <a id="1.68.0-Cargo"></a>
181
182 Cargo
183 -----
184
185 - [Stabilize sparse registry support for crates.io](https://github.com/rust-lang/cargo/pull/11224/)
186 - [`cargo build --verbose` tells you more about why it recompiles.](https://github.com/rust-lang/cargo/pull/11407/)
187 - [Show progress of crates.io index update even `net.git-fetch-with-cli` option enabled](https://github.com/rust-lang/cargo/pull/11579/)
188
189 <a id="1.68.0-Misc"></a>
190
191 Misc
192 ----
193
194 <a id="1.68.0-Compatibility-Notes"></a>
195
196 Compatibility Notes
197 -------------------
198
199 - [Only support Android NDK 25 or newer](https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html)
200 - [Add `SEMICOLON_IN_EXPRESSIONS_FROM_MACROS` to future-incompat report](https://github.com/rust-lang/rust/pull/103418/)
201 - [Only specify `--target` by default for `-Zgcc-ld=lld` on wasm](https://github.com/rust-lang/rust/pull/101792/)
202 - [Bump `IMPLIED_BOUNDS_ENTAILMENT` to Deny + ReportNow](https://github.com/rust-lang/rust/pull/106465/)
203 - [`std::task::Context` no longer implements Send and Sync](https://github.com/rust-lang/rust/pull/95985)
204
205 <a id="1.68.0-Internal-Changes"></a>
206
207 Internal Changes
208 ----------------
209
210 These changes do not affect any public interfaces of Rust, but they represent
211 significant improvements to the performance or internals of rustc and related
212 tools.
213
214 - [Encode spans relative to the enclosing item](https://github.com/rust-lang/rust/pull/84762/)
215 - [Don't normalize in AstConv](https://github.com/rust-lang/rust/pull/101947/)
216 - [Find the right lower bound region in the scenario of partial order relations](https://github.com/rust-lang/rust/pull/104765/)
217 - [Fix impl block in const expr](https://github.com/rust-lang/rust/pull/104889/)
218 - [Check ADT fields for copy implementations considering regions](https://github.com/rust-lang/rust/pull/105102/)
219 - [rustdoc: simplify JS search routine by not messing with lev distance](https://github.com/rust-lang/rust/pull/105796/)
220 - [Enable ThinLTO for rustc on `x86_64-pc-windows-msvc`](https://github.com/rust-lang/rust/pull/103591/)
221 - [Enable ThinLTO for rustc on `x86_64-apple-darwin`](https://github.com/rust-lang/rust/pull/103647/)
222
223 Version 1.67.1 (2023-02-09)
224 ===========================
225
226 - [Fix interoperability with thin archives.](https://github.com/rust-lang/rust/pull/107360)
227 - [Fix an internal error in the compiler build process.](https://github.com/rust-lang/rust/pull/105624)
228 - [Downgrade `clippy::uninlined_format_args` to pedantic.](https://github.com/rust-lang/rust-clippy/pull/10265)
229
230 Version 1.67.0 (2023-01-26)
231 ==========================
232
233 <a id="1.67.0-Language"></a>
234
235 Language
236 --------
237
238 - [Make `Sized` predicates coinductive, allowing cycles.](https://github.com/rust-lang/rust/pull/100386/)
239 - [`#[must_use]` annotations on `async fn` also affect the `Future::Output`.](https://github.com/rust-lang/rust/pull/100633/)
240 - [Elaborate supertrait obligations when deducing closure signatures.](https://github.com/rust-lang/rust/pull/101834/)
241 - [Invalid literals are no longer an error under `cfg(FALSE)`.](https://github.com/rust-lang/rust/pull/102944/)
242 - [Unreserve braced enum variants in value namespace.](https://github.com/rust-lang/rust/pull/103578/)
243
244 <a id="1.67.0-Compiler"></a>
245
246 Compiler
247 --------
248
249 - [Enable varargs support for calling conventions other than `C` or `cdecl`.](https://github.com/rust-lang/rust/pull/97971/)
250 - [Add new MIR constant propagation based on dataflow analysis.](https://github.com/rust-lang/rust/pull/101168/)
251 - [Optimize field ordering by grouping m\*2^n-sized fields with equivalently aligned ones.](https://github.com/rust-lang/rust/pull/102750/)
252 - [Stabilize native library modifier `verbatim`.](https://github.com/rust-lang/rust/pull/104360/)
253
254 Added, updated, and removed targets:
255
256 - [Add a tier 3 target for PowerPC on AIX](https://github.com/rust-lang/rust/pull/102293/), `powerpc64-ibm-aix`.
257 - [Add a tier 3 target for the Sony PlayStation 1](https://github.com/rust-lang/rust/pull/102689/), `mipsel-sony-psx`.
258 - [Add tier 3 `no_std` targets for the QNX Neutrino RTOS](https://github.com/rust-lang/rust/pull/102701/),
259 `aarch64-unknown-nto-qnx710` and `x86_64-pc-nto-qnx710`.
260 - [Promote UEFI targets to tier 2](https://github.com/rust-lang/rust/pull/103933/), `aarch64-unknown-uefi`, `i686-unknown-uefi`, and `x86_64-unknown-uefi`.
261 - [Remove tier 3 `linuxkernel` targets](https://github.com/rust-lang/rust/pull/104015/) (not used by the actual kernel).
262
263 Refer to Rust's [platform support page][platform-support-doc]
264 for more information on Rust's tiered platform support.
265
266 <a id="1.67.0-Libraries"></a>
267
268 Libraries
269 ---------
270
271 - [Merge `crossbeam-channel` into `std::sync::mpsc`.](https://github.com/rust-lang/rust/pull/93563/)
272 - [Fix inconsistent rounding of 0.5 when formatted to 0 decimal places.](https://github.com/rust-lang/rust/pull/102935/)
273 - [Derive `Eq` and `Hash` for `ControlFlow`.](https://github.com/rust-lang/rust/pull/103084/)
274 - [Don't build `compiler_builtins` with `-C panic=abort`.](https://github.com/rust-lang/rust/pull/103786/)
275
276 <a id="1.67.0-Stabilized-APIs"></a>
277
278 Stabilized APIs
279 ---------------
280
281 - [`{integer}::checked_ilog`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog)
282 - [`{integer}::checked_ilog2`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog2)
283 - [`{integer}::checked_ilog10`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.checked_ilog10)
284 - [`{integer}::ilog`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog)
285 - [`{integer}::ilog2`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog2)
286 - [`{integer}::ilog10`](https://doc.rust-lang.org/stable/std/primitive.i32.html#method.ilog10)
287 - [`NonZeroU*::ilog2`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#method.ilog2)
288 - [`NonZeroU*::ilog10`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#method.ilog10)
289 - [`NonZero*::BITS`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroU32.html#associatedconstant.BITS)
290
291 These APIs are now stable in const contexts:
292
293 - [`char::from_u32`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.from_u32)
294 - [`char::from_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.from_digit)
295 - [`char::to_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.to_digit)
296 - [`core::char::from_u32`](https://doc.rust-lang.org/stable/core/char/fn.from_u32.html)
297 - [`core::char::from_digit`](https://doc.rust-lang.org/stable/core/char/fn.from_digit.html)
298
299 <a id="1.67.0-Compatibility-Notes"></a>
300
301 Compatibility Notes
302 -------------------
303
304 - [The layout of `repr(Rust)` types now groups m\*2^n-sized fields with
305 equivalently aligned ones.](https://github.com/rust-lang/rust/pull/102750/)
306 This is intended to be an optimization, but it is also known to increase type
307 sizes in a few cases for the placement of enum tags. As a reminder, the layout
308 of `repr(Rust)` types is an implementation detail, subject to change.
309 - [0.5 now rounds to 0 when formatted to 0 decimal places.](https://github.com/rust-lang/rust/pull/102935/)
310 This makes it consistent with the rest of floating point formatting that
311 rounds ties toward even digits.
312 - [Chains of `&&` and `||` will now drop temporaries from their sub-expressions in
313 evaluation order, left-to-right.](https://github.com/rust-lang/rust/pull/103293/)
314 Previously, it was "twisted" such that the _first_ expression dropped its
315 temporaries _last_, after all of the other expressions dropped in order.
316 - [Underscore suffixes on string literals are now a hard error.](https://github.com/rust-lang/rust/pull/103914/)
317 This has been a future-compatibility warning since 1.20.0.
318 - [Stop passing `-export-dynamic` to `wasm-ld`.](https://github.com/rust-lang/rust/pull/105405/)
319 - [`main` is now mangled as `__main_void` on `wasm32-wasi`.](https://github.com/rust-lang/rust/pull/105468/)
320 - [Cargo now emits an error if there are multiple registries in the configuration
321 with the same index URL.](https://github.com/rust-lang/cargo/pull/10592)
322
323 <a id="1.67.0-Internal-Changes"></a>
324
325 Internal Changes
326 ----------------
327
328 These changes do not affect any public interfaces of Rust, but they represent
329 significant improvements to the performance or internals of rustc and related
330 tools.
331
332 - [Rewrite LLVM's archive writer in Rust.](https://github.com/rust-lang/rust/pull/97485/)
333
334 Version 1.66.1 (2023-01-10)
335 ===========================
336
337 - Added validation of SSH host keys for git URLs in Cargo ([CVE-2022-46176](https://www.cve.org/CVERecord?id=CVE-2022-46176))
338
339 Version 1.66.0 (2022-12-15)
340 ==========================
341
342 Language
343 --------
344 - [Permit specifying explicit discriminants on all `repr(Int)` enums](https://github.com/rust-lang/rust/pull/95710/)
345 ```rust
346 #[repr(u8)]
347 enum Foo {
348 A(u8) = 0,
349 B(i8) = 1,
350 C(bool) = 42,
351 }
352 ```
353 - [Allow transmutes between the same type differing only in lifetimes](https://github.com/rust-lang/rust/pull/101520/)
354 - [Change constant evaluation errors from a deny-by-default lint to a hard error](https://github.com/rust-lang/rust/pull/102091/)
355 - [Trigger `must_use` on `impl Trait` for supertraits](https://github.com/rust-lang/rust/pull/102287/)
356 This makes `impl ExactSizeIterator` respect the existing `#[must_use]` annotation on `Iterator`.
357 - [Allow `..=X` in patterns](https://github.com/rust-lang/rust/pull/102275/)
358 - [Uplift `clippy::for_loops_over_fallibles` lint into rustc](https://github.com/rust-lang/rust/pull/99696/)
359 - [Stabilize `sym` operands in inline assembly](https://github.com/rust-lang/rust/pull/103168/)
360 - [Update to Unicode 15](https://github.com/rust-lang/rust/pull/101912/)
361 - [Opaque types no longer imply lifetime bounds](https://github.com/rust-lang/rust/pull/95474/)
362 This is a soundness fix which may break code that was erroneously relying on this behavior.
363
364 Compiler
365 --------
366 - [Add armv5te-none-eabi and thumbv5te-none-eabi tier 3 targets](https://github.com/rust-lang/rust/pull/101329/)
367 - Refer to Rust's [platform support page][platform-support-doc] for more
368 information on Rust's tiered platform support.
369 - [Add support for linking against macOS universal libraries](https://github.com/rust-lang/rust/pull/98736)
370
371 Libraries
372 ---------
373 - [Fix `#[derive(Default)]` on a generic `#[default]` enum adding unnecessary `Default` bounds](https://github.com/rust-lang/rust/pull/101040/)
374 - [Update to Unicode 15](https://github.com/rust-lang/rust/pull/101821/)
375
376 Stabilized APIs
377 ---------------
378
379 - [`proc_macro::Span::source_text`](https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.source_text)
380 - [`uX::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}`](https://doc.rust-lang.org/stable/std/primitive.u8.html#method.checked_add_signed)
381 - [`iX::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_add_unsigned)
382 - [`iX::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}`](https://doc.rust-lang.org/stable/std/primitive.i8.html#method.checked_sub_unsigned)
383 - [`BTreeSet::{first, last, pop_first, pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeSet.html#method.first)
384 - [`BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}`](https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.first_key_value)
385 - [Add `AsFd` implementations for stdio lock types on WASI.](https://github.com/rust-lang/rust/pull/101768/)
386 - [`impl TryFrom<Vec<T>> for Box<[T; N]>`](https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#impl-TryFrom%3CVec%3CT%2C%20Global%3E%3E-for-Box%3C%5BT%3B%20N%5D%2C%20Global%3E)
387 - [`core::hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
388 - [`Duration::try_from_secs_{f32,f64}`](https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.try_from_secs_f32)
389 - [`Option::unzip`](https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unzip)
390 - [`std::os::fd`](https://doc.rust-lang.org/stable/std/os/fd/index.html)
391
392
393 Rustdoc
394 -------
395
396 - [Add Rustdoc warning for invalid HTML tags in the documentation](https://github.com/rust-lang/rust/pull/101720/)
397
398 Cargo
399 -----
400
401 - [Added `cargo remove` to remove dependencies from Cargo.toml](https://doc.rust-lang.org/nightly/cargo/commands/cargo-remove.html)
402 - [`cargo publish` now waits for the new version to be downloadable before exiting](https://github.com/rust-lang/cargo/pull/11062)
403
404 See [detailed release notes](https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15) for more.
405
406 Compatibility Notes
407 -------------------
408
409 - [Only apply `ProceduralMasquerade` hack to older versions of `rental`](https://github.com/rust-lang/rust/pull/94063/)
410 - [Don't export `__heap_base` and `__data_end` on wasm32-wasi.](https://github.com/rust-lang/rust/pull/102385/)
411 - [Don't export `__wasm_init_memory` on WebAssembly.](https://github.com/rust-lang/rust/pull/102426/)
412 - [Only export `__tls_*` on wasm32-unknown-unknown.](https://github.com/rust-lang/rust/pull/102440/)
413 - [Don't link to `libresolv` in libstd on Darwin](https://github.com/rust-lang/rust/pull/102766/)
414 - [Update libstd's libc to 0.2.135 (to make `libstd` no longer pull in `libiconv.dylib` on Darwin)](https://github.com/rust-lang/rust/pull/103277/)
415 - [Opaque types no longer imply lifetime bounds](https://github.com/rust-lang/rust/pull/95474/)
416 This is a soundness fix which may break code that was erroneously relying on this behavior.
417 - [Make `order_dependent_trait_objects` show up in future-breakage reports](https://github.com/rust-lang/rust/pull/102635/)
418 - [Change std::process::Command spawning to default to inheriting the parent's signal mask](https://github.com/rust-lang/rust/pull/101077/)
419
420 Internal Changes
421 ----------------
422
423 These changes do not affect any public interfaces of Rust, but they represent
424 significant improvements to the performance or internals of rustc and related
425 tools.
426
427 - [Enable BOLT for LLVM compilation](https://github.com/rust-lang/rust/pull/94381/)
428 - [Enable LTO for rustc_driver.so](https://github.com/rust-lang/rust/pull/101403/)
429
430 Version 1.65.0 (2022-11-03)
431 ==========================
432
433 Language
434 --------
435 - [Error on `as` casts of enums with `#[non_exhaustive]` variants](https://github.com/rust-lang/rust/pull/92744/)
436 - [Stabilize `let else`](https://github.com/rust-lang/rust/pull/93628/)
437 - [Stabilize generic associated types (GATs)](https://github.com/rust-lang/rust/pull/96709/)
438 - [Add lints `let_underscore_drop` and `let_underscore_lock` from Clippy](https://github.com/rust-lang/rust/pull/97739/)
439 - [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")](https://github.com/rust-lang/rust/pull/99332/)
440 - [Uninitialized integers, floats, and raw pointers are now considered immediate UB](https://github.com/rust-lang/rust/pull/98919/).
441 Usage of `MaybeUninit` is the correct way to work with uninitialized memory.
442 - [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a](https://github.com/rust-lang/rust/pull/99916/)
443 - [Do not allow `Drop` impl on foreign ADTs](https://github.com/rust-lang/rust/pull/99576/)
444
445 Compiler
446 --------
447 - [Stabilize -Csplit-debuginfo on Linux](https://github.com/rust-lang/rust/pull/98051/)
448 - [Use niche-filling optimization even when multiple variants have data](https://github.com/rust-lang/rust/pull/94075/)
449 - [Associated type projections are now verified to be well-formed prior to resolving the underlying type](https://github.com/rust-lang/rust/pull/99217/#issuecomment-1209365630)
450 - [Stringify non-shorthand visibility correctly](https://github.com/rust-lang/rust/pull/100350/)
451 - [Normalize struct field types when unsizing](https://github.com/rust-lang/rust/pull/101831/)
452 - [Update to LLVM 15](https://github.com/rust-lang/rust/pull/99464/)
453 - [Fix aarch64 call abi to correctly zeroext when needed](https://github.com/rust-lang/rust/pull/97800/)
454 - [debuginfo: Generalize C++-like encoding for enums](https://github.com/rust-lang/rust/pull/98393/)
455 - [Add `special_module_name` lint](https://github.com/rust-lang/rust/pull/94467/)
456 - [Add support for generating unique profraw files by default when using `-C instrument-coverage`](https://github.com/rust-lang/rust/pull/100384/)
457 - [Allow dynamic linking for iOS/tvOS targets](https://github.com/rust-lang/rust/pull/100636/)
458
459 New targets:
460
461 - [Add armv4t-none-eabi as a tier 3 target](https://github.com/rust-lang/rust/pull/100244/)
462 - [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets](https://github.com/rust-lang/rust/pull/101025/)
463 - Refer to Rust's [platform support page][platform-support-doc] for more
464 information on Rust's tiered platform support.
465
466 Libraries
467 ---------
468
469 - [Don't generate `PartialEq::ne` in derive(PartialEq)](https://github.com/rust-lang/rust/pull/98655/)
470 - [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default](https://github.com/rust-lang/rust/pull/101325/)
471 - [Forbid mixing `System` with direct system allocator calls](https://github.com/rust-lang/rust/pull/101394/)
472 - [Document no support for writing to non-blocking stdio/stderr](https://github.com/rust-lang/rust/pull/101416/)
473 - [`std::layout::Layout` size must not overflow `isize::MAX` when rounded up to `align`](https://github.com/rust-lang/rust/pull/95295)
474 This also changes the safety conditions on `Layout::from_size_align_unchecked`.
475
476 Stabilized APIs
477 ---------------
478
479 - [`std::backtrace::Backtrace`](https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html)
480 - [`Bound::as_ref`](https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref)
481 - [`std::io::read_to_string`](https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html)
482 - [`<*const T>::cast_mut`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut)
483 - [`<*mut T>::cast_const`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const)
484
485 These APIs are now stable in const contexts:
486
487 - [`<*const T>::offset_from`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
488 - [`<*mut T>::offset_from`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from)
489
490 Cargo
491 -----
492
493 - [Apply GitHub fast path even for partial hashes](https://github.com/rust-lang/cargo/pull/10807/)
494 - [Do not add home bin path to PATH if it's already there](https://github.com/rust-lang/cargo/pull/11023/)
495 - [Take priority into account within the pending queue](https://github.com/rust-lang/cargo/pull/11032/).
496 This slightly optimizes job scheduling by Cargo, with typically small improvements on larger crate graph builds.
497
498 Compatibility Notes
499 -------------------
500
501 - [`std::layout::Layout` size must not overflow `isize::MAX` when rounded up to `align`](https://github.com/rust-lang/rust/pull/95295).
502 This also changes the safety conditions on `Layout::from_size_align_unchecked`.
503 - [`PollFn` now only implements `Unpin` if the closure is `Unpin`](https://github.com/rust-lang/rust/pull/102737).
504 This is a possible breaking change if users were relying on the blanket unpin implementation.
505 See discussion on the PR for details of why this change was made.
506 - [Drop ExactSizeIterator impl from std::char::EscapeAscii](https://github.com/rust-lang/rust/pull/99880)
507 This is a backwards-incompatible change to the standard library's surface
508 area, but is unlikely to affect real world usage.
509 - [Do not consider a single repeated lifetime eligible for elision in the return type](https://github.com/rust-lang/rust/pull/103450)
510 This behavior was unintentionally changed in 1.64.0, and this release reverts that change by making this an error again.
511 - [Reenable disabled early syntax gates as future-incompatibility lints](https://github.com/rust-lang/rust/pull/99935/)
512 - [Update the minimum external LLVM to 13](https://github.com/rust-lang/rust/pull/100460/)
513 - [Don't duplicate file descriptors into stdio fds](https://github.com/rust-lang/rust/pull/101426/)
514 - [Sunset RLS](https://github.com/rust-lang/rust/pull/100863/)
515 - [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the crate type](https://github.com/rust-lang/rust/pull/99784/)
516 This strengthens the forward compatibility lint deprecated_cfg_attr_crate_type_name to deny.
517 - [`llvm-has-rust-patches` allows setting the build system to treat the LLVM as having Rust-specific patches](https://github.com/rust-lang/rust/pull/101072)
518 This option may need to be set for distributions that are building Rust with a patched LLVM via `llvm-config`, not the built-in LLVM.
519 - Combining three or more languages (e.g. Objective C, C++ and Rust) into one binary may hit linker limitations when using `lld`. For more information, see [issue 102754][102754].
520
521 [102754]: https://github.com/rust-lang/rust/issues/102754
522
523 Internal Changes
524 ----------------
525
526 These changes do not affect any public interfaces of Rust, but they represent
527 significant improvements to the performance or internals of rustc and related
528 tools.
529
530 - [Add `x.sh` and `x.ps1` shell scripts](https://github.com/rust-lang/rust/pull/99992/)
531 - [compiletest: use target cfg instead of hard-coded tables](https://github.com/rust-lang/rust/pull/100260/)
532 - [Use object instead of LLVM for reading bitcode from rlibs](https://github.com/rust-lang/rust/pull/98100/)
533 - [Enable MIR inlining for optimized compilations](https://github.com/rust-lang/rust/pull/91743)
534 This provides a 3-10% improvement in compiletimes for real world crates. See [perf results](https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u).
535
536 Version 1.64.0 (2022-09-22)
537 ===========================
538
539 Language
540 --------
541 - [Unions with mutable references or tuples of allowed types are now allowed](https://github.com/rust-lang/rust/pull/97995/)
542 - It is now considered valid to deallocate memory pointed to by a shared reference `&T` [if every byte in `T` is inside an `UnsafeCell`](https://github.com/rust-lang/rust/pull/98017/)
543 - Unused tuple struct fields are now warned against in an allow-by-default lint, [`unused_tuple_struct_fields`](https://github.com/rust-lang/rust/pull/95977/), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future.
544
545 Compiler
546 --------
547 - [Add Nintendo Switch as tier 3 target](https://github.com/rust-lang/rust/pull/88991/)
548 - Refer to Rust's [platform support page][platform-support-doc] for more
549 information on Rust's tiered platform support.
550 - [Only compile `#[used]` as llvm.compiler.used for ELF targets](https://github.com/rust-lang/rust/pull/93718/)
551 - [Add the `--diagnostic-width` compiler flag to define the terminal width.](https://github.com/rust-lang/rust/pull/95635/)
552 - [Add support for link-flavor `rust-lld` for iOS, tvOS and watchOS](https://github.com/rust-lang/rust/pull/98771/)
553
554 Libraries
555 ---------
556 - [Remove restrictions on compare-exchange memory ordering.](https://github.com/rust-lang/rust/pull/98383/)
557 - You can now `write!` or `writeln!` into an `OsString`: [Implement `fmt::Write` for `OsString`](https://github.com/rust-lang/rust/pull/97915/)
558 - [Make RwLockReadGuard covariant](https://github.com/rust-lang/rust/pull/96820/)
559 - [Implement `FusedIterator` for `std::net::[Into]Incoming`](https://github.com/rust-lang/rust/pull/97300/)
560 - [`impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>`](https://github.com/rust-lang/rust/pull/97437/)
561 - [`ptr::copy` and `ptr::swap` are doing untyped copies](https://github.com/rust-lang/rust/pull/97712/)
562 - [Add cgroupv1 support to `available_parallelism`](https://github.com/rust-lang/rust/pull/97925/)
563 - [Mitigate many incorrect uses of `mem::uninitialized`](https://github.com/rust-lang/rust/pull/99182/)
564
565 Stabilized APIs
566 ---------------
567
568 - [`future::IntoFuture`](https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html)
569 - [`future::poll_fn`](https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html)
570 - [`task::ready!`](https://doc.rust-lang.org/stable/std/task/macro.ready.html)
571 - [`num::NonZero*::checked_mul`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul)
572 - [`num::NonZero*::checked_pow`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow)
573 - [`num::NonZero*::saturating_mul`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul)
574 - [`num::NonZero*::saturating_pow`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow)
575 - [`num::NonZeroI*::abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs)
576 - [`num::NonZeroI*::checked_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs)
577 - [`num::NonZeroI*::overflowing_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs)
578 - [`num::NonZeroI*::saturating_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs)
579 - [`num::NonZeroI*::unsigned_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs)
580 - [`num::NonZeroI*::wrapping_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs)
581 - [`num::NonZeroU*::checked_add`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add)
582 - [`num::NonZeroU*::checked_next_power_of_two`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two)
583 - [`num::NonZeroU*::saturating_add`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add)
584 - [`os::unix::process::CommandExt::process_group`](https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group)
585 - [`os::windows::fs::FileTypeExt::is_symlink_dir`](https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir)
586 - [`os::windows::fs::FileTypeExt::is_symlink_file`](https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file)
587
588 These types were previously stable in `std::ffi`, but are now also available in `core` and `alloc`:
589
590 - [`core::ffi::CStr`](https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html)
591 - [`core::ffi::FromBytesWithNulError`](https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html)
592 - [`alloc::ffi::CString`](https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html)
593 - [`alloc::ffi::FromVecWithNulError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html)
594 - [`alloc::ffi::IntoStringError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html)
595 - [`alloc::ffi::NulError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html)
596
597 These types were previously stable in `std::os::raw`, but are now also available in `core::ffi` and `std::ffi`:
598
599 - [`ffi::c_char`](https://doc.rust-lang.org/stable/std/ffi/type.c_char.html)
600 - [`ffi::c_double`](https://doc.rust-lang.org/stable/std/ffi/type.c_double.html)
601 - [`ffi::c_float`](https://doc.rust-lang.org/stable/std/ffi/type.c_float.html)
602 - [`ffi::c_int`](https://doc.rust-lang.org/stable/std/ffi/type.c_int.html)
603 - [`ffi::c_long`](https://doc.rust-lang.org/stable/std/ffi/type.c_long.html)
604 - [`ffi::c_longlong`](https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html)
605 - [`ffi::c_schar`](https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html)
606 - [`ffi::c_short`](https://doc.rust-lang.org/stable/std/ffi/type.c_short.html)
607 - [`ffi::c_uchar`](https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html)
608 - [`ffi::c_uint`](https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html)
609 - [`ffi::c_ulong`](https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html)
610 - [`ffi::c_ulonglong`](https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html)
611 - [`ffi::c_ushort`](https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html)
612
613 These APIs are now usable in const contexts:
614
615 - [`slice::from_raw_parts`](https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html)
616
617 Cargo
618 -----
619 - [Packages can now inherit settings from the workspace so that the settings
620 can be centralized in one place.](https://github.com/rust-lang/cargo/pull/10859) See
621 [`workspace.package`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-workspacepackage-table)
622 and
623 [`workspace.dependencies`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-workspacedependencies-table)
624 for more details on how to define these common settings.
625 - [Cargo commands can now accept multiple `--target` flags to build for
626 multiple targets at once](https://github.com/rust-lang/cargo/pull/10766), and the
627 [`build.target`](https://doc.rust-lang.org/nightly/cargo/reference/config.html#buildtarget)
628 config option may now take an array of multiple targets.
629 - [The `--jobs` argument can now take a negative number to count backwards from
630 the max CPUs.](https://github.com/rust-lang/cargo/pull/10844)
631 - [`cargo add` will now update `Cargo.lock`.](https://github.com/rust-lang/cargo/pull/10902)
632 - [Added](https://github.com/rust-lang/cargo/pull/10838) the
633 [`--crate-type`](https://doc.rust-lang.org/nightly/cargo/commands/cargo-rustc.html#option-cargo-rustc---crate-type)
634 flag to `cargo rustc` to override the crate type.
635 - [Significantly improved the performance fetching git dependencies from GitHub
636 when using a hash in the `rev` field.](https://github.com/rust-lang/cargo/pull/10079)
637
638 Misc
639 ----
640 - [The `rust-analyzer` rustup component is now available on the stable channel.](https://github.com/rust-lang/rust/pull/98640/)
641
642 Compatibility Notes
643 -------------------
644 - The minimum required versions for all `-linux-gnu` targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: [Increase the minimum linux-gnu versions](https://github.com/rust-lang/rust/pull/95026/)
645 - [Network primitives are now implemented with the ideal Rust layout, not the C system layout](https://github.com/rust-lang/rust/pull/78802/). This can cause problems when transmuting the types.
646 - [Add assertion that `transmute_copy`'s `U` is not larger than `T`](https://github.com/rust-lang/rust/pull/98839/)
647 - [A soundness bug in `BTreeMap` was fixed](https://github.com/rust-lang/rust/pull/99413/) that allowed data it was borrowing to be dropped before the container.
648 - [The Drop behavior of C-like enums cast to ints has changed](https://github.com/rust-lang/rust/pull/96862/). These are already discouraged by a compiler warning.
649 - [Relate late-bound closure lifetimes to parent fn in NLL](https://github.com/rust-lang/rust/pull/98835/)
650 - [Errors at const-eval time are now in future incompatibility reports](https://github.com/rust-lang/rust/pull/97743/)
651 - On the `thumbv6m-none-eabi` target, some incorrect `asm!` statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted](https://github.com/rust-lang/rust/pull/99155/).
652 - [`impl Trait` was accidentally accepted as the associated type value of return-position `impl Trait`](https://github.com/rust-lang/rust/pull/97346/), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed.
653
654 Internal Changes
655 ----------------
656
657 These changes do not affect any public interfaces of Rust, but they represent
658 significant improvements to the performance or internals of rustc and related
659 tools.
660
661 - Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds](https://github.com/rust-lang/rust/pull/96978/)
662 - [Stop keeping metadata in memory before writing it to disk](https://github.com/rust-lang/rust/pull/96544/)
663 - [compiletest: strip debuginfo by default for mode=ui](https://github.com/rust-lang/rust/pull/98140/)
664 - Many improvements to generated code for derives, including performance improvements:
665 - [Don't use match-destructuring for derived ops on structs.](https://github.com/rust-lang/rust/pull/98446/)
666 - [Many small deriving cleanups](https://github.com/rust-lang/rust/pull/98741/)
667 - [More derive output improvements](https://github.com/rust-lang/rust/pull/98758/)
668 - [Clarify deriving code](https://github.com/rust-lang/rust/pull/98915/)
669 - [Final derive output improvements](https://github.com/rust-lang/rust/pull/99046/)
670 - [Stop injecting `#[allow(unused_qualifications)]` in generated `derive` implementations](https://github.com/rust-lang/rust/pull/99485/)
671 - [Improve `derive(Debug)`](https://github.com/rust-lang/rust/pull/98190/)
672 - [Bump to clap 3](https://github.com/rust-lang/rust/pull/98213/)
673 - [fully move dropck to mir](https://github.com/rust-lang/rust/pull/98641/)
674 - [Optimize `Vec::insert` for the case where `index == len`.](https://github.com/rust-lang/rust/pull/98755/)
675 - [Convert rust-analyzer to an in-tree tool](https://github.com/rust-lang/rust/pull/99603/)
676
677 Version 1.63.0 (2022-08-11)
678 ==========================
679
680 Language
681 --------
682 - [Remove migrate borrowck mode for pre-NLL errors.][95565]
683 - [Modify MIR building to drop repeat expressions with length zero.][95953]
684 - [Remove label/lifetime shadowing warnings.][96296]
685 - [Allow explicit generic arguments in the presence of `impl Trait` args.][96868]
686 - [Make `cenum_impl_drop_cast` warnings deny-by-default.][97652]
687 - [Prevent unwinding when `-C panic=abort` is used regardless of declared ABI.][96959]
688 - [lub: don't bail out due to empty binders.][97867]
689
690 Compiler
691 --------
692 - [Stabilize the `bundle` native library modifier,][95818] also removing the
693 deprecated `static-nobundle` linking kind.
694 - [Add Apple WatchOS compile targets\*.][95243]
695 - [Add a Windows application manifest to rustc-main.][96737]
696
697 \* Refer to Rust's [platform support page][platform-support-doc] for more
698 information on Rust's tiered platform support.
699
700 Libraries
701 ---------
702 - [Implement `Copy`, `Clone`, `PartialEq` and `Eq` for `core::fmt::Alignment`.][94530]
703 - [Extend `ptr::null` and `null_mut` to all thin (including extern) types.][94954]
704 - [`impl Read and Write for VecDeque<u8>`.][95632]
705 - [STD support for the Nintendo 3DS.][95897]
706 - [Use rounding in float to Duration conversion methods.][96051]
707 - [Make write/print macros eagerly drop temporaries.][96455]
708 - [Implement internal traits that enable `[OsStr]::join`.][96881]
709 - [Implement `Hash` for `core::alloc::Layout`.][97034]
710 - [Add capacity documentation for `OsString`.][97202]
711 - [Put a bound on collection misbehavior.][97316]
712 - [Make `std::mem::needs_drop` accept `?Sized`.][97675]
713 - [`impl Termination for Infallible` and then make the `Result` impls of `Termination` more generic.][97803]
714 - [Document Rust's stance on `/proc/self/mem`.][97837]
715
716 Stabilized APIs
717 ---------------
718
719 - [`array::from_fn`]
720 - [`Box::into_pin`]
721 - [`BinaryHeap::try_reserve`]
722 - [`BinaryHeap::try_reserve_exact`]
723 - [`OsString::try_reserve`]
724 - [`OsString::try_reserve_exact`]
725 - [`PathBuf::try_reserve`]
726 - [`PathBuf::try_reserve_exact`]
727 - [`Path::try_exists`]
728 - [`Ref::filter_map`]
729 - [`RefMut::filter_map`]
730 - [`NonNull::<[T]>::len`][`NonNull::<slice>::len`]
731 - [`ToOwned::clone_into`]
732 - [`Ipv6Addr::to_ipv4_mapped`]
733 - [`unix::io::AsFd`]
734 - [`unix::io::BorrowedFd<'fd>`]
735 - [`unix::io::OwnedFd`]
736 - [`windows::io::AsHandle`]
737 - [`windows::io::BorrowedHandle<'handle>`]
738 - [`windows::io::OwnedHandle`]
739 - [`windows::io::HandleOrInvalid`]
740 - [`windows::io::HandleOrNull`]
741 - [`windows::io::InvalidHandleError`]
742 - [`windows::io::NullHandleError`]
743 - [`windows::io::AsSocket`]
744 - [`windows::io::BorrowedSocket<'handle>`]
745 - [`windows::io::OwnedSocket`]
746 - [`thread::scope`]
747 - [`thread::Scope`]
748 - [`thread::ScopedJoinHandle`]
749
750 These APIs are now usable in const contexts:
751
752 - [`array::from_ref`]
753 - [`slice::from_ref`]
754 - [`intrinsics::copy`]
755 - [`intrinsics::copy_nonoverlapping`]
756 - [`<*const T>::copy_to`]
757 - [`<*const T>::copy_to_nonoverlapping`]
758 - [`<*mut T>::copy_to`]
759 - [`<*mut T>::copy_to_nonoverlapping`]
760 - [`<*mut T>::copy_from`]
761 - [`<*mut T>::copy_from_nonoverlapping`]
762 - [`str::from_utf8`]
763 - [`Utf8Error::error_len`]
764 - [`Utf8Error::valid_up_to`]
765 - [`Condvar::new`]
766 - [`Mutex::new`]
767 - [`RwLock::new`]
768
769 Cargo
770 -----
771 - [Stabilize the `--config path` command-line argument.][cargo/10755]
772 - [Expose rust-version in the environment as `CARGO_PKG_RUST_VERSION`.][cargo/10713]
773
774 Compatibility Notes
775 -------------------
776
777 - [`#[link]` attributes are now checked more strictly,][96885] which may introduce
778 errors for invalid attribute arguments that were previously ignored.
779 - [Rounding is now used when converting a float to a `Duration`.][96051] The converted
780 duration can differ slightly from what it was.
781
782 Internal Changes
783 ----------------
784
785 These changes provide no direct user facing benefits, but represent significant
786 improvements to the internals and overall performance of rustc
787 and related tools.
788
789 - [Prepare Rust for LLVM opaque pointers.][94214]
790
791 [94214]: https://github.com/rust-lang/rust/pull/94214/
792 [94530]: https://github.com/rust-lang/rust/pull/94530/
793 [94954]: https://github.com/rust-lang/rust/pull/94954/
794 [95243]: https://github.com/rust-lang/rust/pull/95243/
795 [95565]: https://github.com/rust-lang/rust/pull/95565/
796 [95632]: https://github.com/rust-lang/rust/pull/95632/
797 [95818]: https://github.com/rust-lang/rust/pull/95818/
798 [95897]: https://github.com/rust-lang/rust/pull/95897/
799 [95953]: https://github.com/rust-lang/rust/pull/95953/
800 [96051]: https://github.com/rust-lang/rust/pull/96051/
801 [96296]: https://github.com/rust-lang/rust/pull/96296/
802 [96455]: https://github.com/rust-lang/rust/pull/96455/
803 [96737]: https://github.com/rust-lang/rust/pull/96737/
804 [96868]: https://github.com/rust-lang/rust/pull/96868/
805 [96881]: https://github.com/rust-lang/rust/pull/96881/
806 [96885]: https://github.com/rust-lang/rust/pull/96885/
807 [96959]: https://github.com/rust-lang/rust/pull/96959/
808 [97034]: https://github.com/rust-lang/rust/pull/97034/
809 [97202]: https://github.com/rust-lang/rust/pull/97202/
810 [97316]: https://github.com/rust-lang/rust/pull/97316/
811 [97652]: https://github.com/rust-lang/rust/pull/97652/
812 [97675]: https://github.com/rust-lang/rust/pull/97675/
813 [97803]: https://github.com/rust-lang/rust/pull/97803/
814 [97837]: https://github.com/rust-lang/rust/pull/97837/
815 [97867]: https://github.com/rust-lang/rust/pull/97867/
816 [cargo/10713]: https://github.com/rust-lang/cargo/pull/10713/
817 [cargo/10755]: https://github.com/rust-lang/cargo/pull/10755/
818
819 [`array::from_fn`]: https://doc.rust-lang.org/stable/std/array/fn.from_fn.html
820 [`Box::into_pin`]: https://doc.rust-lang.org/stable/std/boxed/struct.Box.html#method.into_pin
821 [`BinaryHeap::try_reserve_exact`]: https://doc.rust-lang.org/stable/alloc/collections/binary_heap/struct.BinaryHeap.html#method.try_reserve_exact
822 [`BinaryHeap::try_reserve`]: https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.try_reserve
823 [`OsString::try_reserve`]: https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.try_reserve
824 [`OsString::try_reserve_exact`]: https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.try_reserve_exact
825 [`PathBuf::try_reserve`]: https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.try_reserve
826 [`PathBuf::try_reserve_exact`]: https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.try_reserve_exact
827 [`Path::try_exists`]: https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.try_exists
828 [`Ref::filter_map`]: https://doc.rust-lang.org/stable/std/cell/struct.Ref.html#method.filter_map
829 [`RefMut::filter_map`]: https://doc.rust-lang.org/stable/std/cell/struct.RefMut.html#method.filter_map
830 [`NonNull::<slice>::len`]: https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.len
831 [`ToOwned::clone_into`]: https://doc.rust-lang.org/stable/std/borrow/trait.ToOwned.html#method.clone_into
832 [`Ipv6Addr::to_ipv4_mapped`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.to_ipv4_mapped
833 [`unix::io::AsFd`]: https://doc.rust-lang.org/stable/std/os/unix/io/trait.AsFd.html
834 [`unix::io::BorrowedFd<'fd>`]: https://doc.rust-lang.org/stable/std/os/unix/io/struct.BorrowedFd.html
835 [`unix::io::OwnedFd`]: https://doc.rust-lang.org/stable/std/os/unix/io/struct.OwnedFd.html
836 [`windows::io::AsHandle`]: https://doc.rust-lang.org/stable/std/os/windows/io/trait.AsHandle.html
837 [`windows::io::BorrowedHandle<'handle>`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.BorrowedHandle.html
838 [`windows::io::OwnedHandle`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedHandle.html
839 [`windows::io::HandleOrInvalid`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.HandleOrInvalid.html
840 [`windows::io::HandleOrNull`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.HandleOrNull.html
841 [`windows::io::InvalidHandleError`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.InvalidHandleError.html
842 [`windows::io::NullHandleError`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.NullHandleError.html
843 [`windows::io::AsSocket`]: https://doc.rust-lang.org/stable/std/os/windows/io/trait.AsSocket.html
844 [`windows::io::BorrowedSocket<'handle>`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.BorrowedSocket.html
845 [`windows::io::OwnedSocket`]: https://doc.rust-lang.org/stable/std/os/windows/io/struct.OwnedSocket.html
846 [`thread::scope`]: https://doc.rust-lang.org/stable/std/thread/fn.scope.html
847 [`thread::Scope`]: https://doc.rust-lang.org/stable/std/thread/struct.Scope.html
848 [`thread::ScopedJoinHandle`]: https://doc.rust-lang.org/stable/std/thread/struct.ScopedJoinHandle.html
849
850 [`array::from_ref`]: https://doc.rust-lang.org/stable/std/array/fn.from_ref.html
851 [`slice::from_ref`]: https://doc.rust-lang.org/stable/std/slice/fn.from_ref.html
852 [`intrinsics::copy`]: https://doc.rust-lang.org/stable/std/intrinsics/fn.copy.html
853 [`intrinsics::copy_nonoverlapping`]: https://doc.rust-lang.org/stable/std/intrinsics/fn.copy_nonoverlapping.html
854 [`<*const T>::copy_to`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_to
855 [`<*const T>::copy_to_nonoverlapping`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_to_nonoverlapping
856 [`<*mut T>::copy_to`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_to-1
857 [`<*mut T>::copy_to_nonoverlapping`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_to_nonoverlapping-1
858 [`<*mut T>::copy_from`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_from
859 [`<*mut T>::copy_from_nonoverlapping`]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.copy_from_nonoverlapping
860 [`str::from_utf8`]: https://doc.rust-lang.org/stable/std/str/fn.from_utf8.html
861 [`Utf8Error::error_len`]: https://doc.rust-lang.org/stable/std/str/struct.Utf8Error.html#method.error_len
862 [`Utf8Error::valid_up_to`]: https://doc.rust-lang.org/stable/std/str/struct.Utf8Error.html#method.valid_up_to
863 [`Condvar::new`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.new
864 [`Mutex::new`]: https://doc.rust-lang.org/stable/std/sync/struct.Mutex.html#method.new
865 [`RwLock::new`]: https://doc.rust-lang.org/stable/std/sync/struct.RwLock.html#method.new
866
867 Version 1.62.1 (2022-07-19)
868 ==========================
869
870 Rust 1.62.1 addresses a few recent regressions in the compiler and standard
871 library, and also mitigates a CPU vulnerability on Intel SGX.
872
873 * [The compiler fixed unsound function coercions involving `impl Trait` return types.][98608]
874 * [The compiler fixed an incremental compilation bug with `async fn` lifetimes.][98890]
875 * [Windows added a fallback for overlapped I/O in synchronous reads and writes.][98950]
876 * [The `x86_64-fortanix-unknown-sgx` target added a mitigation for the
877 MMIO stale data vulnerability][98126], advisory [INTEL-SA-00615].
878
879 [98608]: https://github.com/rust-lang/rust/issues/98608
880 [98890]: https://github.com/rust-lang/rust/issues/98890
881 [98950]: https://github.com/rust-lang/rust/pull/98950
882 [98126]: https://github.com/rust-lang/rust/pull/98126
883 [INTEL-SA-00615]: https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00615.html
884
885 Version 1.62.0 (2022-06-30)
886 ==========================
887
888 Language
889 --------
890
891 - [Stabilize `#[derive(Default)]` on enums with a `#[default]` variant][94457]
892 - [Teach flow sensitive checks that visibly uninhabited call expressions never return][93313]
893 - [Fix constants not getting dropped if part of a diverging expression][94775]
894 - [Support unit struct/enum variant in destructuring assignment][95380]
895 - [Remove mutable_borrow_reservation_conflict lint and allow the code pattern][96268]
896 - [`const` functions may now specify `extern "C"` or `extern "Rust"`][95346]
897
898 Compiler
899 --------
900
901 - [linker: Stop using whole-archive on dependencies of dylibs][96436]
902 - [Make `unaligned_references` lint deny-by-default][95372]
903 This lint is also a future compatibility lint, and is expected to eventually
904 become a hard error.
905 - [Only add codegen backend to dep info if -Zbinary-dep-depinfo is used][93969]
906 - [Reject `#[thread_local]` attribute on non-static items][95006]
907 - [Add tier 3 `aarch64-pc-windows-gnullvm` and `x86_64-pc-windows-gnullvm` targets\*][94872]
908 - [Implement a lint to warn about unused macro rules][96150]
909 - [Promote `x86_64-unknown-none` target to Tier 2\*][95705]
910
911 \* Refer to Rust's [platform support page][platform-support-doc] for more
912 information on Rust's tiered platform support.
913
914 Libraries
915 ---------
916
917 - [Windows: Use a pipe relay for chaining pipes][95841]
918 - [Replace Linux Mutex and Condvar with futex based ones.][95035]
919 - [Replace RwLock by a futex based one on Linux][95801]
920 - [std: directly use pthread in UNIX parker implementation][96393]
921
922 Stabilized APIs
923 ---------------
924
925 - [`bool::then_some`]
926 - [`f32::total_cmp`]
927 - [`f64::total_cmp`]
928 - [`Stdin::lines`]
929 - [`windows::CommandExt::raw_arg`]
930 - [`impl<T: Default> Default for AssertUnwindSafe<T>`]
931 - [`From<Rc<str>> for Rc<[u8]>`][rc-u8-from-str]
932 - [`From<Arc<str>> for Arc<[u8]>`][arc-u8-from-str]
933 - [`FusedIterator for EncodeWide`]
934 - [RDM intrinsics on aarch64][stdarch/1285]
935
936 Clippy
937 ------
938
939 - [Create clippy lint against unexpectedly late drop for temporaries in match scrutinee expressions][94206]
940
941 Cargo
942 -----
943
944 - Added the `cargo add` command for adding dependencies to `Cargo.toml` from
945 the command-line.
946 [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-add.html)
947 - Package ID specs now support `name@version` syntax in addition to the
948 previous `name:version` to align with the behavior in `cargo add` and other
949 tools. `cargo install` and `cargo yank` also now support this syntax so the
950 version does not need to passed as a separate flag.
951 - The `git` and `registry` directories in Cargo's home directory (usually
952 `~/.cargo`) are now marked as cache directories so that they are not
953 included in backups or content indexing (on Windows).
954 - Added automatic `@` argfile support, which will use "response files" if the
955 command-line to `rustc` exceeds the operating system's limit.
956
957 Compatibility Notes
958 -------------------
959
960 - `cargo test` now passes `--target` to `rustdoc` if the specified target is
961 the same as the host target.
962 [#10594](https://github.com/rust-lang/cargo/pull/10594)
963 - [rustdoc: doctests are now run on unexported `macro_rules!` macros, matching other private items][96630]
964 - [rustdoc: Remove .woff font files][96279]
965 - [Enforce Copy bounds for repeat elements while considering lifetimes][95819]
966 - [Windows: Fix potentinal unsoundness by aborting if `File` reads or writes cannot
967 complete synchronously][95469].
968
969 Internal Changes
970 ----------------
971
972 - [Unify ReentrantMutex implementations across all platforms][96042]
973
974 These changes provide no direct user facing benefits, but represent significant
975 improvements to the internals and overall performance of rustc
976 and related tools.
977
978 [93313]: https://github.com/rust-lang/rust/pull/93313/
979 [93969]: https://github.com/rust-lang/rust/pull/93969/
980 [94206]: https://github.com/rust-lang/rust/pull/94206/
981 [94457]: https://github.com/rust-lang/rust/pull/94457/
982 [94775]: https://github.com/rust-lang/rust/pull/94775/
983 [94872]: https://github.com/rust-lang/rust/pull/94872/
984 [95006]: https://github.com/rust-lang/rust/pull/95006/
985 [95035]: https://github.com/rust-lang/rust/pull/95035/
986 [95346]: https://github.com/rust-lang/rust/pull/95346/
987 [95372]: https://github.com/rust-lang/rust/pull/95372/
988 [95380]: https://github.com/rust-lang/rust/pull/95380/
989 [95431]: https://github.com/rust-lang/rust/pull/95431/
990 [95469]: https://github.com/rust-lang/rust/pull/95469/
991 [95705]: https://github.com/rust-lang/rust/pull/95705/
992 [95801]: https://github.com/rust-lang/rust/pull/95801/
993 [95819]: https://github.com/rust-lang/rust/pull/95819/
994 [95841]: https://github.com/rust-lang/rust/pull/95841/
995 [96042]: https://github.com/rust-lang/rust/pull/96042/
996 [96150]: https://github.com/rust-lang/rust/pull/96150/
997 [96268]: https://github.com/rust-lang/rust/pull/96268/
998 [96279]: https://github.com/rust-lang/rust/pull/96279/
999 [96393]: https://github.com/rust-lang/rust/pull/96393/
1000 [96436]: https://github.com/rust-lang/rust/pull/96436/
1001 [96557]: https://github.com/rust-lang/rust/pull/96557/
1002 [96630]: https://github.com/rust-lang/rust/pull/96630/
1003
1004 [`bool::then_some`]: https://doc.rust-lang.org/stable/std/primitive.bool.html#method.then_some
1005 [`f32::total_cmp`]: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.total_cmp
1006 [`f64::total_cmp`]: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.total_cmp
1007 [`Stdin::lines`]: https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#method.lines
1008 [`impl<T: Default> Default for AssertUnwindSafe<T>`]: https://doc.rust-lang.org/stable/std/panic/struct.AssertUnwindSafe.html#impl-Default
1009 [rc-u8-from-str]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#impl-From%3CRc%3Cstr%3E%3E
1010 [arc-u8-from-str]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#impl-From%3CArc%3Cstr%3E%3E
1011 [stdarch/1285]: https://github.com/rust-lang/stdarch/pull/1285
1012 [`windows::CommandExt::raw_arg`]: https://doc.rust-lang.org/stable/std/os/windows/process/trait.CommandExt.html#tymethod.raw_arg
1013 [`FusedIterator for EncodeWide`]: https://doc.rust-lang.org/stable/std/os/windows/ffi/struct.EncodeWide.html#impl-FusedIterator
1014
1015 Version 1.61.0 (2022-05-19)
1016 ==========================
1017
1018 Language
1019 --------
1020
1021 - [`const fn` signatures can now include generic trait bounds][93827]
1022 - [`const fn` signatures can now use `impl Trait` in argument and return position][93827]
1023 - [Function pointers can now be created, cast, and passed around in a `const fn`][93827]
1024 - [Recursive calls can now set the value of a function's opaque `impl Trait` return type][94081]
1025
1026 Compiler
1027 --------
1028
1029 - [Linking modifier syntax in `#[link]` attributes and on the command line, as well as the `whole-archive` modifier specifically, are now supported][93901]
1030 - [The `char` type is now described as UTF-32 in debuginfo][89887]
1031 - The [`#[target_feature]`][target_feature] attribute [can now be used with aarch64 features][90621]
1032 - X86 [`#[target_feature = "adx"]` is now stable][93745]
1033
1034 Libraries
1035 ---------
1036
1037 - [`ManuallyDrop<T>` is now documented to have the same layout as `T`][88375]
1038 - [`#[ignore = "…"]` messages are printed when running tests][92714]
1039 - [Consistently show absent stdio handles on Windows as NULL handles][93263]
1040 - [Make `std::io::stdio::lock()` return `'static` handles.][93965] Previously, the creation of locked handles to stdin/stdout/stderr would borrow the handles being locked, which prevented writing `let out = std::io::stdout().lock();` because `out` would outlive the return value of `stdout()`. Such code now works, eliminating a common pitfall that affected many Rust users.
1041 - [`Vec::from_raw_parts` is now less restrictive about its inputs][95016]
1042 - [`std::thread::available_parallelism` now takes cgroup quotas into account.][92697] Since `available_parallelism` is often used to create a thread pool for parallel computation, which may be CPU-bound for performance, `available_parallelism` will return a value consistent with the ability to use that many threads continuously, if possible. For instance, in a container with 8 virtual CPUs but quotas only allowing for 50% usage, `available_parallelism` will return 4.
1043
1044 Stabilized APIs
1045 ---------------
1046
1047 - [`Pin::static_mut`]
1048 - [`Pin::static_ref`]
1049 - [`Vec::retain_mut`]
1050 - [`VecDeque::retain_mut`]
1051 - [`Write` for `Cursor<[u8; N]>`][cursor-write-array]
1052 - [`std::os::unix::net::SocketAddr::from_pathname`]
1053 - [`std::process::ExitCode`] and [`std::process::Termination`]. The stabilization of these two APIs now makes it possible for programs to return errors from `main` with custom exit codes.
1054 - [`std::thread::JoinHandle::is_finished`]
1055
1056 These APIs are now usable in const contexts:
1057
1058 - [`<*const T>::offset` and `<*mut T>::offset`][ptr-offset]
1059 - [`<*const T>::wrapping_offset` and `<*mut T>::wrapping_offset`][ptr-wrapping_offset]
1060 - [`<*const T>::add` and `<*mut T>::add`][ptr-add]
1061 - [`<*const T>::sub` and `<*mut T>::sub`][ptr-sub]
1062 - [`<*const T>::wrapping_add` and `<*mut T>::wrapping_add`][ptr-wrapping_add]
1063 - [`<*const T>::wrapping_sub` and `<*mut T>::wrapping_sub`][ptr-wrapping_sub]
1064 - [`<[T]>::as_mut_ptr`][slice-as_mut_ptr]
1065 - [`<[T]>::as_ptr_range`][slice-as_ptr_range]
1066 - [`<[T]>::as_mut_ptr_range`][slice-as_mut_ptr_range]
1067
1068 Cargo
1069 -----
1070
1071 No feature changes, but see compatibility notes.
1072
1073 Compatibility Notes
1074 -------------------
1075
1076 - Previously native static libraries were linked as `whole-archive` in some cases, but now rustc tries not to use `whole-archive` unless explicitly requested. This [change][93901] may result in linking errors in some cases. To fix such errors, native libraries linked from the command line, build scripts, or [`#[link]` attributes][link-attr] need to
1077 - (more common) either be reordered to respect dependencies between them (if `a` depends on `b` then `a` should go first and `b` second)
1078 - (less common) or be updated to use the [`+whole-archive`] modifier.
1079 - [Catching a second unwind from FFI code while cleaning up from a Rust panic now causes the process to abort][92911]
1080 - [Proc macros no longer see `ident` matchers wrapped in groups][92472]
1081 - [The number of `#` in `r#` raw string literals is now required to be less than 256][95251]
1082 - [When checking that a dyn type satisfies a trait bound, supertrait bounds are now enforced][92285]
1083 - [`cargo vendor` now only accepts one value for each `--sync` flag][cargo/10448]
1084 - [`cfg` predicates in `all()` and `any()` are always evaluated to detect errors, instead of short-circuiting.][94295] The compatibility considerations here arise in nightly-only code that used the short-circuiting behavior of `all` to write something like `cfg(all(feature = "nightly", syntax-requiring-nightly))`, which will now fail to compile. Instead, use either `cfg_attr(feature = "nightly", ...)` or nested uses of `cfg`.
1085 - [bootstrap: static-libstdcpp is now enabled by default, and can now be disabled when llvm-tools is enabled][94832]
1086
1087 Internal Changes
1088 ----------------
1089
1090 These changes provide no direct user facing benefits, but represent significant
1091 improvements to the internals and overall performance of rustc
1092 and related tools.
1093
1094 - [debuginfo: Refactor debuginfo generation for types][94261]
1095 - [Remove the everybody loops pass][93913]
1096
1097 [88375]: https://github.com/rust-lang/rust/pull/88375/
1098 [89887]: https://github.com/rust-lang/rust/pull/89887/
1099 [90621]: https://github.com/rust-lang/rust/pull/90621/
1100 [92285]: https://github.com/rust-lang/rust/pull/92285/
1101 [92472]: https://github.com/rust-lang/rust/pull/92472/
1102 [92697]: https://github.com/rust-lang/rust/pull/92697/
1103 [92714]: https://github.com/rust-lang/rust/pull/92714/
1104 [92911]: https://github.com/rust-lang/rust/pull/92911/
1105 [93263]: https://github.com/rust-lang/rust/pull/93263/
1106 [93745]: https://github.com/rust-lang/rust/pull/93745/
1107 [93827]: https://github.com/rust-lang/rust/pull/93827/
1108 [93901]: https://github.com/rust-lang/rust/pull/93901/
1109 [93913]: https://github.com/rust-lang/rust/pull/93913/
1110 [93965]: https://github.com/rust-lang/rust/pull/93965/
1111 [94081]: https://github.com/rust-lang/rust/pull/94081/
1112 [94261]: https://github.com/rust-lang/rust/pull/94261/
1113 [94295]: https://github.com/rust-lang/rust/pull/94295/
1114 [94832]: https://github.com/rust-lang/rust/pull/94832/
1115 [95016]: https://github.com/rust-lang/rust/pull/95016/
1116 [95251]: https://github.com/rust-lang/rust/pull/95251/
1117 [`+whole-archive`]: https://doc.rust-lang.org/stable/rustc/command-line-arguments.html#linking-modifiers-whole-archive
1118 [`Pin::static_mut`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_mut
1119 [`Pin::static_ref`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_ref
1120 [`Vec::retain_mut`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.retain_mut
1121 [`VecDeque::retain_mut`]: https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.retain_mut
1122 [`std::os::unix::net::SocketAddr::from_pathname`]: https://doc.rust-lang.org/stable/std/os/unix/net/struct.SocketAddr.html#method.from_pathname
1123 [`std::process::ExitCode`]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html
1124 [`std::process::Termination`]: https://doc.rust-lang.org/stable/std/process/trait.Termination.html
1125 [`std::thread::JoinHandle::is_finished`]: https://doc.rust-lang.org/stable/std/thread/struct.JoinHandle.html#method.is_finished
1126 [cargo/10448]: https://github.com/rust-lang/cargo/pull/10448/
1127 [cursor-write-array]: https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#impl-Write-4
1128 [link-attr]: https://doc.rust-lang.org/stable/reference/items/external-blocks.html#the-link-attribute
1129 [ptr-add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.add
1130 [ptr-offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset
1131 [ptr-sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.sub
1132 [ptr-wrapping_add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_add
1133 [ptr-wrapping_offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_offset
1134 [ptr-wrapping_sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_sub
1135 [slice-as_mut_ptr]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr
1136 [slice-as_mut_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr_range
1137 [slice-as_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_ptr_range
1138 [target_feature]: https://doc.rust-lang.org/reference/attributes/codegen.html#the-target_feature-attribute
1139
1140
1141 Version 1.60.0 (2022-04-07)
1142 ==========================
1143
1144 Language
1145 --------
1146 - [Stabilize `#[cfg(panic = "...")]` for either `"unwind"` or `"abort"`.][93658]
1147 - [Stabilize `#[cfg(target_has_atomic = "...")]` for each integer size and `"ptr"`.][93824]
1148
1149 Compiler
1150 --------
1151 - [Enable combining `+crt-static` and `relocation-model=pic` on `x86_64-unknown-linux-gnu`][86374]
1152 - [Fixes wrong `unreachable_pub` lints on nested and glob public reexport][87487]
1153 - [Stabilize `-Z instrument-coverage` as `-C instrument-coverage`][90132]
1154 - [Stabilize `-Z print-link-args` as `--print link-args`][91606]
1155 - [Add new Tier 3 target `mips64-openwrt-linux-musl`\*][92300]
1156 - [Add new Tier 3 target `armv7-unknown-linux-uclibceabi` (softfloat)\*][92383]
1157 - [Fix invalid removal of newlines from doc comments][92357]
1158 - [Add kernel target for RustyHermit][92670]
1159 - [Deny mixing bin crate type with lib crate types][92933]
1160 - [Make rustc use `RUST_BACKTRACE=full` by default][93566]
1161 - [Upgrade to LLVM 14][93577]
1162
1163 \* Refer to Rust's [platform support page][platform-support-doc] for more
1164 information on Rust's tiered platform support.
1165
1166 Libraries
1167 ---------
1168 - [Guarantee call order for `sort_by_cached_key`][89621]
1169 - [Improve `Duration::try_from_secs_f32`/`f64` accuracy by directly processing exponent and mantissa][90247]
1170 - [Make `Instant::{duration_since, elapsed, sub}` saturating][89926]
1171 - [Remove non-monotonic clocks workarounds in `Instant::now`][89926]
1172 - [Make `BuildHasherDefault`, `iter::Empty` and `future::Pending` covariant][92630]
1173
1174 Stabilized APIs
1175 ---------------
1176 - [`Arc::new_cyclic`][arc_new_cyclic]
1177 - [`Rc::new_cyclic`][rc_new_cyclic]
1178 - [`slice::EscapeAscii`][slice_escape_ascii]
1179 - [`<[u8]>::escape_ascii`][slice_u8_escape_ascii]
1180 - [`u8::escape_ascii`][u8_escape_ascii]
1181 - [`Vec::spare_capacity_mut`][vec_spare_capacity_mut]
1182 - [`MaybeUninit::assume_init_drop`][assume_init_drop]
1183 - [`MaybeUninit::assume_init_read`][assume_init_read]
1184 - [`i8::abs_diff`][i8_abs_diff]
1185 - [`i16::abs_diff`][i16_abs_diff]
1186 - [`i32::abs_diff`][i32_abs_diff]
1187 - [`i64::abs_diff`][i64_abs_diff]
1188 - [`i128::abs_diff`][i128_abs_diff]
1189 - [`isize::abs_diff`][isize_abs_diff]
1190 - [`u8::abs_diff`][u8_abs_diff]
1191 - [`u16::abs_diff`][u16_abs_diff]
1192 - [`u32::abs_diff`][u32_abs_diff]
1193 - [`u64::abs_diff`][u64_abs_diff]
1194 - [`u128::abs_diff`][u128_abs_diff]
1195 - [`usize::abs_diff`][usize_abs_diff]
1196 - [`Display for io::ErrorKind`][display_error_kind]
1197 - [`From<u8> for ExitCode`][from_u8_exit_code]
1198 - [`Not for !` (the "never" type)][not_never]
1199 - [_Op_`Assign<$t> for Wrapping<$t>`][wrapping_assign_ops]
1200 - [`arch::is_aarch64_feature_detected!`][is_aarch64_feature_detected]
1201
1202 Cargo
1203 -----
1204 - [Port cargo from `toml-rs` to `toml_edit`][cargo/10086]
1205 - [Stabilize `-Ztimings` as `--timings`][cargo/10245]
1206 - [Stabilize namespaced and weak dependency features.][cargo/10269]
1207 - [Accept more `cargo:rustc-link-arg-*` types from build script output.][cargo/10274]
1208 - [cargo-new should not add ignore rule on Cargo.lock inside subdirs][cargo/10379]
1209
1210 Misc
1211 ----
1212 - [Ship docs on Tier 2 platforms by reusing the closest Tier 1 platform docs][92800]
1213 - [Drop rustc-docs from complete profile][93742]
1214 - [bootstrap: tidy up flag handling for llvm build][93918]
1215
1216 Compatibility Notes
1217 -------------------
1218 - [Remove compiler-rt linking hack on Android][83822]
1219 - [Mitigations for platforms with non-monotonic clocks have been removed from
1220 `Instant::now`][89926]. On platforms that don't provide monotonic clocks, an
1221 instant is not guaranteed to be greater than an earlier instant anymore.
1222 - [`Instant::{duration_since, elapsed, sub}` do not panic anymore on underflow,
1223 saturating to `0` instead][89926]. In the real world the panic happened mostly
1224 on platforms with buggy monotonic clock implementations rather than catching
1225 programming errors like reversing the start and end times. Such programming
1226 errors will now results in `0` rather than a panic.
1227 - In a future release we're planning to increase the baseline requirements for
1228 the Linux kernel to version 3.2, and for glibc to version 2.17. We'd love
1229 your feedback in [PR #95026][95026].
1230
1231 Internal Changes
1232 ----------------
1233
1234 These changes provide no direct user facing benefits, but represent significant
1235 improvements to the internals and overall performance of rustc
1236 and related tools.
1237
1238 - [Switch all libraries to the 2021 edition][92068]
1239
1240 [83822]: https://github.com/rust-lang/rust/pull/83822
1241 [86374]: https://github.com/rust-lang/rust/pull/86374
1242 [87487]: https://github.com/rust-lang/rust/pull/87487
1243 [89621]: https://github.com/rust-lang/rust/pull/89621
1244 [89926]: https://github.com/rust-lang/rust/pull/89926
1245 [90132]: https://github.com/rust-lang/rust/pull/90132
1246 [90247]: https://github.com/rust-lang/rust/pull/90247
1247 [91606]: https://github.com/rust-lang/rust/pull/91606
1248 [92068]: https://github.com/rust-lang/rust/pull/92068
1249 [92300]: https://github.com/rust-lang/rust/pull/92300
1250 [92357]: https://github.com/rust-lang/rust/pull/92357
1251 [92383]: https://github.com/rust-lang/rust/pull/92383
1252 [92630]: https://github.com/rust-lang/rust/pull/92630
1253 [92670]: https://github.com/rust-lang/rust/pull/92670
1254 [92800]: https://github.com/rust-lang/rust/pull/92800
1255 [92933]: https://github.com/rust-lang/rust/pull/92933
1256 [93566]: https://github.com/rust-lang/rust/pull/93566
1257 [93577]: https://github.com/rust-lang/rust/pull/93577
1258 [93658]: https://github.com/rust-lang/rust/pull/93658
1259 [93742]: https://github.com/rust-lang/rust/pull/93742
1260 [93824]: https://github.com/rust-lang/rust/pull/93824
1261 [93918]: https://github.com/rust-lang/rust/pull/93918
1262 [95026]: https://github.com/rust-lang/rust/pull/95026
1263
1264 [cargo/10086]: https://github.com/rust-lang/cargo/pull/10086
1265 [cargo/10245]: https://github.com/rust-lang/cargo/pull/10245
1266 [cargo/10269]: https://github.com/rust-lang/cargo/pull/10269
1267 [cargo/10274]: https://github.com/rust-lang/cargo/pull/10274
1268 [cargo/10379]: https://github.com/rust-lang/cargo/pull/10379
1269
1270 [arc_new_cyclic]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.new_cyclic
1271 [rc_new_cyclic]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.new_cyclic
1272 [slice_escape_ascii]: https://doc.rust-lang.org/stable/std/slice/struct.EscapeAscii.html
1273 [slice_u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.escape_ascii
1274 [u8_escape_ascii]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.escape_ascii
1275 [vec_spare_capacity_mut]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.spare_capacity_mut
1276 [assume_init_drop]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_drop
1277 [assume_init_read]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_read
1278 [i8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.abs_diff
1279 [i16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.abs_diff
1280 [i32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.abs_diff
1281 [i64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.abs_diff
1282 [i128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.abs_diff
1283 [isize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.abs_diff
1284 [u8_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.abs_diff
1285 [u16_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.abs_diff
1286 [u32_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.abs_diff
1287 [u64_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.abs_diff
1288 [u128_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.abs_diff
1289 [usize_abs_diff]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.abs_diff
1290 [display_error_kind]: https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#impl-Display
1291 [from_u8_exit_code]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html#impl-From%3Cu8%3E
1292 [not_never]: https://doc.rust-lang.org/stable/std/primitive.never.html#impl-Not
1293 [wrapping_assign_ops]: https://doc.rust-lang.org/stable/std/num/struct.Wrapping.html#trait-implementations
1294 [is_aarch64_feature_detected]: https://doc.rust-lang.org/stable/std/arch/macro.is_aarch64_feature_detected.html
1295
1296 Version 1.59.0 (2022-02-24)
1297 ==========================
1298
1299 Language
1300 --------
1301
1302 - [Stabilize default arguments for const parameters and remove the ordering restriction for type and const parameters][90207]
1303 - [Stabilize destructuring assignment][90521]
1304 - [Relax private in public lint on generic bounds and where clauses of trait impls][90586]
1305 - [Stabilize asm! and global_asm! for x86, x86_64, ARM, Aarch64, and RISC-V][91728]
1306
1307 Compiler
1308 --------
1309
1310 - [Stabilize new symbol mangling format, leaving it opt-in (-Csymbol-mangling-version=v0)][90128]
1311 - [Emit LLVM optimization remarks when enabled with `-Cremark`][90833]
1312 - [Fix sparc64 ABI for aggregates with floating point members][91003]
1313 - [Warn when a `#[test]`-like built-in attribute macro is present multiple times.][91172]
1314 - [Add support for riscv64gc-unknown-freebsd][91284]
1315 - [Stabilize `-Z emit-future-incompat` as `--json future-incompat`][91535]
1316 - [Soft disable incremental compilation][94124]
1317
1318 This release disables incremental compilation, unless the user has explicitly
1319 opted in via the newly added RUSTC_FORCE_INCREMENTAL=1 environment variable.
1320 This is due to a known and relatively frequently occurring bug in incremental
1321 compilation, which causes builds to issue internal compiler errors. This
1322 particular bug is already fixed on nightly, but that fix has not yet rolled out
1323 to stable and is deemed too risky for a direct stable backport.
1324
1325 As always, we encourage users to test with nightly and report bugs so that we
1326 can track failures and fix issues earlier.
1327
1328 See [94124] for more details.
1329
1330 [94124]: https://github.com/rust-lang/rust/issues/94124
1331
1332 Libraries
1333 ---------
1334
1335 - [Remove unnecessary bounds for some Hash{Map,Set} methods][91593]
1336
1337 Stabilized APIs
1338 ---------------
1339
1340 - [`std::thread::available_parallelism`][available_parallelism]
1341 - [`Result::copied`][result-copied]
1342 - [`Result::cloned`][result-cloned]
1343 - [`arch::asm!`][asm]
1344 - [`arch::global_asm!`][global_asm]
1345 - [`ops::ControlFlow::is_break`][is_break]
1346 - [`ops::ControlFlow::is_continue`][is_continue]
1347 - [`TryFrom<char> for u8`][try_from_char_u8]
1348 - [`char::TryFromCharError`][try_from_char_err]
1349 implementing `Clone`, `Debug`, `Display`, `PartialEq`, `Copy`, `Eq`, `Error`
1350 - [`iter::zip`][zip]
1351 - [`NonZeroU8::is_power_of_two`][is_power_of_two8]
1352 - [`NonZeroU16::is_power_of_two`][is_power_of_two16]
1353 - [`NonZeroU32::is_power_of_two`][is_power_of_two32]
1354 - [`NonZeroU64::is_power_of_two`][is_power_of_two64]
1355 - [`NonZeroU128::is_power_of_two`][is_power_of_two128]
1356 - [`NonZeroUsize::is_power_of_two`][is_power_of_two_usize]
1357 - [`DoubleEndedIterator for ToLowercase`][lowercase]
1358 - [`DoubleEndedIterator for ToUppercase`][uppercase]
1359 - [`TryFrom<&mut [T]> for [T; N]`][tryfrom_ref_arr]
1360 - [`UnwindSafe for Once`][unwindsafe_once]
1361 - [`RefUnwindSafe for Once`][refunwindsafe_once]
1362 - [armv8 neon intrinsics for aarch64][stdarch/1266]
1363
1364 Const-stable:
1365
1366 - [`mem::MaybeUninit::as_ptr`][muninit_ptr]
1367 - [`mem::MaybeUninit::assume_init`][muninit_init]
1368 - [`mem::MaybeUninit::assume_init_ref`][muninit_init_ref]
1369 - [`ffi::CStr::from_bytes_with_nul_unchecked`][cstr_from_bytes]
1370
1371 Cargo
1372 -----
1373
1374 - [Stabilize the `strip` profile option][cargo/10088]
1375 - [Stabilize future-incompat-report][cargo/10165]
1376 - [Support abbreviating `--release` as `-r`][cargo/10133]
1377 - [Support `term.quiet` configuration][cargo/10152]
1378 - [Remove `--host` from cargo {publish,search,login}][cargo/10145]
1379
1380 Compatibility Notes
1381 -------------------
1382
1383 - [Refactor weak symbols in std::sys::unix][90846]
1384 This may add new, versioned, symbols when building with a newer glibc, as the
1385 standard library uses weak linkage rather than dynamically attempting to load
1386 certain symbols at runtime.
1387 - [Deprecate crate_type and crate_name nested inside `#![cfg_attr]`][83744]
1388 This adds a future compatibility lint to supporting the use of cfg_attr
1389 wrapping either crate_type or crate_name specification within Rust files;
1390 it is recommended that users migrate to setting the equivalent command line
1391 flags.
1392 - [Remove effect of `#[no_link]` attribute on name resolution][92034]
1393 This may expose new names, leading to conflicts with preexisting names in a
1394 given namespace and a compilation failure.
1395 - [Cargo will document libraries before binaries.][cargo/10172]
1396 - [Respect doc=false in dependencies, not just the root crate][cargo/10201]
1397 - [Weaken guarantee around advancing underlying iterators in zip][83791]
1398 - [Make split_inclusive() on an empty slice yield an empty output][89825]
1399 - [Update std::env::temp_dir to use GetTempPath2 on Windows when available.][89999]
1400 - [unreachable! was updated to match other formatting macro behavior on Rust 2021][92137]
1401
1402 Internal Changes
1403 ----------------
1404
1405 These changes provide no direct user facing benefits, but represent significant
1406 improvements to the internals and overall performance of rustc
1407 and related tools.
1408
1409 - [Fix many cases of normalization-related ICEs][91255]
1410 - [Replace dominators algorithm with simple Lengauer-Tarjan][85013]
1411 - [Store liveness in interval sets for region inference][90637]
1412
1413 - [Remove `in_band_lifetimes` from the compiler and standard library, in preparation for removing this
1414 unstable feature.][91867]
1415
1416 [91867]: https://github.com/rust-lang/rust/issues/91867
1417 [83744]: https://github.com/rust-lang/rust/pull/83744/
1418 [83791]: https://github.com/rust-lang/rust/pull/83791/
1419 [85013]: https://github.com/rust-lang/rust/pull/85013/
1420 [89825]: https://github.com/rust-lang/rust/pull/89825/
1421 [89999]: https://github.com/rust-lang/rust/pull/89999/
1422 [90128]: https://github.com/rust-lang/rust/pull/90128/
1423 [90207]: https://github.com/rust-lang/rust/pull/90207/
1424 [90521]: https://github.com/rust-lang/rust/pull/90521/
1425 [90586]: https://github.com/rust-lang/rust/pull/90586/
1426 [90637]: https://github.com/rust-lang/rust/pull/90637/
1427 [90833]: https://github.com/rust-lang/rust/pull/90833/
1428 [90846]: https://github.com/rust-lang/rust/pull/90846/
1429 [91003]: https://github.com/rust-lang/rust/pull/91003/
1430 [91172]: https://github.com/rust-lang/rust/pull/91172/
1431 [91255]: https://github.com/rust-lang/rust/pull/91255/
1432 [91284]: https://github.com/rust-lang/rust/pull/91284/
1433 [91535]: https://github.com/rust-lang/rust/pull/91535/
1434 [91593]: https://github.com/rust-lang/rust/pull/91593/
1435 [91728]: https://github.com/rust-lang/rust/pull/91728/
1436 [91878]: https://github.com/rust-lang/rust/pull/91878/
1437 [91896]: https://github.com/rust-lang/rust/pull/91896/
1438 [91926]: https://github.com/rust-lang/rust/pull/91926/
1439 [91984]: https://github.com/rust-lang/rust/pull/91984/
1440 [92020]: https://github.com/rust-lang/rust/pull/92020/
1441 [92034]: https://github.com/rust-lang/rust/pull/92034/
1442 [92137]: https://github.com/rust-lang/rust/pull/92137/
1443 [92483]: https://github.com/rust-lang/rust/pull/92483/
1444 [cargo/10088]: https://github.com/rust-lang/cargo/pull/10088/
1445 [cargo/10133]: https://github.com/rust-lang/cargo/pull/10133/
1446 [cargo/10145]: https://github.com/rust-lang/cargo/pull/10145/
1447 [cargo/10152]: https://github.com/rust-lang/cargo/pull/10152/
1448 [cargo/10165]: https://github.com/rust-lang/cargo/pull/10165/
1449 [cargo/10172]: https://github.com/rust-lang/cargo/pull/10172/
1450 [cargo/10201]: https://github.com/rust-lang/cargo/pull/10201/
1451 [cargo/10269]: https://github.com/rust-lang/cargo/pull/10269/
1452
1453 [cstr_from_bytes]: https://doc.rust-lang.org/stable/std/ffi/struct.CStr.html#method.from_bytes_with_nul_unchecked
1454 [muninit_ptr]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.as_ptr
1455 [muninit_init]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init
1456 [muninit_init_ref]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_ref
1457 [unwindsafe_once]: https://doc.rust-lang.org/stable/std/sync/struct.Once.html#impl-UnwindSafe
1458 [refunwindsafe_once]: https://doc.rust-lang.org/stable/std/sync/struct.Once.html#impl-RefUnwindSafe
1459 [tryfrom_ref_arr]: https://doc.rust-lang.org/stable/std/convert/trait.TryFrom.html#impl-TryFrom%3C%26%27_%20mut%20%5BT%5D%3E
1460 [lowercase]: https://doc.rust-lang.org/stable/std/char/struct.ToLowercase.html#impl-DoubleEndedIterator
1461 [uppercase]: https://doc.rust-lang.org/stable/std/char/struct.ToUppercase.html#impl-DoubleEndedIterator
1462 [try_from_char_err]: https://doc.rust-lang.org/stable/std/char/struct.TryFromCharError.html
1463 [available_parallelism]: https://doc.rust-lang.org/stable/std/thread/fn.available_parallelism.html
1464 [result-copied]: https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.copied
1465 [result-cloned]: https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.cloned
1466 [asm]: https://doc.rust-lang.org/stable/core/arch/macro.asm.html
1467 [global_asm]: https://doc.rust-lang.org/stable/core/arch/macro.global_asm.html
1468 [is_break]: https://doc.rust-lang.org/stable/std/ops/enum.ControlFlow.html#method.is_break
1469 [is_continue]: https://doc.rust-lang.org/stable/std/ops/enum.ControlFlow.html#method.is_continue
1470 [try_from_char_u8]: https://doc.rust-lang.org/stable/std/primitive.char.html#impl-TryFrom%3Cchar%3E
1471 [zip]: https://doc.rust-lang.org/stable/std/iter/fn.zip.html
1472 [is_power_of_two8]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroU8.html#method.is_power_of_two
1473 [is_power_of_two16]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroU16.html#method.is_power_of_two
1474 [is_power_of_two32]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroU32.html#method.is_power_of_two
1475 [is_power_of_two64]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroU64.html#method.is_power_of_two
1476 [is_power_of_two128]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroU128.html#method.is_power_of_two
1477 [is_power_of_two_usize]: https://doc.rust-lang.org/stable/core/num/struct.NonZeroUsize.html#method.is_power_of_two
1478 [stdarch/1266]: https://github.com/rust-lang/stdarch/pull/1266
1479
1480 Version 1.58.1 (2022-01-19)
1481 ===========================
1482
1483 * Fix race condition in `std::fs::remove_dir_all` ([CVE-2022-21658])
1484 * [Handle captured arguments in the `useless_format` Clippy lint][clippy/8295]
1485 * [Move `non_send_fields_in_send_ty` Clippy lint to nursery][clippy/8075]
1486 * [Fix wrong error message displayed when some imports are missing][91254]
1487 * [Fix rustfmt not formatting generated files from stdin][92912]
1488
1489 [CVE-2022-21658]: https://www.cve.org/CVERecord?id=CVE-2022-21658
1490 [91254]: https://github.com/rust-lang/rust/pull/91254
1491 [92912]: https://github.com/rust-lang/rust/pull/92912
1492 [clippy/8075]: https://github.com/rust-lang/rust-clippy/pull/8075
1493 [clippy/8295]: https://github.com/rust-lang/rust-clippy/pull/8295
1494
1495 Version 1.58.0 (2022-01-13)
1496 ==========================
1497
1498 Language
1499 --------
1500
1501 - [Format strings can now capture arguments simply by writing `{ident}` in the string.][90473] This works in all macros accepting format strings. Support for this in `panic!` (`panic!("{ident}")`) requires the 2021 edition; panic invocations in previous editions that appear to be trying to use this will result in a warning lint about not having the intended effect.
1502 - [`*const T` pointers can now be dereferenced in const contexts.][89551]
1503 - [The rules for when a generic struct implements `Unsize` have been relaxed.][90417]
1504
1505 Compiler
1506 --------
1507
1508 - [Add LLVM CFI support to the Rust compiler][89652]
1509 - [Stabilize -Z strip as -C strip][90058]. Note that while release builds already don't add debug symbols for the code you compile, the compiled standard library that ships with Rust includes debug symbols, so you may want to use the `strip` option to remove these symbols to produce smaller release binaries. Note that this release only includes support in rustc, not directly in cargo.
1510 - [Add support for LLVM coverage mapping format versions 5 and 6][91207]
1511 - [Emit LLVM optimization remarks when enabled with `-Cremark`][90833]
1512 - [Update the minimum external LLVM to 12][90175]
1513 - [Add `x86_64-unknown-none` at Tier 3*][89062]
1514 - [Build musl dist artifacts with debuginfo enabled][90733]. When building release binaries using musl, you may want to use the newly stabilized strip option to remove these debug symbols, reducing the size of your binaries.
1515 - [Don't abort compilation after giving a lint error][87337]
1516 - [Error messages point at the source of trait bound obligations in more places][89580]
1517
1518 \* Refer to Rust's [platform support page][platform-support-doc] for more
1519 information on Rust's tiered platform support.
1520
1521 Libraries
1522 ---------
1523
1524 - [All remaining functions in the standard library have `#[must_use]` annotations where appropriate][89692], producing a warning when ignoring their return value. This helps catch mistakes such as expecting a function to mutate a value in place rather than return a new value.
1525 - [Paths are automatically canonicalized on Windows for operations that support it][89174]
1526 - [Re-enable debug checks for `copy` and `copy_nonoverlapping`][90041]
1527 - [Implement `RefUnwindSafe` for `Rc<T>`][87467]
1528 - [Make RSplit<T, P>: Clone not require T: Clone][90117]
1529 - [Implement `Termination` for `Result<Infallible, E>`][88601]. This allows writing `fn main() -> Result<Infallible, ErrorType>`, for a program whose successful exits never involve returning from `main` (for instance, a program that calls `exit`, or that uses `exec` to run another program).
1530
1531 Stabilized APIs
1532 ---------------
1533
1534 - [`Metadata::is_symlink`]
1535 - [`Path::is_symlink`]
1536 - [`{integer}::saturating_div`]
1537 - [`Option::unwrap_unchecked`]
1538 - [`Result::unwrap_unchecked`]
1539 - [`Result::unwrap_err_unchecked`]
1540 - [`File::options`]
1541
1542 These APIs are now usable in const contexts:
1543
1544 - [`Duration::new`]
1545 - [`Duration::checked_add`]
1546 - [`Duration::saturating_add`]
1547 - [`Duration::checked_sub`]
1548 - [`Duration::saturating_sub`]
1549 - [`Duration::checked_mul`]
1550 - [`Duration::saturating_mul`]
1551 - [`Duration::checked_div`]
1552
1553 Cargo
1554 -----
1555
1556 - [Add --message-format for install command][cargo/10107]
1557 - [Warn when alias shadows external subcommand][cargo/10082]
1558
1559 Rustdoc
1560 -------
1561
1562 - [Show all Deref implementations recursively in rustdoc][90183]
1563 - [Use computed visibility in rustdoc][88447]
1564
1565 Compatibility Notes
1566 -------------------
1567
1568 - [Try all stable method candidates first before trying unstable ones][90329]. This change ensures that adding new nightly-only methods to the Rust standard library will not break code invoking methods of the same name from traits outside the standard library.
1569 - Windows: [`std::process::Command` will no longer search the current directory for executables.][87704]
1570 - [All proc-macro backward-compatibility lints are now deny-by-default.][88041]
1571 - [proc_macro: Append .0 to unsuffixed float if it would otherwise become int token][90297]
1572 - [Refactor weak symbols in std::sys::unix][90846]. This optimizes accesses to glibc functions, by avoiding the use of dlopen. This does not increase the [minimum expected version of glibc](https://doc.rust-lang.org/nightly/rustc/platform-support.html). However, software distributions that use symbol versions to detect library dependencies, and which take weak symbols into account in that analysis, may detect rust binaries as requiring newer versions of glibc.
1573 - [rustdoc now rejects some unexpected semicolons in doctests][91026]
1574
1575 Internal Changes
1576 ----------------
1577
1578 These changes provide no direct user facing benefits, but represent significant
1579 improvements to the internals and overall performance of rustc
1580 and related tools.
1581
1582 - [Implement coherence checks for negative trait impls][90104]
1583 - [Add rustc lint, warning when iterating over hashmaps][89558]
1584 - [Optimize live point computation][90491]
1585 - [Enable verification for 1/32nd of queries loaded from disk][90361]
1586 - [Implement version of normalize_erasing_regions that allows for normalization failure][91255]
1587
1588 [87337]: https://github.com/rust-lang/rust/pull/87337/
1589 [87467]: https://github.com/rust-lang/rust/pull/87467/
1590 [87704]: https://github.com/rust-lang/rust/pull/87704/
1591 [88041]: https://github.com/rust-lang/rust/pull/88041/
1592 [88447]: https://github.com/rust-lang/rust/pull/88447/
1593 [88601]: https://github.com/rust-lang/rust/pull/88601/
1594 [89062]: https://github.com/rust-lang/rust/pull/89062/
1595 [89174]: https://github.com/rust-lang/rust/pull/89174/
1596 [89551]: https://github.com/rust-lang/rust/pull/89551/
1597 [89558]: https://github.com/rust-lang/rust/pull/89558/
1598 [89580]: https://github.com/rust-lang/rust/pull/89580/
1599 [89652]: https://github.com/rust-lang/rust/pull/89652/
1600 [90041]: https://github.com/rust-lang/rust/pull/90041/
1601 [90058]: https://github.com/rust-lang/rust/pull/90058/
1602 [90104]: https://github.com/rust-lang/rust/pull/90104/
1603 [90117]: https://github.com/rust-lang/rust/pull/90117/
1604 [90175]: https://github.com/rust-lang/rust/pull/90175/
1605 [90183]: https://github.com/rust-lang/rust/pull/90183/
1606 [90297]: https://github.com/rust-lang/rust/pull/90297/
1607 [90329]: https://github.com/rust-lang/rust/pull/90329/
1608 [90361]: https://github.com/rust-lang/rust/pull/90361/
1609 [90417]: https://github.com/rust-lang/rust/pull/90417/
1610 [90473]: https://github.com/rust-lang/rust/pull/90473/
1611 [90491]: https://github.com/rust-lang/rust/pull/90491/
1612 [90733]: https://github.com/rust-lang/rust/pull/90733/
1613 [90833]: https://github.com/rust-lang/rust/pull/90833/
1614 [90846]: https://github.com/rust-lang/rust/pull/90846/
1615 [91026]: https://github.com/rust-lang/rust/pull/91026/
1616 [91207]: https://github.com/rust-lang/rust/pull/91207/
1617 [91255]: https://github.com/rust-lang/rust/pull/91255/
1618 [cargo/10082]: https://github.com/rust-lang/cargo/pull/10082/
1619 [cargo/10107]: https://github.com/rust-lang/cargo/pull/10107/
1620 [`Metadata::is_symlink`]: https://doc.rust-lang.org/stable/std/fs/struct.Metadata.html#method.is_symlink
1621 [`Path::is_symlink`]: https://doc.rust-lang.org/stable/std/path/struct.Path.html#method.is_symlink
1622 [`{integer}::saturating_div`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.saturating_div
1623 [`Option::unwrap_unchecked`]: https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.unwrap_unchecked
1624 [`Result::unwrap_unchecked`]: https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.unwrap_unchecked
1625 [`Result::unwrap_err_unchecked`]: https://doc.rust-lang.org/stable/std/result/enum.Result.html#method.unwrap_err_unchecked
1626 [`File::options`]: https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.options
1627 [`Duration::new`]: https://doc.rust-lang.org/stable/std/time/struct.Duration.html#method.new
1628
1629 Version 1.57.0 (2021-12-02)
1630 ==========================
1631
1632 Language
1633 --------
1634
1635 - [Macro attributes may follow `#[derive]` and will see the original (pre-`cfg`) input.][87220]
1636 - [Accept curly-brace macros in expressions, like `m!{ .. }.method()` and `m!{ .. }?`.][88690]
1637 - [Allow panicking in constant evaluation.][89508]
1638 - [Ignore derived `Clone` and `Debug` implementations during dead code analysis.][85200]
1639
1640 Compiler
1641 --------
1642
1643 - [Create more accurate debuginfo for vtables.][89597]
1644 - [Add `armv6k-nintendo-3ds` at Tier 3\*.][88529]
1645 - [Add `armv7-unknown-linux-uclibceabihf` at Tier 3\*.][88952]
1646 - [Add `m68k-unknown-linux-gnu` at Tier 3\*.][88321]
1647 - [Add SOLID targets at Tier 3\*:][86191] `aarch64-kmc-solid_asp3`, `armv7a-kmc-solid_asp3-eabi`, `armv7a-kmc-solid_asp3-eabihf`
1648
1649 \* Refer to Rust's [platform support page][platform-support-doc] for more
1650 information on Rust's tiered platform support.
1651
1652 Libraries
1653 ---------
1654
1655 - [Avoid allocations and copying in `Vec::leak`][89337]
1656 - [Add `#[repr(i8)]` to `Ordering`][89507]
1657 - [Optimize `File::read_to_end` and `read_to_string`][89582]
1658 - [Update to Unicode 14.0][89614]
1659 - [Many more functions are marked `#[must_use]`][89692], producing a warning
1660 when ignoring their return value. This helps catch mistakes such as expecting
1661 a function to mutate a value in place rather than return a new value.
1662
1663 Stabilised APIs
1664 ---------------
1665
1666 - [`[T; N]::as_mut_slice`][`array::as_mut_slice`]
1667 - [`[T; N]::as_slice`][`array::as_slice`]
1668 - [`collections::TryReserveError`]
1669 - [`HashMap::try_reserve`]
1670 - [`HashSet::try_reserve`]
1671 - [`String::try_reserve`]
1672 - [`String::try_reserve_exact`]
1673 - [`Vec::try_reserve`]
1674 - [`Vec::try_reserve_exact`]
1675 - [`VecDeque::try_reserve`]
1676 - [`VecDeque::try_reserve_exact`]
1677 - [`Iterator::map_while`]
1678 - [`iter::MapWhile`]
1679 - [`proc_macro::is_available`]
1680 - [`Command::get_program`]
1681 - [`Command::get_args`]
1682 - [`Command::get_envs`]
1683 - [`Command::get_current_dir`]
1684 - [`CommandArgs`]
1685 - [`CommandEnvs`]
1686
1687 These APIs are now usable in const contexts:
1688
1689 - [`hint::unreachable_unchecked`]
1690
1691 Cargo
1692 -----
1693
1694 - [Stabilize custom profiles][cargo/9943]
1695
1696 Compatibility notes
1697 -------------------
1698
1699 - [Ignore derived `Clone` and `Debug` implementations during dead code analysis.][85200]
1700 This will break some builds that set `#![deny(dead_code)]`.
1701
1702 Internal changes
1703 ----------------
1704 These changes provide no direct user facing benefits, but represent significant
1705 improvements to the internals and overall performance of rustc
1706 and related tools.
1707
1708 - [Added an experimental backend for codegen with `libgccjit`.][87260]
1709
1710 [85200]: https://github.com/rust-lang/rust/pull/85200/
1711 [86191]: https://github.com/rust-lang/rust/pull/86191/
1712 [87220]: https://github.com/rust-lang/rust/pull/87220/
1713 [87260]: https://github.com/rust-lang/rust/pull/87260/
1714 [88321]: https://github.com/rust-lang/rust/pull/88321/
1715 [88529]: https://github.com/rust-lang/rust/pull/88529/
1716 [88690]: https://github.com/rust-lang/rust/pull/88690/
1717 [88952]: https://github.com/rust-lang/rust/pull/88952/
1718 [89337]: https://github.com/rust-lang/rust/pull/89337/
1719 [89507]: https://github.com/rust-lang/rust/pull/89507/
1720 [89508]: https://github.com/rust-lang/rust/pull/89508/
1721 [89582]: https://github.com/rust-lang/rust/pull/89582/
1722 [89597]: https://github.com/rust-lang/rust/pull/89597/
1723 [89614]: https://github.com/rust-lang/rust/pull/89614/
1724 [89692]: https://github.com/rust-lang/rust/issues/89692/
1725 [cargo/9943]: https://github.com/rust-lang/cargo/pull/9943/
1726 [`array::as_mut_slice`]: https://doc.rust-lang.org/std/primitive.array.html#method.as_mut_slice
1727 [`array::as_slice`]: https://doc.rust-lang.org/std/primitive.array.html#method.as_slice
1728 [`collections::TryReserveError`]: https://doc.rust-lang.org/std/collections/struct.TryReserveError.html
1729 [`HashMap::try_reserve`]: https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.try_reserve
1730 [`HashSet::try_reserve`]: https://doc.rust-lang.org/std/collections/hash_set/struct.HashSet.html#method.try_reserve
1731 [`String::try_reserve`]: https://doc.rust-lang.org/alloc/string/struct.String.html#method.try_reserve
1732 [`String::try_reserve_exact`]: https://doc.rust-lang.org/alloc/string/struct.String.html#method.try_reserve_exact
1733 [`Vec::try_reserve`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.try_reserve
1734 [`Vec::try_reserve_exact`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.try_reserve_exact
1735 [`VecDeque::try_reserve`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.try_reserve
1736 [`VecDeque::try_reserve_exact`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.try_reserve_exact
1737 [`Iterator::map_while`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map_while
1738 [`iter::MapWhile`]: https://doc.rust-lang.org/std/iter/struct.MapWhile.html
1739 [`proc_macro::is_available`]: https://doc.rust-lang.org/proc_macro/fn.is_available.html
1740 [`Command::get_program`]: https://doc.rust-lang.org/std/process/struct.Command.html#method.get_program
1741 [`Command::get_args`]: https://doc.rust-lang.org/std/process/struct.Command.html#method.get_args
1742 [`Command::get_envs`]: https://doc.rust-lang.org/std/process/struct.Command.html#method.get_envs
1743 [`Command::get_current_dir`]: https://doc.rust-lang.org/std/process/struct.Command.html#method.get_current_dir
1744 [`CommandArgs`]: https://doc.rust-lang.org/std/process/struct.CommandArgs.html
1745 [`CommandEnvs`]: https://doc.rust-lang.org/std/process/struct.CommandEnvs.html
1746
1747 Version 1.56.1 (2021-11-01)
1748 ===========================
1749
1750 - New lints to detect the presence of bidirectional-override Unicode
1751 codepoints in the compiled source code ([CVE-2021-42574])
1752
1753 [CVE-2021-42574]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42574
1754
1755 Version 1.56.0 (2021-10-21)
1756 ========================
1757
1758 Language
1759 --------
1760
1761 - [The 2021 Edition is now stable.][rust#88100]
1762 See [the edition guide][rust-2021-edition-guide] for more details.
1763 - [The pattern in `binding @ pattern` can now also introduce new bindings.][rust#85305]
1764 - [Union field access is permitted in `const fn`.][rust#85769]
1765
1766 [rust-2021-edition-guide]: https://doc.rust-lang.org/nightly/edition-guide/rust-2021/index.html
1767
1768 Compiler
1769 --------
1770
1771 - [Upgrade to LLVM 13.][rust#87570]
1772 - [Support memory, address, and thread sanitizers on aarch64-unknown-freebsd.][rust#88023]
1773 - [Allow specifying a deployment target version for all iOS targets][rust#87699]
1774 - [Warnings can be forced on with `--force-warn`.][rust#87472]
1775 This feature is primarily intended for usage by `cargo fix`, rather than end users.
1776 - [Promote `aarch64-apple-ios-sim` to Tier 2\*.][rust#87760]
1777 - [Add `powerpc-unknown-freebsd` at Tier 3\*.][rust#87370]
1778 - [Add `riscv32imc-esp-espidf` at Tier 3\*.][rust#87666]
1779
1780 \* Refer to Rust's [platform support page][platform-support-doc] for more
1781 information on Rust's tiered platform support.
1782
1783 Libraries
1784 ---------
1785
1786 - [Allow writing of incomplete UTF-8 sequences via stdout/stderr on Windows.][rust#83342]
1787 The Windows console still requires valid Unicode, but this change allows
1788 splitting a UTF-8 character across multiple write calls. This allows, for
1789 instance, programs that just read and write data buffers (e.g. copying a file
1790 to stdout) without regard for Unicode or character boundaries.
1791 - [Prefer `AtomicU{64,128}` over Mutex for Instant backsliding protection.][rust#83093]
1792 For this use case, atomics scale much better under contention.
1793 - [Implement `Extend<(A, B)>` for `(Extend<A>, Extend<B>)`][rust#85835]
1794 - [impl Default, Copy, Clone for std::io::Sink and std::io::Empty][rust#86744]
1795 - [`impl From<[(K, V); N]>` for all collections.][rust#84111]
1796 - [Remove `P: Unpin` bound on impl Future for Pin.][rust#81363]
1797 - [Treat invalid environment variable names as non-existent.][rust#86183]
1798 Previously, the environment functions would panic if given a variable name
1799 with an internal null character or equal sign (`=`). Now, these functions will
1800 just treat such names as non-existent variables, since the OS cannot represent
1801 the existence of a variable with such a name.
1802
1803 Stabilised APIs
1804 ---------------
1805
1806 - [`std::os::unix::fs::chroot`]
1807 - [`UnsafeCell::raw_get`]
1808 - [`BufWriter::into_parts`]
1809 - [`core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}`]
1810 These APIs were previously stable in `std`, but are now also available in `core`.
1811 - [`Vec::shrink_to`]
1812 - [`String::shrink_to`]
1813 - [`OsString::shrink_to`]
1814 - [`PathBuf::shrink_to`]
1815 - [`BinaryHeap::shrink_to`]
1816 - [`VecDeque::shrink_to`]
1817 - [`HashMap::shrink_to`]
1818 - [`HashSet::shrink_to`]
1819
1820 These APIs are now usable in const contexts:
1821
1822 - [`std::mem::transmute`]
1823 - [`[T]::first`][`slice::first`]
1824 - [`[T]::split_first`][`slice::split_first`]
1825 - [`[T]::last`][`slice::last`]
1826 - [`[T]::split_last`][`slice::split_last`]
1827
1828 Cargo
1829 -----
1830
1831 - [Cargo supports specifying a minimum supported Rust version in Cargo.toml.][`rust-version`]
1832 This has no effect at present on dependency version selection.
1833 We encourage crates to specify their minimum supported Rust version, and we encourage CI systems
1834 that support Rust code to include a crate's specified minimum version in the test matrix for that
1835 crate by default.
1836
1837 Compatibility notes
1838 -------------------
1839
1840 - [Update to new argument parsing rules on Windows.][rust#87580]
1841 This adjusts Rust's standard library to match the behavior of the standard
1842 libraries for C/C++. The rules have changed slightly over time, and this PR
1843 brings us to the latest set of rules (changed in 2008).
1844 - [Disallow the aapcs calling convention on aarch64][rust#88399]
1845 This was already not supported by LLVM; this change surfaces this lack of
1846 support with a better error message.
1847 - [Make `SEMICOLON_IN_EXPRESSIONS_FROM_MACROS` warn by default][rust#87385]
1848 - [Warn when an escaped newline skips multiple lines.][rust#87671]
1849 - [Calls to `libc::getpid` / `std::process::id` from `Command::pre_exec`
1850 may return different values on glibc <= 2.24.][rust#81825]
1851 Rust now invokes the `clone3` system call directly, when available, to use new functionality
1852 available via that system call. Older versions of glibc cache the result of `getpid`, and only
1853 update that cache when calling glibc's clone/fork functions, so a direct system call bypasses
1854 that cache update. glibc 2.25 and newer no longer cache `getpid` for exactly this reason.
1855
1856 Internal changes
1857 ----------------
1858 These changes provide no direct user facing benefits, but represent significant
1859 improvements to the internals and overall performance of rustc
1860 and related tools.
1861
1862 - [LLVM is compiled with PGO in published x86_64-unknown-linux-gnu artifacts.][rust#88069]
1863 This improves the performance of most Rust builds.
1864 - [Unify representation of macros in internal data structures.][rust#88019]
1865 This change fixes a host of bugs with the handling of macros by the compiler,
1866 as well as rustdoc.
1867
1868 [`std::os::unix::fs::chroot`]: https://doc.rust-lang.org/stable/std/os/unix/fs/fn.chroot.html
1869 [`UnsafeCell::raw_get`]: https://doc.rust-lang.org/stable/std/cell/struct.UnsafeCell.html#method.raw_get
1870 [`BufWriter::into_parts`]: https://doc.rust-lang.org/stable/std/io/struct.BufWriter.html#method.into_parts
1871 [`core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}`]: https://github.com/rust-lang/rust/pull/84662
1872 [`Vec::shrink_to`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.shrink_to
1873 [`String::shrink_to`]: https://doc.rust-lang.org/stable/std/string/struct.String.html#method.shrink_to
1874 [`OsString::shrink_to`]: https://doc.rust-lang.org/stable/std/ffi/struct.OsString.html#method.shrink_to
1875 [`PathBuf::shrink_to`]: https://doc.rust-lang.org/stable/std/path/struct.PathBuf.html#method.shrink_to
1876 [`BinaryHeap::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/struct.BinaryHeap.html#method.shrink_to
1877 [`VecDeque::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.shrink_to
1878 [`HashMap::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/hash_map/struct.HashMap.html#method.shrink_to
1879 [`HashSet::shrink_to`]: https://doc.rust-lang.org/stable/std/collections/hash_set/struct.HashSet.html#method.shrink_to
1880 [`std::mem::transmute`]: https://doc.rust-lang.org/stable/std/mem/fn.transmute.html
1881 [`slice::first`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.first
1882 [`slice::split_first`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_first
1883 [`slice::last`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.last
1884 [`slice::split_last`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.split_last
1885 [`rust-version`]: https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-rust-version-field
1886 [rust#87671]: https://github.com/rust-lang/rust/pull/87671
1887 [rust#86183]: https://github.com/rust-lang/rust/pull/86183
1888 [rust#87385]: https://github.com/rust-lang/rust/pull/87385
1889 [rust#88100]: https://github.com/rust-lang/rust/pull/88100
1890 [rust#85305]: https://github.com/rust-lang/rust/pull/85305
1891 [rust#88069]: https://github.com/rust-lang/rust/pull/88069
1892 [rust#87472]: https://github.com/rust-lang/rust/pull/87472
1893 [rust#87699]: https://github.com/rust-lang/rust/pull/87699
1894 [rust#87570]: https://github.com/rust-lang/rust/pull/87570
1895 [rust#88023]: https://github.com/rust-lang/rust/pull/88023
1896 [rust#87760]: https://github.com/rust-lang/rust/pull/87760
1897 [rust#87370]: https://github.com/rust-lang/rust/pull/87370
1898 [rust#87580]: https://github.com/rust-lang/rust/pull/87580
1899 [rust#83342]: https://github.com/rust-lang/rust/pull/83342
1900 [rust#83093]: https://github.com/rust-lang/rust/pull/83093
1901 [rust#85835]: https://github.com/rust-lang/rust/pull/85835
1902 [rust#86744]: https://github.com/rust-lang/rust/pull/86744
1903 [rust#81363]: https://github.com/rust-lang/rust/pull/81363
1904 [rust#84111]: https://github.com/rust-lang/rust/pull/84111
1905 [rust#85769]: https://github.com/rust-lang/rust/pull/85769#issuecomment-854363720
1906 [rust#88399]: https://github.com/rust-lang/rust/pull/88399
1907 [rust#81825]: https://github.com/rust-lang/rust/pull/81825#issuecomment-808406918
1908 [rust#88019]: https://github.com/rust-lang/rust/pull/88019
1909 [rust#87666]: https://github.com/rust-lang/rust/pull/87666
1910
1911 Version 1.55.0 (2021-09-09)
1912 ============================
1913
1914 Language
1915 --------
1916 - [You can now write open "from" range patterns (`X..`), which will start at `X` and
1917 will end at the maximum value of the integer.][83918]
1918 - [You can now explicitly import the prelude of different editions
1919 through `std::prelude` (e.g. `use std::prelude::rust_2021::*;`).][86294]
1920
1921 Compiler
1922 --------
1923 - [Added tier 3\* support for `powerpc64le-unknown-freebsd`.][83572]
1924
1925 \* Refer to Rust's [platform support page][platform-support-doc] for more
1926 information on Rust's tiered platform support.
1927
1928 Libraries
1929 ---------
1930
1931 - [Updated std's float parsing to use the Eisel-Lemire algorithm.][86761]
1932 These improvements should in general provide faster string parsing of floats,
1933 no longer reject certain valid floating point values, and reduce
1934 the produced code size for non-stripped artifacts.
1935 - [`string::Drain` now implements `AsRef<str>` and `AsRef<[u8]>`.][86858]
1936
1937 Stabilised APIs
1938 ---------------
1939
1940 - [`Bound::cloned`]
1941 - [`Drain::as_str`]
1942 - [`IntoInnerError::into_error`]
1943 - [`IntoInnerError::into_parts`]
1944 - [`MaybeUninit::assume_init_mut`]
1945 - [`MaybeUninit::assume_init_ref`]
1946 - [`MaybeUninit::write`]
1947 - [`array::map`]
1948 - [`ops::ControlFlow`]
1949 - [`x86::_bittest`]
1950 - [`x86::_bittestandcomplement`]
1951 - [`x86::_bittestandreset`]
1952 - [`x86::_bittestandset`]
1953 - [`x86_64::_bittest64`]
1954 - [`x86_64::_bittestandcomplement64`]
1955 - [`x86_64::_bittestandreset64`]
1956 - [`x86_64::_bittestandset64`]
1957
1958 The following previously stable functions are now `const`.
1959
1960 - [`str::from_utf8_unchecked`]
1961
1962
1963 Cargo
1964 -----
1965 - [Cargo will now deduplicate compiler diagnostics to the terminal when invoking
1966 rustc in parallel such as when using `cargo test`.][cargo/9675]
1967 - [The package definition in `cargo metadata` now includes the `"default_run"`
1968 field from the manifest.][cargo/9550]
1969 - [Added `cargo d` as an alias for `cargo doc`.][cargo/9680]
1970 - [Added `{lib}` as formatting option for `cargo tree` to print the `"lib_name"`
1971 of packages.][cargo/9663]
1972
1973 Rustdoc
1974 -------
1975 - [Added "Go to item on exact match" search option.][85876]
1976 - [The "Implementors" section on traits no longer shows redundant
1977 method definitions.][85970]
1978 - [Trait implementations are toggled open by default.][86260] This should make the
1979 implementations more searchable by tools like `CTRL+F` in your browser.
1980 - [Intra-doc links should now correctly resolve associated items (e.g. methods)
1981 through type aliases.][86334]
1982 - [Traits which are marked with `#[doc(hidden)]` will no longer appear in the
1983 "Trait Implementations" section.][86513]
1984
1985
1986 Compatibility Notes
1987 -------------------
1988 - [std functions that return an `io::Error` will no longer use the
1989 `ErrorKind::Other` variant.][85746] This is to better reflect that these
1990 kinds of errors could be categorised [into newer more specific `ErrorKind`
1991 variants][79965], and that they do not represent a user error.
1992 - [Using environment variable names with `process::Command` on Windows now
1993 behaves as expected.][85270] Previously using envionment variables with
1994 `Command` would cause them to be ASCII-uppercased.
1995 - [Rustdoc will now warn on using rustdoc lints that aren't prefixed
1996 with `rustdoc::`][86849]
1997 - `RUSTFLAGS` is no longer set for build scripts. Build scripts
1998 should use `CARGO_ENCODED_RUSTFLAGS` instead. See the
1999 [documentation](https://doc.rust-lang.org/nightly/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts)
2000 for more details.
2001
2002 [86849]: https://github.com/rust-lang/rust/pull/86849
2003 [86513]: https://github.com/rust-lang/rust/pull/86513
2004 [86334]: https://github.com/rust-lang/rust/pull/86334
2005 [86260]: https://github.com/rust-lang/rust/pull/86260
2006 [85970]: https://github.com/rust-lang/rust/pull/85970
2007 [85876]: https://github.com/rust-lang/rust/pull/85876
2008 [83572]: https://github.com/rust-lang/rust/pull/83572
2009 [86294]: https://github.com/rust-lang/rust/pull/86294
2010 [86858]: https://github.com/rust-lang/rust/pull/86858
2011 [86761]: https://github.com/rust-lang/rust/pull/86761
2012 [85746]: https://github.com/rust-lang/rust/pull/85746
2013 [85270]: https://github.com/rust-lang/rust/pull/85270
2014 [83918]: https://github.com/rust-lang/rust/pull/83918
2015 [79965]: https://github.com/rust-lang/rust/pull/79965
2016 [cargo/9663]: https://github.com/rust-lang/cargo/pull/9663
2017 [cargo/9675]: https://github.com/rust-lang/cargo/pull/9675
2018 [cargo/9550]: https://github.com/rust-lang/cargo/pull/9550
2019 [cargo/9680]: https://github.com/rust-lang/cargo/pull/9680
2020 [`array::map`]: https://doc.rust-lang.org/stable/std/primitive.array.html#method.map
2021 [`Bound::cloned`]: https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.cloned
2022 [`Drain::as_str`]: https://doc.rust-lang.org/stable/std/string/struct.Drain.html#method.as_str
2023 [`IntoInnerError::into_error`]: https://doc.rust-lang.org/stable/std/io/struct.IntoInnerError.html#method.into_error
2024 [`IntoInnerError::into_parts`]: https://doc.rust-lang.org/stable/std/io/struct.IntoInnerError.html#method.into_parts
2025 [`MaybeUninit::assume_init_mut`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_mut
2026 [`MaybeUninit::assume_init_ref`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.assume_init_ref
2027 [`MaybeUninit::write`]: https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write
2028 [`ops::ControlFlow`]: https://doc.rust-lang.org/stable/std/ops/enum.ControlFlow.html
2029 [`str::from_utf8_unchecked`]: https://doc.rust-lang.org/stable/std/str/fn.from_utf8_unchecked.html
2030 [`x86::_bittest`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittest.html
2031 [`x86::_bittestandcomplement`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandcomplement.html
2032 [`x86::_bittestandreset`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandreset.html
2033 [`x86::_bittestandset`]: https://doc.rust-lang.org/stable/core/arch/x86/fn._bittestandset.html
2034 [`x86_64::_bittest64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittest64.html
2035 [`x86_64::_bittestandcomplement64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandcomplement64.html
2036 [`x86_64::_bittestandreset64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandreset64.html
2037 [`x86_64::_bittestandset64`]: https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bittestandset64.html
2038
2039
2040 Version 1.54.0 (2021-07-29)
2041 ============================
2042
2043 Language
2044 -----------------------
2045
2046 - [You can now use macros for values in some built-in attributes.][83366]
2047 This primarily allows you to call macros within the `#[doc]` attribute. For
2048 example, to include external documentation in your crate, you can now write
2049 the following:
2050 ```rust
2051 #![doc = include_str!("README.md")]
2052 ```
2053
2054 - [You can now cast between unsized slice types (and types which contain
2055 unsized slices) in `const fn`.][85078]
2056 - [You can now use multiple generic lifetimes with `impl Trait` where the
2057 lifetimes don't explicitly outlive another.][84701] In code this means
2058 that you can now have `impl Trait<'a, 'b>` where as before you could
2059 only have `impl Trait<'a, 'b> where 'b: 'a`.
2060
2061 Compiler
2062 -----------------------
2063
2064 - [Rustc will now search for custom JSON targets in
2065 `/lib/rustlib/<target-triple>/target.json` where `/` is the "sysroot"
2066 directory.][83800] You can find your sysroot directory by running
2067 `rustc --print sysroot`.
2068 - [Added `wasm` as a `target_family` for WebAssembly platforms.][84072]
2069 - [You can now use `#[target_feature]` on safe functions when targeting
2070 WebAssembly platforms.][84988]
2071 - [Improved debugger output for enums on Windows MSVC platforms.][85292]
2072 - [Added tier 3\* support for `bpfel-unknown-none`
2073 and `bpfeb-unknown-none`.][79608]
2074 - [`-Zmutable-noalias=yes`][82834] is enabled by default when using LLVM 12 or above.
2075
2076 \* Refer to Rust's [platform support page][platform-support-doc] for more
2077 information on Rust's tiered platform support.
2078
2079 Libraries
2080 -----------------------
2081
2082 - [`panic::panic_any` will now `#[track_caller]`.][85745]
2083 - [Added `OutOfMemory` as a variant of `io::ErrorKind`.][84744]
2084 - [ `proc_macro::Literal` now implements `FromStr`.][84717]
2085 - [The implementations of vendor intrinsics in core::arch have been
2086 significantly refactored.][83278] The main user-visible changes are
2087 a 50% reduction in the size of libcore.rlib and stricter validation
2088 of constant operands passed to intrinsics. The latter is technically
2089 a breaking change, but allows Rust to more closely match the C vendor
2090 intrinsics API.
2091
2092 Stabilized APIs
2093 ---------------
2094
2095 - [`BTreeMap::into_keys`]
2096 - [`BTreeMap::into_values`]
2097 - [`HashMap::into_keys`]
2098 - [`HashMap::into_values`]
2099 - [`arch::wasm32`]
2100 - [`VecDeque::binary_search`]
2101 - [`VecDeque::binary_search_by`]
2102 - [`VecDeque::binary_search_by_key`]
2103 - [`VecDeque::partition_point`]
2104
2105 Cargo
2106 -----
2107
2108 - [Added the `--prune <spec>` option to `cargo-tree` to remove a package from
2109 the dependency graph.][cargo/9520]
2110 - [Added the `--depth` option to `cargo-tree` to print only to a certain depth
2111 in the tree ][cargo/9499]
2112 - [Added the `no-proc-macro` value to `cargo-tree --edges` to hide procedural
2113 macro dependencies.][cargo/9488]
2114 - [A new environment variable named `CARGO_TARGET_TMPDIR` is available.][cargo/9375]
2115 This variable points to a directory that integration tests and benches
2116 can use as a "scratchpad" for testing filesystem operations.
2117
2118 Compatibility Notes
2119 -------------------
2120 - [Mixing Option and Result via `?` is no longer permitted in closures for inferred types.][86831]
2121 - [Previously unsound code is no longer permitted where different constructors in branches
2122 could require different lifetimes.][85574]
2123 - As previously mentioned the [`std::arch` intrinsics now uses stricter const checking][83278]
2124 than before and may reject some previously accepted code.
2125 - [`i128` multiplication on Cortex M0+ platforms currently unconditionally causes overflow
2126 when compiled with `codegen-units = 1`.][86063]
2127
2128 [85574]: https://github.com/rust-lang/rust/issues/85574
2129 [86831]: https://github.com/rust-lang/rust/issues/86831
2130 [86063]: https://github.com/rust-lang/rust/issues/86063
2131 [79608]: https://github.com/rust-lang/rust/pull/79608
2132 [84988]: https://github.com/rust-lang/rust/pull/84988
2133 [84701]: https://github.com/rust-lang/rust/pull/84701
2134 [84072]: https://github.com/rust-lang/rust/pull/84072
2135 [85745]: https://github.com/rust-lang/rust/pull/85745
2136 [84744]: https://github.com/rust-lang/rust/pull/84744
2137 [85078]: https://github.com/rust-lang/rust/pull/85078
2138 [84717]: https://github.com/rust-lang/rust/pull/84717
2139 [83800]: https://github.com/rust-lang/rust/pull/83800
2140 [83366]: https://github.com/rust-lang/rust/pull/83366
2141 [83278]: https://github.com/rust-lang/rust/pull/83278
2142 [85292]: https://github.com/rust-lang/rust/pull/85292
2143 [82834]: https://github.com/rust-lang/rust/pull/82834
2144 [cargo/9520]: https://github.com/rust-lang/cargo/pull/9520
2145 [cargo/9499]: https://github.com/rust-lang/cargo/pull/9499
2146 [cargo/9488]: https://github.com/rust-lang/cargo/pull/9488
2147 [cargo/9375]: https://github.com/rust-lang/cargo/pull/9375
2148 [`BTreeMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_keys
2149 [`BTreeMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_values
2150 [`HashMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_keys
2151 [`HashMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_values
2152 [`arch::wasm32`]: https://doc.rust-lang.org/core/arch/wasm32/index.html
2153 [`VecDeque::binary_search`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search
2154 [`VecDeque::binary_search_by`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by
2155
2156 [`VecDeque::binary_search_by_key`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by_key
2157
2158 [`VecDeque::partition_point`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.partition_point
2159
2160 Version 1.53.0 (2021-06-17)
2161 ============================
2162
2163 Language
2164 -----------------------
2165 - [You can now use unicode for identifiers.][83799] This allows multilingual
2166 identifiers but still doesn't allow glyphs that are not considered characters
2167 such as `◆` or `🦀`. More specifically you can now use any identifier that
2168 matches the UAX #31 "Unicode Identifier and Pattern Syntax" standard. This
2169 is the same standard as languages like Python, however Rust uses NFC
2170 normalization which may be different from other languages.
2171 - [You can now specify "or patterns" inside pattern matches.][79278]
2172 Previously you could only use `|` (OR) on complete patterns. E.g.
2173 ```rust
2174 let x = Some(2u8);
2175 // Before
2176 matches!(x, Some(1) | Some(2));
2177 // Now
2178 matches!(x, Some(1 | 2));
2179 ```
2180 - [Added the `:pat_param` `macro_rules!` matcher.][83386] This matcher
2181 has the same semantics as the `:pat` matcher. This is to allow `:pat`
2182 to change semantics to being a pattern fragment in a future edition.
2183
2184 Compiler
2185 -----------------------
2186 - [Updated the minimum external LLVM version to LLVM 10.][83387]
2187 - [Added Tier 3\* support for the `wasm64-unknown-unknown` target.][80525]
2188 - [Improved debuginfo for closures and async functions on Windows MSVC.][83941]
2189
2190 \* Refer to Rust's [platform support page][platform-support-doc] for more
2191 information on Rust's tiered platform support.
2192
2193 Libraries
2194 -----------------------
2195 - [Abort messages will now forward to `android_set_abort_message` on
2196 Android platforms when available.][81469]
2197 - [`slice::IterMut<'_, T>` now implements `AsRef<[T]>`][82771]
2198 - [Arrays of any length now implement `IntoIterator`.][84147]
2199 Currently calling `.into_iter()` as a method on an array will
2200 return `impl Iterator<Item=&T>`, but this may change in a
2201 future edition to change `Item` to `T`. Calling `IntoIterator::into_iter`
2202 directly on arrays will provide `impl Iterator<Item=T>` as expected.
2203 - [`leading_zeros`, and `trailing_zeros` are now available on all
2204 `NonZero` integer types.][84082]
2205 - [`{f32, f64}::from_str` now parse and print special values
2206 (`NaN`, `-0`) according to IEEE 754.][78618]
2207 - [You can now index into slices using `(Bound<usize>, Bound<usize>)`.][77704]
2208 - [Add the `BITS` associated constant to all numeric types.][82565]
2209
2210 Stabilised APIs
2211 ---------------
2212 - [`AtomicBool::fetch_update`]
2213 - [`AtomicPtr::fetch_update`]
2214 - [`BTreeMap::retain`]
2215 - [`BTreeSet::retain`]
2216 - [`BufReader::seek_relative`]
2217 - [`DebugStruct::non_exhaustive`]
2218 - [`Duration::MAX`]
2219 - [`Duration::ZERO`]
2220 - [`Duration::is_zero`]
2221 - [`Duration::saturating_add`]
2222 - [`Duration::saturating_mul`]
2223 - [`Duration::saturating_sub`]
2224 - [`ErrorKind::Unsupported`]
2225 - [`Option::insert`]
2226 - [`Ordering::is_eq`]
2227 - [`Ordering::is_ge`]
2228 - [`Ordering::is_gt`]
2229 - [`Ordering::is_le`]
2230 - [`Ordering::is_lt`]
2231 - [`Ordering::is_ne`]
2232 - [`OsStr::is_ascii`]
2233 - [`OsStr::make_ascii_lowercase`]
2234 - [`OsStr::make_ascii_uppercase`]
2235 - [`OsStr::to_ascii_lowercase`]
2236 - [`OsStr::to_ascii_uppercase`]
2237 - [`Peekable::peek_mut`]
2238 - [`Rc::decrement_strong_count`]
2239 - [`Rc::increment_strong_count`]
2240 - [`Vec::extend_from_within`]
2241 - [`array::from_mut`]
2242 - [`array::from_ref`]
2243 - [`cmp::max_by_key`]
2244 - [`cmp::max_by`]
2245 - [`cmp::min_by_key`]
2246 - [`cmp::min_by`]
2247 - [`f32::is_subnormal`]
2248 - [`f64::is_subnormal`]
2249
2250 Cargo
2251 -----------------------
2252 - [Cargo now supports git repositories where the default `HEAD` branch is not
2253 "master".][cargo/9392] This also includes a switch to the version 3 `Cargo.lock` format
2254 which can handle default branches correctly.
2255 - [macOS targets now default to `unpacked` split-debuginfo.][cargo/9298]
2256 - [The `authors` field is no longer included in `Cargo.toml` for new
2257 projects.][cargo/9282]
2258
2259 Rustdoc
2260 -----------------------
2261 - [Added the `rustdoc::bare_urls` lint that warns when you have URLs
2262 without hyperlinks.][81764]
2263
2264 Compatibility Notes
2265 -------------------
2266 - [Implement token-based handling of attributes during expansion][82608]
2267 - [`Ipv4::from_str` will now reject octal format IP addresses in addition
2268 to rejecting hexadecimal IP addresses.][83652] The octal format can lead
2269 to confusion and potential security vulnerabilities and [is no
2270 longer recommended][ietf6943].
2271 - [The added `BITS` constant may conflict with external definitions.][85667]
2272 In particular, this was known to be a problem in the `lexical-core` crate,
2273 but they have published fixes for semantic versions 0.4 through 0.7. To
2274 update this dependency alone, use `cargo update -p lexical-core`.
2275 - Incremental compilation remains off by default, unless one uses the `RUSTC_FORCE_INCREMENTAL=1` environment variable added in 1.52.1.
2276
2277 Internal Only
2278 -------------
2279 These changes provide no direct user facing benefits, but represent significant
2280 improvements to the internals and overall performance of rustc and
2281 related tools.
2282
2283 - [Rework the `std::sys::windows::alloc` implementation.][83065]
2284 - [rustdoc: Don't enter an infer_ctxt in get_blanket_impls for impls that aren't blanket impls.][82864]
2285 - [rustdoc: Only look at blanket impls in `get_blanket_impls`][83681]
2286 - [Rework rustdoc const type][82873]
2287
2288 [85667]: https://github.com/rust-lang/rust/pull/85667
2289 [83386]: https://github.com/rust-lang/rust/pull/83386
2290 [82771]: https://github.com/rust-lang/rust/pull/82771
2291 [84147]: https://github.com/rust-lang/rust/pull/84147
2292 [84082]: https://github.com/rust-lang/rust/pull/84082
2293 [83799]: https://github.com/rust-lang/rust/pull/83799
2294 [83681]: https://github.com/rust-lang/rust/pull/83681
2295 [83652]: https://github.com/rust-lang/rust/pull/83652
2296 [83387]: https://github.com/rust-lang/rust/pull/83387
2297 [82873]: https://github.com/rust-lang/rust/pull/82873
2298 [82864]: https://github.com/rust-lang/rust/pull/82864
2299 [82608]: https://github.com/rust-lang/rust/pull/82608
2300 [82565]: https://github.com/rust-lang/rust/pull/82565
2301 [80525]: https://github.com/rust-lang/rust/pull/80525
2302 [79278]: https://github.com/rust-lang/rust/pull/79278
2303 [78618]: https://github.com/rust-lang/rust/pull/78618
2304 [77704]: https://github.com/rust-lang/rust/pull/77704
2305 [83941]: https://github.com/rust-lang/rust/pull/83941
2306 [83065]: https://github.com/rust-lang/rust/pull/83065
2307 [81764]: https://github.com/rust-lang/rust/pull/81764
2308 [81469]: https://github.com/rust-lang/rust/pull/81469
2309 [cargo/9298]: https://github.com/rust-lang/cargo/pull/9298
2310 [cargo/9282]: https://github.com/rust-lang/cargo/pull/9282
2311 [cargo/9392]: https://github.com/rust-lang/cargo/pull/9392
2312 [`AtomicBool::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicBool.html#method.fetch_update
2313 [`AtomicPtr::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicPtr.html#method.fetch_update
2314 [`BTreeMap::retain`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.retain
2315 [`BTreeSet::retain`]: https://doc.rust-lang.org/std/collections/struct.BTreeSet.html#method.retain
2316 [`BufReader::seek_relative`]: https://doc.rust-lang.org/std/io/struct.BufReader.html#method.seek_relative
2317 [`DebugStruct::non_exhaustive`]: https://doc.rust-lang.org/std/fmt/struct.DebugStruct.html#method.finish_non_exhaustive
2318 [`Duration::MAX`]: https://doc.rust-lang.org/std/time/struct.Duration.html#associatedconstant.MAX
2319 [`Duration::ZERO`]: https://doc.rust-lang.org/std/time/struct.Duration.html#associatedconstant.ZERO
2320 [`Duration::is_zero`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.is_zero
2321 [`Duration::saturating_add`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.saturating_add
2322 [`Duration::saturating_mul`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.saturating_mul
2323 [`Duration::saturating_sub`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.saturating_sub
2324 [`ErrorKind::Unsupported`]: https://doc.rust-lang.org/std/io/enum.ErrorKind.html#variant.Unsupported
2325 [`Option::insert`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.insert
2326 [`Ordering::is_eq`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_eq
2327 [`Ordering::is_ge`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_ge
2328 [`Ordering::is_gt`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_gt
2329 [`Ordering::is_le`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_le
2330 [`Ordering::is_lt`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_lt
2331 [`Ordering::is_ne`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.is_ne
2332 [`OsStr::is_ascii`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.is_ascii
2333 [`OsStr::make_ascii_lowercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.make_ascii_lowercase
2334 [`OsStr::make_ascii_uppercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.make_ascii_uppercase
2335 [`OsStr::to_ascii_lowercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.to_ascii_lowercase
2336 [`OsStr::to_ascii_uppercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.to_ascii_uppercase
2337 [`Peekable::peek_mut`]: https://doc.rust-lang.org/std/iter/struct.Peekable.html#method.peek_mut
2338 [`Rc::decrement_strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.increment_strong_count
2339 [`Rc::increment_strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.increment_strong_count
2340 [`Vec::extend_from_within`]: https://doc.rust-lang.org/beta/std/vec/struct.Vec.html#method.extend_from_within
2341 [`array::from_mut`]: https://doc.rust-lang.org/beta/std/array/fn.from_mut.html
2342 [`array::from_ref`]: https://doc.rust-lang.org/beta/std/array/fn.from_ref.html
2343 [`cmp::max_by_key`]: https://doc.rust-lang.org/beta/std/cmp/fn.max_by_key.html
2344 [`cmp::max_by`]: https://doc.rust-lang.org/beta/std/cmp/fn.max_by.html
2345 [`cmp::min_by_key`]: https://doc.rust-lang.org/beta/std/cmp/fn.min_by_key.html
2346 [`cmp::min_by`]: https://doc.rust-lang.org/beta/std/cmp/fn.min_by.html
2347 [`f32::is_subnormal`]: https://doc.rust-lang.org/std/primitive.f64.html#method.is_subnormal
2348 [`f64::is_subnormal`]: https://doc.rust-lang.org/std/primitive.f64.html#method.is_subnormal
2349 [ietf6943]: https://datatracker.ietf.org/doc/html/rfc6943#section-3.1.1
2350
2351
2352 Version 1.52.1 (2021-05-10)
2353 ============================
2354
2355 This release disables incremental compilation, unless the user has explicitly
2356 opted in via the newly added RUSTC_FORCE_INCREMENTAL=1 environment variable.
2357
2358 This is due to the widespread, and frequently occurring, breakage encountered by
2359 Rust users due to newly enabled incremental verification in 1.52.0. Notably,
2360 Rust users **should** upgrade to 1.52.0 or 1.52.1: the bugs that are detected by
2361 newly added incremental verification are still present in past stable versions,
2362 and are not yet fixed on any channel. These bugs can lead to miscompilation of
2363 Rust binaries.
2364
2365 These problems only affect incremental builds, so release builds with Cargo
2366 should not be affected unless the user has explicitly opted into incremental.
2367 Debug and check builds are affected.
2368
2369 See [84970] for more details.
2370
2371 [84970]: https://github.com/rust-lang/rust/issues/84970
2372
2373 Version 1.52.0 (2021-05-06)
2374 ============================
2375
2376 Language
2377 --------
2378 - [Added the `unsafe_op_in_unsafe_fn` lint, which checks whether the unsafe code
2379 in an `unsafe fn` is wrapped in a `unsafe` block.][79208] This lint
2380 is allowed by default, and may become a warning or hard error in a
2381 future edition.
2382 - [You can now cast mutable references to arrays to a pointer of the same type as
2383 the element.][81479]
2384
2385 Compiler
2386 --------
2387 - [Upgraded the default LLVM to LLVM 12.][81451]
2388
2389 Added tier 3\* support for the following targets.
2390
2391 - [`s390x-unknown-linux-musl`][82166]
2392 - [`riscv32gc-unknown-linux-musl` & `riscv64gc-unknown-linux-musl`][82202]
2393 - [`powerpc-unknown-openbsd`][82733]
2394
2395 \* Refer to Rust's [platform support page][platform-support-doc] for more
2396 information on Rust's tiered platform support.
2397
2398 Libraries
2399 ---------
2400 - [`OsString` now implements `Extend` and `FromIterator`.][82121]
2401 - [`cmp::Reverse` now has `#[repr(transparent)]` representation.][81879]
2402 - [`Arc<impl Error>` now implements `error::Error`.][80553]
2403 - [All integer division and remainder operations are now `const`.][80962]
2404
2405 Stabilised APIs
2406 -------------
2407 - [`Arguments::as_str`]
2408 - [`char::MAX`]
2409 - [`char::REPLACEMENT_CHARACTER`]
2410 - [`char::UNICODE_VERSION`]
2411 - [`char::decode_utf16`]
2412 - [`char::from_digit`]
2413 - [`char::from_u32_unchecked`]
2414 - [`char::from_u32`]
2415 - [`slice::partition_point`]
2416 - [`str::rsplit_once`]
2417 - [`str::split_once`]
2418
2419 The following previously stable APIs are now `const`.
2420
2421 - [`char::len_utf8`]
2422 - [`char::len_utf16`]
2423 - [`char::to_ascii_uppercase`]
2424 - [`char::to_ascii_lowercase`]
2425 - [`char::eq_ignore_ascii_case`]
2426 - [`u8::to_ascii_uppercase`]
2427 - [`u8::to_ascii_lowercase`]
2428 - [`u8::eq_ignore_ascii_case`]
2429
2430 Rustdoc
2431 -------
2432 - [Rustdoc lints are now treated as a tool lint, meaning that
2433 lints are now prefixed with `rustdoc::` (e.g. `#[warn(rustdoc::broken_intra_doc_links)]`).][80527]
2434 Using the old style is still allowed, and will become a warning in
2435 a future release.
2436 - [Rustdoc now supports argument files.][82261]
2437 - [Rustdoc now generates smart punctuation for documentation.][79423]
2438 - [You can now use "task lists" in Rustdoc Markdown.][81766] E.g.
2439 ```markdown
2440 - [x] Complete
2441 - [ ] Todo
2442 ```
2443
2444 Misc
2445 ----
2446 - [You can now pass multiple filters to tests.][81356] E.g.
2447 `cargo test -- foo bar` will run all tests that match `foo` and `bar`.
2448 - [Rustup now distributes PDB symbols for the `std` library on Windows,
2449 allowing you to see `std` symbols when debugging.][82218]
2450
2451 Internal Only
2452 -------------
2453 These changes provide no direct user facing benefits, but represent significant
2454 improvements to the internals and overall performance of rustc and
2455 related tools.
2456
2457 - [Check the result cache before the DepGraph when ensuring queries][81855]
2458 - [Try fast_reject::simplify_type in coherence before doing full check][81744]
2459 - [Only store a LocalDefId in some HIR nodes][81611]
2460 - [Store HIR attributes in a side table][79519]
2461
2462 Compatibility Notes
2463 -------------------
2464 - [Cargo build scripts are now forbidden from setting `RUSTC_BOOTSTRAP`.][cargo/9181]
2465 - [Removed support for the `x86_64-rumprun-netbsd` target.][82594]
2466 - [Deprecated the `x86_64-sun-solaris` target in favor of `x86_64-pc-solaris`.][82216]
2467 - [Rustdoc now only accepts `,`, ` `, and `\t` as delimiters for specifying
2468 languages in code blocks.][78429]
2469 - [Rustc now catches more cases of `pub_use_of_private_extern_crate`][80763]
2470 - [Changes in how proc macros handle whitespace may lead to panics when used
2471 with older `proc-macro-hack` versions. A `cargo update` should be sufficient to fix this in all cases.][84136]
2472 - [Turn `#[derive]` into a regular macro attribute][79078]
2473
2474 [84136]: https://github.com/rust-lang/rust/issues/84136
2475 [80763]: https://github.com/rust-lang/rust/pull/80763
2476 [82166]: https://github.com/rust-lang/rust/pull/82166
2477 [82121]: https://github.com/rust-lang/rust/pull/82121
2478 [81879]: https://github.com/rust-lang/rust/pull/81879
2479 [82261]: https://github.com/rust-lang/rust/pull/82261
2480 [82218]: https://github.com/rust-lang/rust/pull/82218
2481 [82216]: https://github.com/rust-lang/rust/pull/82216
2482 [82202]: https://github.com/rust-lang/rust/pull/82202
2483 [81855]: https://github.com/rust-lang/rust/pull/81855
2484 [81766]: https://github.com/rust-lang/rust/pull/81766
2485 [81744]: https://github.com/rust-lang/rust/pull/81744
2486 [81611]: https://github.com/rust-lang/rust/pull/81611
2487 [81479]: https://github.com/rust-lang/rust/pull/81479
2488 [81451]: https://github.com/rust-lang/rust/pull/81451
2489 [81356]: https://github.com/rust-lang/rust/pull/81356
2490 [80962]: https://github.com/rust-lang/rust/pull/80962
2491 [80553]: https://github.com/rust-lang/rust/pull/80553
2492 [80527]: https://github.com/rust-lang/rust/pull/80527
2493 [79519]: https://github.com/rust-lang/rust/pull/79519
2494 [79423]: https://github.com/rust-lang/rust/pull/79423
2495 [79208]: https://github.com/rust-lang/rust/pull/79208
2496 [78429]: https://github.com/rust-lang/rust/pull/78429
2497 [82733]: https://github.com/rust-lang/rust/pull/82733
2498 [82594]: https://github.com/rust-lang/rust/pull/82594
2499 [79078]: https://github.com/rust-lang/rust/pull/79078
2500 [cargo/9181]: https://github.com/rust-lang/cargo/pull/9181
2501 [`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX
2502 [`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER
2503 [`char::UNICODE_VERSION`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.UNICODE_VERSION
2504 [`char::decode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.decode_utf16
2505 [`char::from_u32`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32
2506 [`char::from_u32_unchecked`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32_unchecked
2507 [`char::from_digit`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_digit
2508 [`Peekable::next_if`]: https://doc.rust-lang.org/stable/std/iter/struct.Peekable.html#method.next_if
2509 [`Peekable::next_if_eq`]: https://doc.rust-lang.org/stable/std/iter/struct.Peekable.html#method.next_if_eq
2510 [`Arguments::as_str`]: https://doc.rust-lang.org/stable/std/fmt/struct.Arguments.html#method.as_str
2511 [`str::split_once`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_once
2512 [`str::rsplit_once`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.rsplit_once
2513 [`slice::partition_point`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.partition_point
2514 [`char::len_utf8`]: https://doc.rust-lang.org/stable/std/primitive.char.html#method.len_utf8
2515 [`char::len_utf16`]: https://doc.rust-lang.org/stable/std/primitive.char.html#method.len_utf16
2516 [`char::to_ascii_uppercase`]: https://doc.rust-lang.org/stable/std/primitive.char.html#method.to_ascii_uppercase
2517 [`char::to_ascii_lowercase`]: https://doc.rust-lang.org/stable/std/primitive.char.html#method.to_ascii_lowercase
2518 [`char::eq_ignore_ascii_case`]: https://doc.rust-lang.org/stable/std/primitive.char.html#method.eq_ignore_ascii_case
2519 [`u8::to_ascii_uppercase`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.to_ascii_uppercase
2520 [`u8::to_ascii_lowercase`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.to_ascii_lowercase
2521 [`u8::eq_ignore_ascii_case`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.eq_ignore_ascii_case
2522
2523 Version 1.51.0 (2021-03-25)
2524 ============================
2525
2526 Language
2527 --------
2528 - [You can now parameterize items such as functions, traits, and `struct`s by constant
2529 values in addition to by types and lifetimes.][79135] Also known as "const generics"
2530 E.g. you can now write the following. Note: Only values of primitive integers,
2531 `bool`, or `char` types are currently permitted.
2532 ```rust
2533 struct GenericArray<T, const LENGTH: usize> {
2534 inner: [T; LENGTH]
2535 }
2536
2537 impl<T, const LENGTH: usize> GenericArray<T, LENGTH> {
2538 const fn last(&self) -> Option<&T> {
2539 if LENGTH == 0 {
2540 None
2541 } else {
2542 Some(&self.inner[LENGTH - 1])
2543 }
2544 }
2545 }
2546 ```
2547
2548
2549 Compiler
2550 --------
2551
2552 - [Added the `-Csplit-debuginfo` codegen option for macOS platforms.][79570]
2553 This option controls whether debug information is split across multiple files
2554 or packed into a single file. **Note** This option is unstable on other platforms.
2555 - [Added tier 3\* support for `aarch64_be-unknown-linux-gnu`,
2556 `aarch64-unknown-linux-gnu_ilp32`, and `aarch64_be-unknown-linux-gnu_ilp32` targets.][81455]
2557 - [Added tier 3 support for `i386-unknown-linux-gnu` and `i486-unknown-linux-gnu` targets.][80662]
2558 - [The `target-cpu=native` option will now detect individual features of CPUs.][80749]
2559
2560 \* Refer to Rust's [platform support page][platform-support-doc] for more
2561 information on Rust's tiered platform support.
2562
2563 Libraries
2564 ---------
2565
2566 - [`Box::downcast` is now also implemented for any `dyn Any + Send + Sync` object.][80945]
2567 - [`str` now implements `AsMut<str>`.][80279]
2568 - [`u64` and `u128` now implement `From<char>`.][79502]
2569 - [`Error` is now implemented for `&T` where `T` implements `Error`.][75180]
2570 - [`Poll::{map_ok, map_err}` are now implemented for `Poll<Option<Result<T, E>>>`.][80968]
2571 - [`unsigned_abs` is now implemented for all signed integer types.][80959]
2572 - [`io::Empty` now implements `io::Seek`.][78044]
2573 - [`rc::Weak<T>` and `sync::Weak<T>`'s methods such as `as_ptr` are now implemented for
2574 `T: ?Sized` types.][80764]
2575 - [`Div` and `Rem` by their `NonZero` variant is now implemented for all unsigned integers.][79134]
2576
2577
2578 Stabilized APIs
2579 ---------------
2580
2581 - [`Arc::decrement_strong_count`]
2582 - [`Arc::increment_strong_count`]
2583 - [`Once::call_once_force`]
2584 - [`Peekable::next_if_eq`]
2585 - [`Peekable::next_if`]
2586 - [`Seek::stream_position`]
2587 - [`array::IntoIter`]
2588 - [`panic::panic_any`]
2589 - [`ptr::addr_of!`]
2590 - [`ptr::addr_of_mut!`]
2591 - [`slice::fill_with`]
2592 - [`slice::split_inclusive_mut`]
2593 - [`slice::split_inclusive`]
2594 - [`slice::strip_prefix`]
2595 - [`slice::strip_suffix`]
2596 - [`str::split_inclusive`]
2597 - [`sync::OnceState`]
2598 - [`task::Wake`]
2599 - [`VecDeque::range`]
2600 - [`VecDeque::range_mut`]
2601
2602 Cargo
2603 -----
2604 - [Added the `split-debuginfo` profile option to control the -Csplit-debuginfo
2605 codegen option.][cargo/9112]
2606 - [Added the `resolver` field to `Cargo.toml` to enable the new feature resolver
2607 and CLI option behavior.][cargo/8997] Version 2 of the feature resolver will try
2608 to avoid unifying features of dependencies where that unification could be unwanted.
2609 Such as using the same dependency with a `std` feature in a build scripts and
2610 proc-macros, while using the `no-std` feature in the final binary. See the
2611 [Cargo book documentation][feature-resolver@2.0] for more information on the feature.
2612
2613 Rustdoc
2614 -------
2615
2616 - [Rustdoc will now include documentation for methods available from _nested_ `Deref` traits.][80653]
2617 - [You can now provide a `--default-theme` flag which sets the default theme to use for
2618 documentation.][79642]
2619
2620 Various improvements to intra-doc links:
2621
2622 - [You can link to non-path primitives such as `slice`.][80181]
2623 - [You can link to associated items.][74489]
2624 - [You can now include generic parameters when linking to items, like `Vec<T>`.][76934]
2625
2626 Misc
2627 ----
2628 - [You can now pass `--include-ignored` to tests (e.g. with
2629 `cargo test -- --include-ignored`) to include testing tests marked `#[ignore]`.][80053]
2630
2631 Compatibility Notes
2632 -------------------
2633
2634 - [WASI platforms no longer use the `wasm-bindgen` ABI, and instead use the wasm32 ABI.][79998]
2635 - [`rustc` no longer promotes division, modulo and indexing operations to `const` that
2636 could fail.][80579]
2637 - [The minimum version of glibc for the following platforms has been bumped to version 2.31
2638 for the distributed artifacts.][81521]
2639 - `armv5te-unknown-linux-gnueabi`
2640 - `sparc64-unknown-linux-gnu`
2641 - `thumbv7neon-unknown-linux-gnueabihf`
2642 - `armv7-unknown-linux-gnueabi`
2643 - `x86_64-unknown-linux-gnux32`
2644 - [`atomic::spin_loop_hint` has been deprecated.][80966] It's recommended to use `hint::spin_loop` instead.
2645
2646 Internal Only
2647 -------------
2648
2649 - [Consistently avoid constructing optimized MIR when not doing codegen][80718]
2650
2651 [79135]: https://github.com/rust-lang/rust/pull/79135
2652 [74489]: https://github.com/rust-lang/rust/pull/74489
2653 [76934]: https://github.com/rust-lang/rust/pull/76934
2654 [79570]: https://github.com/rust-lang/rust/pull/79570
2655 [80181]: https://github.com/rust-lang/rust/pull/80181
2656 [79642]: https://github.com/rust-lang/rust/pull/79642
2657 [80945]: https://github.com/rust-lang/rust/pull/80945
2658 [80279]: https://github.com/rust-lang/rust/pull/80279
2659 [80053]: https://github.com/rust-lang/rust/pull/80053
2660 [79502]: https://github.com/rust-lang/rust/pull/79502
2661 [75180]: https://github.com/rust-lang/rust/pull/75180
2662 [81521]: https://github.com/rust-lang/rust/pull/81521
2663 [80968]: https://github.com/rust-lang/rust/pull/80968
2664 [80959]: https://github.com/rust-lang/rust/pull/80959
2665 [80718]: https://github.com/rust-lang/rust/pull/80718
2666 [80653]: https://github.com/rust-lang/rust/pull/80653
2667 [80579]: https://github.com/rust-lang/rust/pull/80579
2668 [79998]: https://github.com/rust-lang/rust/pull/79998
2669 [78044]: https://github.com/rust-lang/rust/pull/78044
2670 [81455]: https://github.com/rust-lang/rust/pull/81455
2671 [80764]: https://github.com/rust-lang/rust/pull/80764
2672 [80749]: https://github.com/rust-lang/rust/pull/80749
2673 [80662]: https://github.com/rust-lang/rust/pull/80662
2674 [79134]: https://github.com/rust-lang/rust/pull/79134
2675 [80966]: https://github.com/rust-lang/rust/pull/80966
2676 [cargo/8997]: https://github.com/rust-lang/cargo/pull/8997
2677 [cargo/9112]: https://github.com/rust-lang/cargo/pull/9112
2678 [feature-resolver@2.0]: https://doc.rust-lang.org/nightly/cargo/reference/features.html#feature-resolver-version-2
2679 [`Once::call_once_force`]: https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.call_once_force
2680 [`sync::OnceState`]: https://doc.rust-lang.org/stable/std/sync/struct.OnceState.html
2681 [`panic::panic_any`]: https://doc.rust-lang.org/stable/std/panic/fn.panic_any.html
2682 [`slice::strip_prefix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
2683 [`slice::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
2684 [`Arc::increment_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.increment_strong_count
2685 [`Arc::decrement_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.decrement_strong_count
2686 [`slice::fill_with`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.fill_with
2687 [`ptr::addr_of!`]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of.html
2688 [`ptr::addr_of_mut!`]: https://doc.rust-lang.org/nightly/std/ptr/macro.addr_of_mut.html
2689 [`array::IntoIter`]: https://doc.rust-lang.org/nightly/std/array/struct.IntoIter.html
2690 [`slice::split_inclusive`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive
2691 [`slice::split_inclusive_mut`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_inclusive_mut
2692 [`str::split_inclusive`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_inclusive
2693 [`task::Wake`]: https://doc.rust-lang.org/nightly/std/task/trait.Wake.html
2694 [`Seek::stream_position`]: https://doc.rust-lang.org/nightly/std/io/trait.Seek.html#method.stream_position
2695 [`Peekable::next_if`]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if
2696 [`Peekable::next_if_eq`]: https://doc.rust-lang.org/nightly/std/iter/struct.Peekable.html#method.next_if_eq
2697 [`VecDeque::range`]: https://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.range
2698 [`VecDeque::range_mut`]: https://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.range_mut
2699
2700 Version 1.50.0 (2021-02-11)
2701 ============================
2702
2703 Language
2704 -----------------------
2705 - [You can now use `const` values for `x` in `[x; N]` array expressions.][79270]
2706 This has been technically possible since 1.38.0, as it was unintentionally stabilized.
2707 - [Assignments to `ManuallyDrop<T>` union fields are now considered safe.][78068]
2708
2709 Compiler
2710 -----------------------
2711 - [Added tier 3\* support for the `armv5te-unknown-linux-uclibceabi` target.][78142]
2712 - [Added tier 3 support for the `aarch64-apple-ios-macabi` target.][77484]
2713 - [The `x86_64-unknown-freebsd` is now built with the full toolset.][79484]
2714 - [Dropped support for all cloudabi targets.][78439]
2715
2716 \* Refer to Rust's [platform support page][platform-support-doc] for more
2717 information on Rust's tiered platform support.
2718
2719 Libraries
2720 -----------------------
2721
2722 - [`proc_macro::Punct` now implements `PartialEq<char>`.][78636]
2723 - [`ops::{Index, IndexMut}` are now implemented for fixed sized arrays of any length.][74989]
2724 - [On Unix platforms, the `std::fs::File` type now has a "niche" of `-1`.][74699]
2725 This value cannot be a valid file descriptor, and now means `Option<File>` takes
2726 up the same amount of space as `File`.
2727
2728 Stabilized APIs
2729 ---------------
2730
2731 - [`bool::then`]
2732 - [`btree_map::Entry::or_insert_with_key`]
2733 - [`f32::clamp`]
2734 - [`f64::clamp`]
2735 - [`hash_map::Entry::or_insert_with_key`]
2736 - [`Ord::clamp`]
2737 - [`RefCell::take`]
2738 - [`slice::fill`]
2739 - [`UnsafeCell::get_mut`]
2740
2741 The following previously stable methods are now `const`.
2742
2743 - [`IpAddr::is_ipv4`]
2744 - [`IpAddr::is_ipv6`]
2745 - [`IpAddr::is_unspecified`]
2746 - [`IpAddr::is_loopback`]
2747 - [`IpAddr::is_multicast`]
2748 - [`Ipv4Addr::octets`]
2749 - [`Ipv4Addr::is_loopback`]
2750 - [`Ipv4Addr::is_private`]
2751 - [`Ipv4Addr::is_link_local`]
2752 - [`Ipv4Addr::is_multicast`]
2753 - [`Ipv4Addr::is_broadcast`]
2754 - [`Ipv4Addr::is_documentation`]
2755 - [`Ipv4Addr::to_ipv6_compatible`]
2756 - [`Ipv4Addr::to_ipv6_mapped`]
2757 - [`Ipv6Addr::segments`]
2758 - [`Ipv6Addr::is_unspecified`]
2759 - [`Ipv6Addr::is_loopback`]
2760 - [`Ipv6Addr::is_multicast`]
2761 - [`Ipv6Addr::to_ipv4`]
2762 - [`Layout::size`]
2763 - [`Layout::align`]
2764 - [`Layout::from_size_align`]
2765 - `pow` for all integer types.
2766 - `checked_pow` for all integer types.
2767 - `saturating_pow` for all integer types.
2768 - `wrapping_pow` for all integer types.
2769 - `next_power_of_two` for all unsigned integer types.
2770 - `checked_next_power_of_two` for all unsigned integer types.
2771
2772 Cargo
2773 -----------------------
2774
2775 - [Added the `[build.rustc-workspace-wrapper]` option.][cargo/8976]
2776 This option sets a wrapper to execute instead of `rustc`, for workspace members only.
2777 - [`cargo:rerun-if-changed` will now, if provided a directory, scan the entire
2778 contents of that directory for changes.][cargo/8973]
2779 - [Added the `--workspace` flag to the `cargo update` command.][cargo/8725]
2780
2781 Misc
2782 ----
2783
2784 - [The search results tab and the help button are focusable with keyboard in rustdoc.][79896]
2785 - [Running tests will now print the total time taken to execute.][75752]
2786
2787 Compatibility Notes
2788 -------------------
2789
2790 - [The `compare_and_swap` method on atomics has been deprecated.][79261] It's
2791 recommended to use the `compare_exchange` and `compare_exchange_weak` methods instead.
2792 - [Changes in how `TokenStream`s are checked have fixed some cases where you could write
2793 unhygenic `macro_rules!` macros.][79472]
2794 - [`#![test]` as an inner attribute is now considered unstable like other inner macro
2795 attributes, and reports an error by default through the `soft_unstable` lint.][79003]
2796 - [Overriding a `forbid` lint at the same level that it was set is now a hard error.][78864]
2797 - [You can no longer intercept `panic!` calls by supplying your own macro.][78343] It's
2798 recommended to use the `#[panic_handler]` attribute to provide your own implementation.
2799 - [Semi-colons after item statements (e.g. `struct Foo {};`) now produce a warning.][78296]
2800
2801 [74989]: https://github.com/rust-lang/rust/pull/74989
2802 [79261]: https://github.com/rust-lang/rust/pull/79261
2803 [79896]: https://github.com/rust-lang/rust/pull/79896
2804 [79484]: https://github.com/rust-lang/rust/pull/79484
2805 [79472]: https://github.com/rust-lang/rust/pull/79472
2806 [79270]: https://github.com/rust-lang/rust/pull/79270
2807 [79003]: https://github.com/rust-lang/rust/pull/79003
2808 [78864]: https://github.com/rust-lang/rust/pull/78864
2809 [78636]: https://github.com/rust-lang/rust/pull/78636
2810 [78439]: https://github.com/rust-lang/rust/pull/78439
2811 [78343]: https://github.com/rust-lang/rust/pull/78343
2812 [78296]: https://github.com/rust-lang/rust/pull/78296
2813 [78068]: https://github.com/rust-lang/rust/pull/78068
2814 [75752]: https://github.com/rust-lang/rust/pull/75752
2815 [74699]: https://github.com/rust-lang/rust/pull/74699
2816 [78142]: https://github.com/rust-lang/rust/pull/78142
2817 [77484]: https://github.com/rust-lang/rust/pull/77484
2818 [cargo/8976]: https://github.com/rust-lang/cargo/pull/8976
2819 [cargo/8973]: https://github.com/rust-lang/cargo/pull/8973
2820 [cargo/8725]: https://github.com/rust-lang/cargo/pull/8725
2821 [`IpAddr::is_ipv4`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv4
2822 [`IpAddr::is_ipv6`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv6
2823 [`IpAddr::is_unspecified`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_unspecified
2824 [`IpAddr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_loopback
2825 [`IpAddr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_multicast
2826 [`Ipv4Addr::octets`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.octets
2827 [`Ipv4Addr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_loopback
2828 [`Ipv4Addr::is_private`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_private
2829 [`Ipv4Addr::is_link_local`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_link_local
2830 [`Ipv4Addr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_multicast
2831 [`Ipv4Addr::is_broadcast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_broadcast
2832 [`Ipv4Addr::is_documentation`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.is_documentation
2833 [`Ipv4Addr::to_ipv6_compatible`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.to_ipv6_compatible
2834 [`Ipv4Addr::to_ipv6_mapped`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv4Addr.html#method.to_ipv6_mapped
2835 [`Ipv6Addr::segments`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.segments
2836 [`Ipv6Addr::is_unspecified`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_unspecified
2837 [`Ipv6Addr::is_loopback`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_loopback
2838 [`Ipv6Addr::is_multicast`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.is_multicast
2839 [`Ipv6Addr::to_ipv4`]: https://doc.rust-lang.org/stable/std/net/struct.Ipv6Addr.html#method.to_ipv4
2840 [`Layout::align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align
2841 [`Layout::from_size_align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.from_size_align
2842 [`Layout::size`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.size
2843 [`Ord::clamp`]: https://doc.rust-lang.org/stable/std/cmp/trait.Ord.html#method.clamp
2844 [`RefCell::take`]: https://doc.rust-lang.org/stable/std/cell/struct.RefCell.html#method.take
2845 [`UnsafeCell::get_mut`]: https://doc.rust-lang.org/stable/std/cell/struct.UnsafeCell.html#method.get_mut
2846 [`bool::then`]: https://doc.rust-lang.org/stable/std/primitive.bool.html#method.then
2847 [`btree_map::Entry::or_insert_with_key`]: https://doc.rust-lang.org/stable/std/collections/btree_map/enum.Entry.html#method.or_insert_with_key
2848 [`f32::clamp`]: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp
2849 [`f64::clamp`]: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.clamp
2850 [`hash_map::Entry::or_insert_with_key`]: https://doc.rust-lang.org/stable/std/collections/hash_map/enum.Entry.html#method.or_insert_with_key
2851 [`slice::fill`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.fill
2852
2853
2854 Version 1.49.0 (2020-12-31)
2855 ============================
2856
2857 Language
2858 -----------------------
2859
2860 - [Unions can now implement `Drop`, and you can now have a field in a union
2861 with `ManuallyDrop<T>`.][77547]
2862 - [You can now cast uninhabited enums to integers.][76199]
2863 - [You can now bind by reference and by move in patterns.][76119] This
2864 allows you to selectively borrow individual components of a type. E.g.
2865 ```rust
2866 #[derive(Debug)]
2867 struct Person {
2868 name: String,
2869 age: u8,
2870 }
2871
2872 let person = Person {
2873 name: String::from("Alice"),
2874 age: 20,
2875 };
2876
2877 // `name` is moved out of person, but `age` is referenced.
2878 let Person { name, ref age } = person;
2879 println!("{} {}", name, age);
2880 ```
2881
2882 Compiler
2883 -----------------------
2884
2885 - [Added tier 1\* support for `aarch64-unknown-linux-gnu`.][78228]
2886 - [Added tier 2 support for `aarch64-apple-darwin`.][75991]
2887 - [Added tier 2 support for `aarch64-pc-windows-msvc`.][75914]
2888 - [Added tier 3 support for `mipsel-unknown-none`.][78676]
2889 - [Raised the minimum supported LLVM version to LLVM 9.][78848]
2890 - [Output from threads spawned in tests is now captured.][78227]
2891 - [Change os and vendor values to "none" and "unknown" for some targets][78951]
2892
2893 \* Refer to Rust's [platform support page][platform-support-doc] for more
2894 information on Rust's tiered platform support.
2895
2896 Libraries
2897 -----------------------
2898
2899 - [`RangeInclusive` now checks for exhaustion when calling `contains` and indexing.][78109]
2900 - [`ToString::to_string` now no longer shrinks the internal buffer in the default implementation.][77997]
2901
2902 Stabilized APIs
2903 ---------------
2904
2905 - [`slice::select_nth_unstable`]
2906 - [`slice::select_nth_unstable_by`]
2907 - [`slice::select_nth_unstable_by_key`]
2908
2909 The following previously stable methods are now `const`.
2910
2911 - [`Poll::is_ready`]
2912 - [`Poll::is_pending`]
2913
2914 Cargo
2915 -----------------------
2916 - [Building a crate with `cargo-package` should now be independently reproducible.][cargo/8864]
2917 - [`cargo-tree` now marks proc-macro crates.][cargo/8765]
2918 - [Added `CARGO_PRIMARY_PACKAGE` build-time environment variable.][cargo/8758] This
2919 variable will be set if the crate being built is one the user selected to build, either
2920 with `-p` or through defaults.
2921 - [You can now use glob patterns when specifying packages & targets.][cargo/8752]
2922
2923
2924 Compatibility Notes
2925 -------------------
2926
2927 - [Demoted `i686-unknown-freebsd` from host tier 2 to target tier 2 support.][78746]
2928 - [Macros that end with a semi-colon are now treated as statements even if they expand to nothing.][78376]
2929 - [Rustc will now check for the validity of some built-in attributes on enum variants.][77015]
2930 Previously such invalid or unused attributes could be ignored.
2931 - Leading whitespace is stripped more uniformly in documentation comments, which may change behavior. You
2932 read [this post about the changes][rustdoc-ws-post] for more details.
2933 - [Trait bounds are no longer inferred for associated types.][79904]
2934
2935 Internal Only
2936 -------------
2937 These changes provide no direct user facing benefits, but represent significant
2938 improvements to the internals and overall performance of rustc and
2939 related tools.
2940
2941 - [rustc's internal crates are now compiled using the `initial-exec` Thread
2942 Local Storage model.][78201]
2943 - [Calculate visibilities once in resolve.][78077]
2944 - [Added `system` to the `llvm-libunwind` bootstrap config option.][77703]
2945 - [Added `--color` for configuring terminal color support to bootstrap.][79004]
2946
2947
2948 [75991]: https://github.com/rust-lang/rust/pull/75991
2949 [78951]: https://github.com/rust-lang/rust/pull/78951
2950 [78848]: https://github.com/rust-lang/rust/pull/78848
2951 [78746]: https://github.com/rust-lang/rust/pull/78746
2952 [78376]: https://github.com/rust-lang/rust/pull/78376
2953 [78228]: https://github.com/rust-lang/rust/pull/78228
2954 [78227]: https://github.com/rust-lang/rust/pull/78227
2955 [78201]: https://github.com/rust-lang/rust/pull/78201
2956 [78109]: https://github.com/rust-lang/rust/pull/78109
2957 [78077]: https://github.com/rust-lang/rust/pull/78077
2958 [77997]: https://github.com/rust-lang/rust/pull/77997
2959 [77703]: https://github.com/rust-lang/rust/pull/77703
2960 [77547]: https://github.com/rust-lang/rust/pull/77547
2961 [77015]: https://github.com/rust-lang/rust/pull/77015
2962 [76199]: https://github.com/rust-lang/rust/pull/76199
2963 [76119]: https://github.com/rust-lang/rust/pull/76119
2964 [75914]: https://github.com/rust-lang/rust/pull/75914
2965 [79004]: https://github.com/rust-lang/rust/pull/79004
2966 [78676]: https://github.com/rust-lang/rust/pull/78676
2967 [79904]: https://github.com/rust-lang/rust/issues/79904
2968 [cargo/8864]: https://github.com/rust-lang/cargo/pull/8864
2969 [cargo/8765]: https://github.com/rust-lang/cargo/pull/8765
2970 [cargo/8758]: https://github.com/rust-lang/cargo/pull/8758
2971 [cargo/8752]: https://github.com/rust-lang/cargo/pull/8752
2972 [`slice::select_nth_unstable`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.select_nth_unstable
2973 [`slice::select_nth_unstable_by`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.select_nth_unstable_by
2974 [`slice::select_nth_unstable_by_key`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.select_nth_unstable_by_key
2975 [`Poll::is_ready`]: https://doc.rust-lang.org/stable/std/task/enum.Poll.html#method.is_ready
2976 [`Poll::is_pending`]: https://doc.rust-lang.org/stable/std/task/enum.Poll.html#method.is_pending
2977 [rustdoc-ws-post]: https://blog.guillaume-gomez.fr/articles/2020-11-11+New+doc+comment+handling+in+rustdoc
2978
2979 Version 1.48.0 (2020-11-19)
2980 ==========================
2981
2982 Language
2983 --------
2984
2985 - [The `unsafe` keyword is now syntactically permitted on modules.][75857] This
2986 is still rejected *semantically*, but can now be parsed by procedural macros.
2987
2988 Compiler
2989 --------
2990 - [Stabilised the `-C link-self-contained=<yes|no>` compiler flag.][76158] This tells
2991 `rustc` whether to link its own C runtime and libraries or to rely on a external
2992 linker to find them. (Supported only on `windows-gnu`, `linux-musl`, and `wasi` platforms.)
2993 - [You can now use `-C target-feature=+crt-static` on `linux-gnu` targets.][77386]
2994 Note: If you're using cargo you must explicitly pass the `--target` flag.
2995 - [Added tier 2\* support for `aarch64-unknown-linux-musl`.][76420]
2996
2997 \* Refer to Rust's [platform support page][platform-support-doc] for more
2998 information on Rust's tiered platform support.
2999
3000 Libraries
3001 ---------
3002 - [`io::Write` is now implemented for `&ChildStdin` `&Sink`, `&Stdout`,
3003 and `&Stderr`.][76275]
3004 - [All arrays of any length now implement `TryFrom<Vec<T>>`.][76310]
3005 - [The `matches!` macro now supports having a trailing comma.][74880]
3006 - [`Vec<A>` now implements `PartialEq<[B]>` where `A: PartialEq<B>`.][74194]
3007 - [The `RefCell::{replace, replace_with, clone}` methods now all use `#[track_caller]`.][77055]
3008
3009 Stabilized APIs
3010 ---------------
3011 - [`slice::as_ptr_range`]
3012 - [`slice::as_mut_ptr_range`]
3013 - [`VecDeque::make_contiguous`]
3014 - [`future::pending`]
3015 - [`future::ready`]
3016
3017 The following previously stable methods are now `const fn`'s:
3018
3019 - [`Option::is_some`]
3020 - [`Option::is_none`]
3021 - [`Option::as_ref`]
3022 - [`Result::is_ok`]
3023 - [`Result::is_err`]
3024 - [`Result::as_ref`]
3025 - [`Ordering::reverse`]
3026 - [`Ordering::then`]
3027
3028 Cargo
3029 -----
3030
3031 Rustdoc
3032 -------
3033 - [You can now link to items in `rustdoc` using the intra-doc link
3034 syntax.][74430] E.g. ``/// Uses [`std::future`]`` will automatically generate
3035 a link to `std::future`'s documentation. See ["Linking to items by
3036 name"][intradoc-links] for more information.
3037 - [You can now specify `#[doc(alias = "<alias>")]` on items to add search aliases
3038 when searching through `rustdoc`'s UI.][75740]
3039
3040 Compatibility Notes
3041 -------------------
3042 - [Promotion of references to `'static` lifetime inside `const fn` now follows the
3043 same rules as inside a `fn` body.][75502] In particular, `&foo()` will not be
3044 promoted to `'static` lifetime any more inside `const fn`s.
3045 - [Associated type bindings on trait objects are now verified to meet the bounds
3046 declared on the trait when checking that they implement the trait.][27675]
3047 - [When trait bounds on associated types or opaque types are ambiguous, the
3048 compiler no longer makes an arbitrary choice on which bound to use.][54121]
3049 - [Fixed recursive nonterminals not being expanded in macros during
3050 pretty-print/reparse check.][77153] This may cause errors if your macro wasn't
3051 correctly handling recursive nonterminal tokens.
3052 - [`&mut` references to non zero-sized types are no longer promoted.][75585]
3053 - [`rustc` will now warn if you use attributes like `#[link_name]` or `#[cold]`
3054 in places where they have no effect.][73461]
3055 - [Updated `_mm256_extract_epi8` and `_mm256_extract_epi16` signatures in
3056 `arch::{x86, x86_64}` to return `i32` to match the vendor signatures.][73166]
3057 - [`mem::uninitialized` will now panic if any inner types inside a struct or enum
3058 disallow zero-initialization.][71274]
3059 - [`#[target_feature]` will now error if used in a place where it has no effect.][78143]
3060 - [Foreign exceptions are now caught by `catch_unwind` and will cause an abort.][70212]
3061 Note: This behaviour is not guaranteed and is still considered undefined behaviour,
3062 see the [`catch_unwind`] documentation for further information.
3063
3064
3065
3066 Internal Only
3067 -------------
3068 These changes provide no direct user facing benefits, but represent significant
3069 improvements to the internals and overall performance of rustc and
3070 related tools.
3071
3072 - [Building `rustc` from source now uses `ninja` by default over `make`.][74922]
3073 You can continue building with `make` by setting `ninja=false` in
3074 your `config.toml`.
3075 - [cg_llvm: `fewer_names` in `uncached_llvm_type`][76030]
3076 - [Made `ensure_sufficient_stack()` non-generic][76680]
3077
3078 [78143]: https://github.com/rust-lang/rust/issues/78143
3079 [76680]: https://github.com/rust-lang/rust/pull/76680/
3080 [76030]: https://github.com/rust-lang/rust/pull/76030/
3081 [70212]: https://github.com/rust-lang/rust/pull/70212/
3082 [27675]: https://github.com/rust-lang/rust/issues/27675/
3083 [54121]: https://github.com/rust-lang/rust/issues/54121/
3084 [71274]: https://github.com/rust-lang/rust/pull/71274/
3085 [77386]: https://github.com/rust-lang/rust/pull/77386/
3086 [77153]: https://github.com/rust-lang/rust/pull/77153/
3087 [77055]: https://github.com/rust-lang/rust/pull/77055/
3088 [76275]: https://github.com/rust-lang/rust/pull/76275/
3089 [76310]: https://github.com/rust-lang/rust/pull/76310/
3090 [76420]: https://github.com/rust-lang/rust/pull/76420/
3091 [76158]: https://github.com/rust-lang/rust/pull/76158/
3092 [75857]: https://github.com/rust-lang/rust/pull/75857/
3093 [75585]: https://github.com/rust-lang/rust/pull/75585/
3094 [75740]: https://github.com/rust-lang/rust/pull/75740/
3095 [75502]: https://github.com/rust-lang/rust/pull/75502/
3096 [74880]: https://github.com/rust-lang/rust/pull/74880/
3097 [74922]: https://github.com/rust-lang/rust/pull/74922/
3098 [74430]: https://github.com/rust-lang/rust/pull/74430/
3099 [74194]: https://github.com/rust-lang/rust/pull/74194/
3100 [73461]: https://github.com/rust-lang/rust/pull/73461/
3101 [73166]: https://github.com/rust-lang/rust/pull/73166/
3102 [intradoc-links]: https://doc.rust-lang.org/rustdoc/linking-to-items-by-name.html
3103 [`catch_unwind`]: https://doc.rust-lang.org/std/panic/fn.catch_unwind.html
3104 [`Option::is_some`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.is_some
3105 [`Option::is_none`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.is_none
3106 [`Option::as_ref`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_ref
3107 [`Result::is_ok`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.is_ok
3108 [`Result::is_err`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.is_err
3109 [`Result::as_ref`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.as_ref
3110 [`Ordering::reverse`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.reverse
3111 [`Ordering::then`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then
3112 [`slice::as_ptr_range`]: https://doc.rust-lang.org/std/primitive.slice.html#method.as_ptr_range
3113 [`slice::as_mut_ptr_range`]: https://doc.rust-lang.org/std/primitive.slice.html#method.as_mut_ptr_range
3114 [`VecDeque::make_contiguous`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.make_contiguous
3115 [`future::pending`]: https://doc.rust-lang.org/std/future/fn.pending.html
3116 [`future::ready`]: https://doc.rust-lang.org/std/future/fn.ready.html
3117
3118
3119 Version 1.47.0 (2020-10-08)
3120 ==========================
3121
3122 Language
3123 --------
3124 - [Closures will now warn when not used.][74869]
3125
3126 Compiler
3127 --------
3128 - [Stabilized the `-C control-flow-guard` codegen option][73893], which enables
3129 [Control Flow Guard][1.47.0-cfg] for Windows platforms, and is ignored on other
3130 platforms.
3131 - [Upgraded to LLVM 11.][73526]
3132 - [Added tier 3\* support for the `thumbv4t-none-eabi` target.][74419]
3133 - [Upgrade the FreeBSD toolchain to version 11.4][75204]
3134 - [`RUST_BACKTRACE`'s output is now more compact.][75048]
3135
3136 \* Refer to Rust's [platform support page][platform-support-doc] for more
3137 information on Rust's tiered platform support.
3138
3139 Libraries
3140 ---------
3141 - [`CStr` now implements `Index<RangeFrom<usize>>`.][74021]
3142 - [Traits in `std`/`core` are now implemented for arrays of any length, not just
3143 those of length less than 33.][74060]
3144 - [`ops::RangeFull` and `ops::Range` now implement Default.][73197]
3145 - [`panic::Location` now implements `Copy`, `Clone`, `Eq`, `Hash`, `Ord`,
3146 `PartialEq`, and `PartialOrd`.][73583]
3147
3148 Stabilized APIs
3149 ---------------
3150 - [`Ident::new_raw`]
3151 - [`Range::is_empty`]
3152 - [`RangeInclusive::is_empty`]
3153 - [`Result::as_deref`]
3154 - [`Result::as_deref_mut`]
3155 - [`Vec::leak`]
3156 - [`pointer::offset_from`]
3157 - [`f32::TAU`]
3158 - [`f64::TAU`]
3159
3160 The following previously stable APIs have now been made const.
3161
3162 - [The `new` method for all `NonZero` integers.][73858]
3163 - [The `checked_add`,`checked_sub`,`checked_mul`,`checked_neg`, `checked_shl`,
3164 `checked_shr`, `saturating_add`, `saturating_sub`, and `saturating_mul`
3165 methods for all integers.][73858]
3166 - [The `checked_abs`, `saturating_abs`, `saturating_neg`, and `signum` for all
3167 signed integers.][73858]
3168 - [The `is_ascii_alphabetic`, `is_ascii_uppercase`, `is_ascii_lowercase`,
3169 `is_ascii_alphanumeric`, `is_ascii_digit`, `is_ascii_hexdigit`,
3170 `is_ascii_punctuation`, `is_ascii_graphic`, `is_ascii_whitespace`, and
3171 `is_ascii_control` methods for `char` and `u8`.][73858]
3172
3173 Cargo
3174 -----
3175 - [`build-dependencies` are now built with opt-level 0 by default.][cargo/8500]
3176 You can override this by setting the following in your `Cargo.toml`.
3177 ```toml
3178 [profile.release.build-override]
3179 opt-level = 3
3180 ```
3181 - [`cargo-help` will now display man pages for commands rather just the
3182 `--help` text.][cargo/8456]
3183 - [`cargo-metadata` now emits a `test` field indicating if a target has
3184 tests enabled.][cargo/8478]
3185 - [`workspace.default-members` now respects `workspace.exclude`.][cargo/8485]
3186 - [`cargo-publish` will now use an alternative registry by default if it's the
3187 only registry specified in `package.publish`.][cargo/8571]
3188
3189 Misc
3190 ----
3191 - [Added a help button beside Rustdoc's searchbar that explains rustdoc's
3192 type based search.][75366]
3193 - [Added the Ayu theme to rustdoc.][71237]
3194
3195 Compatibility Notes
3196 -------------------
3197 - [Bumped the minimum supported Emscripten version to 1.39.20.][75716]
3198 - [Fixed a regression parsing `{} && false` in tail expressions.][74650]
3199 - [Added changes to how proc-macros are expanded in `macro_rules!` that should
3200 help to preserve more span information.][73084] These changes may cause
3201 compilation errors if your macro was unhygenic or didn't correctly handle
3202 `Delimiter::None`.
3203 - [Moved support for the CloudABI target to tier 3.][75568]
3204 - [`linux-gnu` targets now require minimum kernel 2.6.32 and glibc 2.11.][74163]
3205 - [Added the `rustc-docs` component.][75560] This allows you to install
3206 and read the documentation for the compiler internal APIs. (Currently only
3207 available for `x86_64-unknown-linux-gnu`.)
3208
3209 Internal Only
3210 --------
3211
3212 - [Improved default settings for bootstrapping in `x.py`.][73964] You can read details about this change in the ["Changes to `x.py` defaults"](https://blog.rust-lang.org/inside-rust/2020/08/30/changes-to-x-py-defaults.html) post on the Inside Rust blog.
3213
3214 [1.47.0-cfg]: https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard
3215 [75048]: https://github.com/rust-lang/rust/pull/75048/
3216 [74163]: https://github.com/rust-lang/rust/pull/74163/
3217 [71237]: https://github.com/rust-lang/rust/pull/71237/
3218 [74869]: https://github.com/rust-lang/rust/pull/74869/
3219 [73858]: https://github.com/rust-lang/rust/pull/73858/
3220 [75716]: https://github.com/rust-lang/rust/pull/75716/
3221 [75560]: https://github.com/rust-lang/rust/pull/75560/
3222 [75568]: https://github.com/rust-lang/rust/pull/75568/
3223 [75366]: https://github.com/rust-lang/rust/pull/75366/
3224 [75204]: https://github.com/rust-lang/rust/pull/75204/
3225 [74650]: https://github.com/rust-lang/rust/pull/74650/
3226 [74419]: https://github.com/rust-lang/rust/pull/74419/
3227 [73964]: https://github.com/rust-lang/rust/pull/73964/
3228 [74021]: https://github.com/rust-lang/rust/pull/74021/
3229 [74060]: https://github.com/rust-lang/rust/pull/74060/
3230 [73893]: https://github.com/rust-lang/rust/pull/73893/
3231 [73526]: https://github.com/rust-lang/rust/pull/73526/
3232 [73583]: https://github.com/rust-lang/rust/pull/73583/
3233 [73084]: https://github.com/rust-lang/rust/pull/73084/
3234 [73197]: https://github.com/rust-lang/rust/pull/73197/
3235 [cargo/8456]: https://github.com/rust-lang/cargo/pull/8456/
3236 [cargo/8478]: https://github.com/rust-lang/cargo/pull/8478/
3237 [cargo/8485]: https://github.com/rust-lang/cargo/pull/8485/
3238 [cargo/8500]: https://github.com/rust-lang/cargo/pull/8500/
3239 [cargo/8571]: https://github.com/rust-lang/cargo/pull/8571/
3240 [`Ident::new_raw`]: https://doc.rust-lang.org/nightly/proc_macro/struct.Ident.html#method.new_raw
3241 [`Range::is_empty`]: https://doc.rust-lang.org/nightly/std/ops/struct.Range.html#method.is_empty
3242 [`RangeInclusive::is_empty`]: https://doc.rust-lang.org/nightly/std/ops/struct.RangeInclusive.html#method.is_empty
3243 [`Result::as_deref_mut`]: https://doc.rust-lang.org/nightly/std/result/enum.Result.html#method.as_deref_mut
3244 [`Result::as_deref`]: https://doc.rust-lang.org/nightly/std/result/enum.Result.html#method.as_deref
3245 [`Vec::leak`]: https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.leak
3246 [`f32::TAU`]: https://doc.rust-lang.org/nightly/std/f32/consts/constant.TAU.html
3247 [`f64::TAU`]: https://doc.rust-lang.org/nightly/std/f64/consts/constant.TAU.html
3248 [`pointer::offset_from`]: https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset_from
3249
3250
3251 Version 1.46.0 (2020-08-27)
3252 ==========================
3253
3254 Language
3255 --------
3256 - [`if`, `match`, and `loop` expressions can now be used in const functions.][72437]
3257 - [Additionally you are now also able to coerce and cast to slices (`&[T]`) in
3258 const functions.][73862]
3259 - [The `#[track_caller]` attribute can now be added to functions to use the
3260 function's caller's location information for panic messages.][72445]
3261 - [Recursively indexing into tuples no longer needs parentheses.][71322] E.g.
3262 `x.0.0` over `(x.0).0`.
3263 - [`mem::transmute` can now be used in statics and constants.][72920] **Note**
3264 You currently can't use `mem::transmute` in constant functions.
3265
3266 Compiler
3267 --------
3268 - [You can now use the `cdylib` target on Apple iOS and tvOS platforms.][73516]
3269 - [Enabled static "Position Independent Executables" by default
3270 for `x86_64-unknown-linux-musl`.][70740]
3271
3272 Libraries
3273 ---------
3274 - [`mem::forget` is now a `const fn`.][73887]
3275 - [`String` now implements `From<char>`.][73466]
3276 - [The `leading_ones`, and `trailing_ones` methods have been stabilised for all
3277 integer types.][73032]
3278 - [`vec::IntoIter<T>` now implements `AsRef<[T]>`.][72583]
3279 - [All non-zero integer types (`NonZeroU8`) now implement `TryFrom` for their
3280 zero-able equivalent (e.g. `TryFrom<u8>`).][72717]
3281 - [`&[T]` and `&mut [T]` now implement `PartialEq<Vec<T>>`.][71660]
3282 - [`(String, u16)` now implements `ToSocketAddrs`.][73007]
3283 - [`vec::Drain<'_, T>` now implements `AsRef<[T]>`.][72584]
3284
3285 Stabilized APIs
3286 ---------------
3287 - [`Option::zip`]
3288 - [`vec::Drain::as_slice`]
3289
3290 Cargo
3291 -----
3292 Added a number of new environment variables that are now available when
3293 compiling your crate.
3294
3295 - [`CARGO_BIN_NAME` and `CARGO_CRATE_NAME`][cargo/8270] Providing the name of
3296 the specific binary being compiled and the name of the crate.
3297 - [`CARGO_PKG_LICENSE`][cargo/8325] The license from the manifest of the package.
3298 - [`CARGO_PKG_LICENSE_FILE`][cargo/8387] The path to the license file.
3299
3300 Compatibility Notes
3301 -------------------
3302 - [The target configuration option `abi_blacklist` has been renamed
3303 to `unsupported_abis`.][74150] The old name will still continue to work.
3304 - [Rustc will now warn if you cast a C-like enum that implements `Drop`.][72331]
3305 This was previously accepted but will become a hard error in a future release.
3306 - [Rustc will fail to compile if you have a struct with
3307 `#[repr(i128)]` or `#[repr(u128)]`.][74109] This representation is currently only
3308 allowed on `enum`s.
3309 - [Tokens passed to `macro_rules!` are now always captured.][73293] This helps
3310 ensure that spans have the correct information, and may cause breakage if you
3311 were relying on receiving spans with dummy information.
3312 - [The InnoSetup installer for Windows is no longer available.][72569] This was
3313 a legacy installer that was replaced by a MSI installer a few years ago but
3314 was still being built.
3315 - [`{f32, f64}::asinh` now returns the correct values for negative numbers.][72486]
3316 - [Rustc will no longer accept overlapping trait implementations that only
3317 differ in how the lifetime was bound.][72493]
3318 - [Rustc now correctly relates the lifetime of an existential associated
3319 type.][71896] This fixes some edge cases where `rustc` would erroneously allow
3320 you to pass a shorter lifetime than expected.
3321 - [Rustc now dynamically links to `libz` (also called `zlib`) on Linux.][74420]
3322 The library will need to be installed for `rustc` to work, even though we
3323 expect it to be already available on most systems.
3324 - [Tests annotated with `#[should_panic]` are broken on ARMv7 while running
3325 under QEMU.][74820]
3326 - [Pretty printing of some tokens in procedural macros changed.][75453] The
3327 exact output returned by rustc's pretty printing is an unstable
3328 implementation detail: we recommend any macro relying on it to switch to a
3329 more robust parsing system.
3330
3331 [75453]: https://github.com/rust-lang/rust/issues/75453/
3332 [74820]: https://github.com/rust-lang/rust/issues/74820/
3333 [74420]: https://github.com/rust-lang/rust/issues/74420/
3334 [74109]: https://github.com/rust-lang/rust/pull/74109/
3335 [74150]: https://github.com/rust-lang/rust/pull/74150/
3336 [73862]: https://github.com/rust-lang/rust/pull/73862/
3337 [73887]: https://github.com/rust-lang/rust/pull/73887/
3338 [73466]: https://github.com/rust-lang/rust/pull/73466/
3339 [73516]: https://github.com/rust-lang/rust/pull/73516/
3340 [73293]: https://github.com/rust-lang/rust/pull/73293/
3341 [73007]: https://github.com/rust-lang/rust/pull/73007/
3342 [73032]: https://github.com/rust-lang/rust/pull/73032/
3343 [72920]: https://github.com/rust-lang/rust/pull/72920/
3344 [72569]: https://github.com/rust-lang/rust/pull/72569/
3345 [72583]: https://github.com/rust-lang/rust/pull/72583/
3346 [72584]: https://github.com/rust-lang/rust/pull/72584/
3347 [72717]: https://github.com/rust-lang/rust/pull/72717/
3348 [72437]: https://github.com/rust-lang/rust/pull/72437/
3349 [72445]: https://github.com/rust-lang/rust/pull/72445/
3350 [72486]: https://github.com/rust-lang/rust/pull/72486/
3351 [72493]: https://github.com/rust-lang/rust/pull/72493/
3352 [72331]: https://github.com/rust-lang/rust/pull/72331/
3353 [71896]: https://github.com/rust-lang/rust/pull/71896/
3354 [71660]: https://github.com/rust-lang/rust/pull/71660/
3355 [71322]: https://github.com/rust-lang/rust/pull/71322/
3356 [70740]: https://github.com/rust-lang/rust/pull/70740/
3357 [cargo/8270]: https://github.com/rust-lang/cargo/pull/8270/
3358 [cargo/8325]: https://github.com/rust-lang/cargo/pull/8325/
3359 [cargo/8387]: https://github.com/rust-lang/cargo/pull/8387/
3360 [`Option::zip`]: https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
3361 [`vec::Drain::as_slice`]: https://doc.rust-lang.org/stable/std/vec/struct.Drain.html#method.as_slice
3362
3363
3364 Version 1.45.2 (2020-08-03)
3365 ==========================
3366
3367 * [Fix bindings in tuple struct patterns][74954]
3368 * [Fix track_caller integration with trait objects][74784]
3369
3370 [74954]: https://github.com/rust-lang/rust/issues/74954
3371 [74784]: https://github.com/rust-lang/rust/issues/74784
3372
3373
3374 Version 1.45.1 (2020-07-30)
3375 ==========================
3376
3377 * [Fix const propagation with references.][73613]
3378 * [rustfmt accepts rustfmt_skip in cfg_attr again.][73078]
3379 * [Avoid spurious implicit region bound.][74509]
3380 * [Install clippy on x.py install][74457]
3381
3382 [73613]: https://github.com/rust-lang/rust/pull/73613
3383 [73078]: https://github.com/rust-lang/rust/issues/73078
3384 [74509]: https://github.com/rust-lang/rust/pull/74509
3385 [74457]: https://github.com/rust-lang/rust/pull/74457
3386
3387
3388 Version 1.45.0 (2020-07-16)
3389 ==========================
3390
3391 Language
3392 --------
3393 - [Out of range float to int conversions using `as` has been defined as a saturating
3394 conversion.][71269] This was previously undefined behaviour, but you can use the
3395 `{f64, f32}::to_int_unchecked` methods to continue using the current behaviour, which
3396 may be desirable in rare performance sensitive situations.
3397 - [`mem::Discriminant<T>` now uses `T`'s discriminant type instead of always
3398 using `u64`.][70705]
3399 - [Function like procedural macros can now be used in expression, pattern, and statement
3400 positions.][68717] This means you can now use a function-like procedural macro
3401 anywhere you can use a declarative (`macro_rules!`) macro.
3402
3403 Compiler
3404 --------
3405 - [You can now override individual target features through the `target-feature`
3406 flag.][72094] E.g. `-C target-feature=+avx2 -C target-feature=+fma` is now
3407 equivalent to `-C target-feature=+avx2,+fma`.
3408 - [Added the `force-unwind-tables` flag.][69984] This option allows
3409 rustc to always generate unwind tables regardless of panic strategy.
3410 - [Added the `embed-bitcode` flag.][71716] This codegen flag allows rustc
3411 to include LLVM bitcode into generated `rlib`s (this is on by default).
3412 - [Added the `tiny` value to the `code-model` codegen flag.][72397]
3413 - [Added tier 3 support\* for the `mipsel-sony-psp` target.][72062]
3414 - [Added tier 3 support for the `thumbv7a-uwp-windows-msvc` target.][72133]
3415 - [Upgraded to LLVM 10.][67759]
3416
3417 \* Refer to Rust's [platform support page][platform-support-doc] for more
3418 information on Rust's tiered platform support.
3419
3420
3421 Libraries
3422 ---------
3423 - [`net::{SocketAddr, SocketAddrV4, SocketAddrV6}` now implements `PartialOrd`
3424 and `Ord`.][72239]
3425 - [`proc_macro::TokenStream` now implements `Default`.][72234]
3426 - [You can now use `char` with
3427 `ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}` to iterate over
3428 a range of codepoints.][72413] E.g.
3429 you can now write the following;
3430 ```rust
3431 for ch in 'a'..='z' {
3432 print!("{}", ch);
3433 }
3434 println!();
3435 // Prints "abcdefghijklmnopqrstuvwxyz"
3436 ```
3437 - [`OsString` now implements `FromStr`.][71662]
3438 - [The `saturating_neg` method has been added to all signed integer primitive
3439 types, and the `saturating_abs` method has been added for all integer
3440 primitive types.][71886]
3441 - [`Arc<T>`, `Rc<T>` now implement `From<Cow<'_, T>>`, and `Box` now
3442 implements `From<Cow>` when `T` is `[T: Copy]`, `str`, `CStr`, `OsStr`,
3443 or `Path`.][71447]
3444 - [`Box<[T]>` now implements `From<[T; N]>`.][71095]
3445 - [`BitOr` and `BitOrAssign` are implemented for all `NonZero`
3446 integer types.][69813]
3447 - [The `fetch_min`, and `fetch_max` methods have been added to all atomic
3448 integer types.][72324]
3449 - [The `fetch_update` method has been added to all atomic integer types.][71843]
3450
3451 Stabilized APIs
3452 ---------------
3453 - [`Arc::as_ptr`]
3454 - [`BTreeMap::remove_entry`]
3455 - [`Rc::as_ptr`]
3456 - [`rc::Weak::as_ptr`]
3457 - [`rc::Weak::from_raw`]
3458 - [`rc::Weak::into_raw`]
3459 - [`str::strip_prefix`]
3460 - [`str::strip_suffix`]
3461 - [`sync::Weak::as_ptr`]
3462 - [`sync::Weak::from_raw`]
3463 - [`sync::Weak::into_raw`]
3464 - [`char::UNICODE_VERSION`]
3465 - [`Span::resolved_at`]
3466 - [`Span::located_at`]
3467 - [`Span::mixed_site`]
3468 - [`unix::process::CommandExt::arg0`]
3469
3470 Cargo
3471 -----
3472
3473 - [Cargo uses the `embed-bitcode` flag to optimize disk usage and build
3474 time.][cargo/8066]
3475
3476 Misc
3477 ----
3478 - [Rustdoc now supports strikethrough text in Markdown.][71928] E.g.
3479 `~~outdated information~~` becomes "~~outdated information~~".
3480 - [Added an emoji to Rustdoc's deprecated API message.][72014]
3481
3482 Compatibility Notes
3483 -------------------
3484 - [Trying to self initialize a static value (that is creating a value using
3485 itself) is unsound and now causes a compile error.][71140]
3486 - [`{f32, f64}::powi` now returns a slightly different value on Windows.][73420]
3487 This is due to changes in LLVM's intrinsics which `{f32, f64}::powi` uses.
3488 - [Rustdoc's CLI's extra error exit codes have been removed.][71900] These were
3489 previously undocumented and not intended for public use. Rustdoc still provides
3490 a non-zero exit code on errors.
3491 - [Rustc's `lto` flag is incompatible with the new `embed-bitcode=no`.][71848]
3492 This may cause issues if LTO is enabled through `RUSTFLAGS` or `cargo rustc`
3493 flags while cargo is adding `embed-bitcode` itself. The recommended way to
3494 control LTO is with Cargo profiles, either in `Cargo.toml` or `.cargo/config`,
3495 or by setting `CARGO_PROFILE_<name>_LTO` in the environment.
3496
3497 Internals Only
3498 --------------
3499 - [Make clippy a git subtree instead of a git submodule][70655]
3500 - [Unify the undo log of all snapshot types][69464]
3501
3502 [71848]: https://github.com/rust-lang/rust/issues/71848/
3503 [73420]: https://github.com/rust-lang/rust/issues/73420/
3504 [72324]: https://github.com/rust-lang/rust/pull/72324/
3505 [71843]: https://github.com/rust-lang/rust/pull/71843/
3506 [71886]: https://github.com/rust-lang/rust/pull/71886/
3507 [72234]: https://github.com/rust-lang/rust/pull/72234/
3508 [72239]: https://github.com/rust-lang/rust/pull/72239/
3509 [72397]: https://github.com/rust-lang/rust/pull/72397/
3510 [72413]: https://github.com/rust-lang/rust/pull/72413/
3511 [72014]: https://github.com/rust-lang/rust/pull/72014/
3512 [72062]: https://github.com/rust-lang/rust/pull/72062/
3513 [72094]: https://github.com/rust-lang/rust/pull/72094/
3514 [72133]: https://github.com/rust-lang/rust/pull/72133/
3515 [67759]: https://github.com/rust-lang/rust/pull/67759/
3516 [71900]: https://github.com/rust-lang/rust/pull/71900/
3517 [71928]: https://github.com/rust-lang/rust/pull/71928/
3518 [71662]: https://github.com/rust-lang/rust/pull/71662/
3519 [71716]: https://github.com/rust-lang/rust/pull/71716/
3520 [71447]: https://github.com/rust-lang/rust/pull/71447/
3521 [71269]: https://github.com/rust-lang/rust/pull/71269/
3522 [71095]: https://github.com/rust-lang/rust/pull/71095/
3523 [71140]: https://github.com/rust-lang/rust/pull/71140/
3524 [70655]: https://github.com/rust-lang/rust/pull/70655/
3525 [70705]: https://github.com/rust-lang/rust/pull/70705/
3526 [69984]: https://github.com/rust-lang/rust/pull/69984/
3527 [69813]: https://github.com/rust-lang/rust/pull/69813/
3528 [69464]: https://github.com/rust-lang/rust/pull/69464/
3529 [68717]: https://github.com/rust-lang/rust/pull/68717/
3530 [cargo/8066]: https://github.com/rust-lang/cargo/pull/8066
3531 [`Arc::as_ptr`]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#method.as_ptr
3532 [`BTreeMap::remove_entry`]: https://doc.rust-lang.org/stable/std/collections/struct.BTreeMap.html#method.remove_entry
3533 [`Rc::as_ptr`]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#method.as_ptr
3534 [`rc::Weak::as_ptr`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.as_ptr
3535 [`rc::Weak::from_raw`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.from_raw
3536 [`rc::Weak::into_raw`]: https://doc.rust-lang.org/stable/std/rc/struct.Weak.html#method.into_raw
3537 [`sync::Weak::as_ptr`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.as_ptr
3538 [`sync::Weak::from_raw`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.from_raw
3539 [`sync::Weak::into_raw`]: https://doc.rust-lang.org/stable/std/sync/struct.Weak.html#method.into_raw
3540 [`str::strip_prefix`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.strip_prefix
3541 [`str::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.str.html#method.strip_suffix
3542 [`char::UNICODE_VERSION`]: https://doc.rust-lang.org/stable/std/char/constant.UNICODE_VERSION.html
3543 [`Span::resolved_at`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.resolved_at
3544 [`Span::located_at`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.located_at
3545 [`Span::mixed_site`]: https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.mixed_site
3546 [`unix::process::CommandExt::arg0`]: https://doc.rust-lang.org/std/os/unix/process/trait.CommandExt.html#tymethod.arg0
3547
3548
3549 Version 1.44.1 (2020-06-18)
3550 ===========================
3551
3552 * [rustfmt accepts rustfmt_skip in cfg_attr again.][73078]
3553 * [Don't hash executable filenames on apple platforms, fixing backtraces.][cargo/8329]
3554 * [Fix crashes when finding backtrace on macOS.][71397]
3555 * [Clippy applies lint levels into different files.][clippy/5356]
3556
3557 [71397]: https://github.com/rust-lang/rust/issues/71397
3558 [73078]: https://github.com/rust-lang/rust/issues/73078
3559 [cargo/8329]: https://github.com/rust-lang/cargo/pull/8329
3560 [clippy/5356]: https://github.com/rust-lang/rust-clippy/issues/5356
3561
3562
3563 Version 1.44.0 (2020-06-04)
3564 ==========================
3565
3566 Language
3567 --------
3568 - [You can now use `async/.await` with `#[no_std]` enabled.][69033]
3569 - [Added the `unused_braces` lint.][70081]
3570
3571 **Syntax-only changes**
3572
3573 - [Expansion-driven outline module parsing][69838]
3574 ```rust
3575 #[cfg(FALSE)]
3576 mod foo {
3577 mod bar {
3578 mod baz; // `foo/bar/baz.rs` doesn't exist, but no error!
3579 }
3580 }
3581 ```
3582
3583 These are still rejected semantically, so you will likely receive an error but
3584 these changes can be seen and parsed by macros and conditional compilation.
3585
3586 Compiler
3587 --------
3588 - [Rustc now respects the `-C codegen-units` flag in incremental mode.][70156]
3589 Additionally when in incremental mode rustc defaults to 256 codegen units.
3590 - [Refactored `catch_unwind` to have zero-cost, unless unwinding is enabled and
3591 a panic is thrown.][67502]
3592 - [Added tier 3\* support for the `aarch64-unknown-none` and
3593 `aarch64-unknown-none-softfloat` targets.][68334]
3594 - [Added tier 3 support for `arm64-apple-tvos` and
3595 `x86_64-apple-tvos` targets.][68191]
3596
3597
3598 Libraries
3599 ---------
3600 - [Special cased `vec![]` to map directly to `Vec::new()`.][70632] This allows
3601 `vec![]` to be able to be used in `const` contexts.
3602 - [`convert::Infallible` now implements `Hash`.][70281]
3603 - [`OsString` now implements `DerefMut` and `IndexMut` returning
3604 a `&mut OsStr`.][70048]
3605 - [Unicode 13 is now supported.][69929]
3606 - [`String` now implements `From<&mut str>`.][69661]
3607 - [`IoSlice` now implements `Copy`.][69403]
3608 - [`Vec<T>` now implements `From<[T; N]>`.][68692] Where `N` is at most 32.
3609 - [`proc_macro::LexError` now implements `fmt::Display` and `Error`.][68899]
3610 - [`from_le_bytes`, `to_le_bytes`, `from_be_bytes`, `to_be_bytes`,
3611 `from_ne_bytes`, and `to_ne_bytes` methods are now `const` for all
3612 integer types.][69373]
3613
3614 Stabilized APIs
3615 ---------------
3616 - [`PathBuf::with_capacity`]
3617 - [`PathBuf::capacity`]
3618 - [`PathBuf::clear`]
3619 - [`PathBuf::reserve`]
3620 - [`PathBuf::reserve_exact`]
3621 - [`PathBuf::shrink_to_fit`]
3622 - [`f32::to_int_unchecked`]
3623 - [`f64::to_int_unchecked`]
3624 - [`Layout::align_to`]
3625 - [`Layout::pad_to_align`]
3626 - [`Layout::array`]
3627 - [`Layout::extend`]
3628
3629 Cargo
3630 -----
3631 - [Added the `cargo tree` command which will print a tree graph of
3632 your dependencies.][cargo/8062] E.g.
3633 ```
3634 mdbook v0.3.2 (/Users/src/rust/mdbook)
3635 ├── ammonia v3.0.0
3636 │ ├── html5ever v0.24.0
3637 │ │ ├── log v0.4.8
3638 │ │ │ └── cfg-if v0.1.9
3639 │ │ ├── mac v0.1.1
3640 │ │ └── markup5ever v0.9.0
3641 │ │ ├── log v0.4.8 (*)
3642 │ │ ├── phf v0.7.24
3643 │ │ │ └── phf_shared v0.7.24
3644 │ │ │ ├── siphasher v0.2.3
3645 │ │ │ └── unicase v1.4.2
3646 │ │ │ [build-dependencies]
3647 │ │ │ └── version_check v0.1.5
3648 ...
3649 ```
3650 You can also display dependencies on multiple versions of the same crate with
3651 `cargo tree -d` (short for `cargo tree --duplicates`).
3652
3653 Misc
3654 ----
3655 - [Rustdoc now allows you to specify `--crate-version` to have rustdoc include
3656 the version in the sidebar.][69494]
3657
3658 Compatibility Notes
3659 -------------------
3660 - [Rustc now correctly generates static libraries on Windows GNU targets with
3661 the `.a` extension, rather than the previous `.lib`.][70937]
3662 - [Removed the `-C no_integrated_as` flag from rustc.][70345]
3663 - [The `file_name` property in JSON output of macro errors now points the actual
3664 source file rather than the previous format of `<NAME macros>`.][70969]
3665 **Note:** this may not point to a file that actually exists on the user's system.
3666 - [The minimum required external LLVM version has been bumped to LLVM 8.][71147]
3667 - [`mem::{zeroed, uninitialised}` will now panic when used with types that do
3668 not allow zero initialization such as `NonZeroU8`.][66059] This was
3669 previously a warning.
3670 - [In 1.45.0 (the next release) converting a `f64` to `u32` using the `as`
3671 operator has been defined as a saturating operation.][71269] This was previously
3672 undefined behaviour, but you can use the `{f64, f32}::to_int_unchecked` methods to
3673 continue using the current behaviour, which may be desirable in rare performance
3674 sensitive situations.
3675
3676 Internal Only
3677 -------------
3678 These changes provide no direct user facing benefits, but represent significant
3679 improvements to the internals and overall performance of rustc and
3680 related tools.
3681
3682 - [dep_graph Avoid allocating a set on when the number reads are small.][69778]
3683 - [Replace big JS dict with JSON parsing.][71250]
3684
3685 [69373]: https://github.com/rust-lang/rust/pull/69373/
3686 [66059]: https://github.com/rust-lang/rust/pull/66059/
3687 [68191]: https://github.com/rust-lang/rust/pull/68191/
3688 [68899]: https://github.com/rust-lang/rust/pull/68899/
3689 [71147]: https://github.com/rust-lang/rust/pull/71147/
3690 [71250]: https://github.com/rust-lang/rust/pull/71250/
3691 [70937]: https://github.com/rust-lang/rust/pull/70937/
3692 [70969]: https://github.com/rust-lang/rust/pull/70969/
3693 [70632]: https://github.com/rust-lang/rust/pull/70632/
3694 [70281]: https://github.com/rust-lang/rust/pull/70281/
3695 [70345]: https://github.com/rust-lang/rust/pull/70345/
3696 [70048]: https://github.com/rust-lang/rust/pull/70048/
3697 [70081]: https://github.com/rust-lang/rust/pull/70081/
3698 [70156]: https://github.com/rust-lang/rust/pull/70156/
3699 [71269]: https://github.com/rust-lang/rust/pull/71269/
3700 [69838]: https://github.com/rust-lang/rust/pull/69838/
3701 [69929]: https://github.com/rust-lang/rust/pull/69929/
3702 [69661]: https://github.com/rust-lang/rust/pull/69661/
3703 [69778]: https://github.com/rust-lang/rust/pull/69778/
3704 [69494]: https://github.com/rust-lang/rust/pull/69494/
3705 [69403]: https://github.com/rust-lang/rust/pull/69403/
3706 [69033]: https://github.com/rust-lang/rust/pull/69033/
3707 [68692]: https://github.com/rust-lang/rust/pull/68692/
3708 [68334]: https://github.com/rust-lang/rust/pull/68334/
3709 [67502]: https://github.com/rust-lang/rust/pull/67502/
3710 [cargo/8062]: https://github.com/rust-lang/cargo/pull/8062/
3711 [`PathBuf::with_capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.with_capacity
3712 [`PathBuf::capacity`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.capacity
3713 [`PathBuf::clear`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.clear
3714 [`PathBuf::reserve`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve
3715 [`PathBuf::reserve_exact`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.reserve_exact
3716 [`PathBuf::shrink_to_fit`]: https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.shrink_to_fit
3717 [`f32::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_int_unchecked
3718 [`f64::to_int_unchecked`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_int_unchecked
3719 [`Layout::align_to`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.align_to
3720 [`Layout::pad_to_align`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.pad_to_align
3721 [`Layout::array`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.array
3722 [`Layout::extend`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html#method.extend
3723
3724
3725 Version 1.43.1 (2020-05-07)
3726 ===========================
3727
3728 * [Updated openssl-src to 1.1.1g for CVE-2020-1967.][71430]
3729 * [Fixed the stabilization of AVX-512 features.][71473]
3730 * [Fixed `cargo package --list` not working with unpublished dependencies.][cargo/8151]
3731
3732 [71430]: https://github.com/rust-lang/rust/pull/71430
3733 [71473]: https://github.com/rust-lang/rust/issues/71473
3734 [cargo/8151]: https://github.com/rust-lang/cargo/issues/8151
3735
3736
3737 Version 1.43.0 (2020-04-23)
3738 ==========================
3739
3740 Language
3741 --------
3742 - [Fixed using binary operations with `&{number}` (e.g. `&1.0`) not having
3743 the type inferred correctly.][68129]
3744 - [Attributes such as `#[cfg()]` can now be used on `if` expressions.][69201]
3745
3746 **Syntax only changes**
3747 - [Allow `type Foo: Ord` syntactically.][69361]
3748 - [Fuse associated and extern items up to defaultness.][69194]
3749 - [Syntactically allow `self` in all `fn` contexts.][68764]
3750 - [Merge `fn` syntax + cleanup item parsing.][68728]
3751 - [`item` macro fragments can be interpolated into `trait`s, `impl`s, and `extern` blocks.][69366]
3752 For example, you may now write:
3753 ```rust
3754 macro_rules! mac_trait {
3755 ($i:item) => {
3756 trait T { $i }
3757 }
3758 }
3759 mac_trait! {
3760 fn foo() {}
3761 }
3762 ```
3763
3764 These are still rejected *semantically*, so you will likely receive an error but
3765 these changes can be seen and parsed by macros and
3766 conditional compilation.
3767
3768
3769 Compiler
3770 --------
3771 - [You can now pass multiple lint flags to rustc to override the previous
3772 flags.][67885] For example; `rustc -D unused -A unused-variables` denies
3773 everything in the `unused` lint group except `unused-variables` which
3774 is explicitly allowed. However, passing `rustc -A unused-variables -D unused` denies
3775 everything in the `unused` lint group **including** `unused-variables` since
3776 the allow flag is specified before the deny flag (and therefore overridden).
3777 - [rustc will now prefer your system MinGW libraries over its bundled libraries
3778 if they are available on `windows-gnu`.][67429]
3779 - [rustc now buffers errors/warnings printed in JSON.][69227]
3780
3781 Libraries
3782 ---------
3783 - [`Arc<[T; N]>`, `Box<[T; N]>`, and `Rc<[T; N]>`, now implement
3784 `TryFrom<Arc<[T]>>`,`TryFrom<Box<[T]>>`, and `TryFrom<Rc<[T]>>`
3785 respectively.][69538] **Note** These conversions are only available when `N`
3786 is `0..=32`.
3787 - [You can now use associated constants on floats and integers directly, rather
3788 than having to import the module.][68952] e.g. You can now write `u32::MAX` or
3789 `f32::NAN` with no imports.
3790 - [`u8::is_ascii` is now `const`.][68984]
3791 - [`String` now implements `AsMut<str>`.][68742]
3792 - [Added the `primitive` module to `std` and `core`.][67637] This module
3793 reexports Rust's primitive types. This is mainly useful in macros
3794 where you want avoid these types being shadowed.
3795 - [Relaxed some of the trait bounds on `HashMap` and `HashSet`.][67642]
3796 - [`string::FromUtf8Error` now implements `Clone + Eq`.][68738]
3797
3798 Stabilized APIs
3799 ---------------
3800 - [`Once::is_completed`]
3801 - [`f32::LOG10_2`]
3802 - [`f32::LOG2_10`]
3803 - [`f64::LOG10_2`]
3804 - [`f64::LOG2_10`]
3805 - [`iter::once_with`]
3806
3807 Cargo
3808 -----
3809 - [You can now set config `[profile]`s in your `.cargo/config`, or through
3810 your environment.][cargo/7823]
3811 - [Cargo will now set `CARGO_BIN_EXE_<name>` pointing to a binary's
3812 executable path when running integration tests or benchmarks.][cargo/7697]
3813 `<name>` is the name of your binary as-is e.g. If you wanted the executable
3814 path for a binary named `my-program`you would use `env!("CARGO_BIN_EXE_my-program")`.
3815
3816 Misc
3817 ----
3818 - [Certain checks in the `const_err` lint were deemed unrelated to const
3819 evaluation][69185], and have been moved to the `unconditional_panic` and
3820 `arithmetic_overflow` lints.
3821
3822 Compatibility Notes
3823 -------------------
3824
3825 - [Having trailing syntax in the `assert!` macro is now a hard error.][69548] This
3826 has been a warning since 1.36.0.
3827 - [Fixed `Self` not having the correctly inferred type.][69340] This incorrectly
3828 led to some instances being accepted, and now correctly emits a hard error.
3829
3830 [69340]: https://github.com/rust-lang/rust/pull/69340
3831
3832 Internal Only
3833 -------------
3834 These changes provide no direct user facing benefits, but represent significant
3835 improvements to the internals and overall performance of `rustc` and
3836 related tools.
3837
3838 - [All components are now built with `opt-level=3` instead of `2`.][67878]
3839 - [Improved how rustc generates drop code.][67332]
3840 - [Improved performance from `#[inline]`-ing certain hot functions.][69256]
3841 - [traits: preallocate 2 Vecs of known initial size][69022]
3842 - [Avoid exponential behaviour when relating types][68772]
3843 - [Skip `Drop` terminators for enum variants without drop glue][68943]
3844 - [Improve performance of coherence checks][68966]
3845 - [Deduplicate types in the generator witness][68672]
3846 - [Invert control in struct_lint_level.][68725]
3847
3848 [67332]: https://github.com/rust-lang/rust/pull/67332/
3849 [67429]: https://github.com/rust-lang/rust/pull/67429/
3850 [67637]: https://github.com/rust-lang/rust/pull/67637/
3851 [67642]: https://github.com/rust-lang/rust/pull/67642/
3852 [67878]: https://github.com/rust-lang/rust/pull/67878/
3853 [67885]: https://github.com/rust-lang/rust/pull/67885/
3854 [68129]: https://github.com/rust-lang/rust/pull/68129/
3855 [68672]: https://github.com/rust-lang/rust/pull/68672/
3856 [68725]: https://github.com/rust-lang/rust/pull/68725/
3857 [68728]: https://github.com/rust-lang/rust/pull/68728/
3858 [68738]: https://github.com/rust-lang/rust/pull/68738/
3859 [68742]: https://github.com/rust-lang/rust/pull/68742/
3860 [68764]: https://github.com/rust-lang/rust/pull/68764/
3861 [68772]: https://github.com/rust-lang/rust/pull/68772/
3862 [68943]: https://github.com/rust-lang/rust/pull/68943/
3863 [68952]: https://github.com/rust-lang/rust/pull/68952/
3864 [68966]: https://github.com/rust-lang/rust/pull/68966/
3865 [68984]: https://github.com/rust-lang/rust/pull/68984/
3866 [69022]: https://github.com/rust-lang/rust/pull/69022/
3867 [69185]: https://github.com/rust-lang/rust/pull/69185/
3868 [69194]: https://github.com/rust-lang/rust/pull/69194/
3869 [69201]: https://github.com/rust-lang/rust/pull/69201/
3870 [69227]: https://github.com/rust-lang/rust/pull/69227/
3871 [69548]: https://github.com/rust-lang/rust/pull/69548/
3872 [69256]: https://github.com/rust-lang/rust/pull/69256/
3873 [69361]: https://github.com/rust-lang/rust/pull/69361/
3874 [69366]: https://github.com/rust-lang/rust/pull/69366/
3875 [69538]: https://github.com/rust-lang/rust/pull/69538/
3876 [cargo/7823]: https://github.com/rust-lang/cargo/pull/7823
3877 [cargo/7697]: https://github.com/rust-lang/cargo/pull/7697
3878 [`Once::is_completed`]: https://doc.rust-lang.org/std/sync/struct.Once.html#method.is_completed
3879 [`f32::LOG10_2`]: https://doc.rust-lang.org/std/f32/consts/constant.LOG10_2.html
3880 [`f32::LOG2_10`]: https://doc.rust-lang.org/std/f32/consts/constant.LOG2_10.html
3881 [`f64::LOG10_2`]: https://doc.rust-lang.org/std/f64/consts/constant.LOG10_2.html
3882 [`f64::LOG2_10`]: https://doc.rust-lang.org/std/f64/consts/constant.LOG2_10.html
3883 [`iter::once_with`]: https://doc.rust-lang.org/std/iter/fn.once_with.html
3884
3885
3886 Version 1.42.0 (2020-03-12)
3887 ==========================
3888
3889 Language
3890 --------
3891 - [You can now use the slice pattern syntax with subslices.][67712] e.g.
3892 ```rust
3893 fn foo(words: &[&str]) {
3894 match words {
3895 ["Hello", "World", "!", ..] => println!("Hello World!"),
3896 ["Foo", "Bar", ..] => println!("Baz"),
3897 rest => println!("{:?}", rest),
3898 }
3899 }
3900 ```
3901 - [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning
3902 that you can create an enum that has the exact layout and ABI of the type
3903 it contains.
3904 - [You can now use outer attribute procedural macros on inline modules.][64273]
3905 - [There are some *syntax-only* changes:][67131]
3906 - `default` is syntactically allowed before items in `trait` definitions.
3907 - Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically
3908 leave out their bodies in favor of `;`.
3909 - Bounds on associated types in `impl`s are now syntactically allowed
3910 (e.g. `type Foo: Ord;`).
3911 - `...` (the C-variadic type) may occur syntactically directly as the type of
3912 any function parameter.
3913
3914 These are still rejected *semantically*, so you will likely receive an error
3915 but these changes can be seen and parsed by procedural macros and
3916 conditional compilation.
3917
3918 Compiler
3919 --------
3920 - [Added tier 2\* support for `armv7a-none-eabi`.][68253]
3921 - [Added tier 2 support for `riscv64gc-unknown-linux-gnu`.][68339]
3922 - [`Option::{expect,unwrap}` and
3923 `Result::{expect, expect_err, unwrap, unwrap_err}` now produce panic messages
3924 pointing to the location where they were called, rather than
3925 `core`'s internals. ][67887]
3926
3927 \* Refer to Rust's [platform support page][platform-support-doc] for more
3928 information on Rust's tiered platform support.
3929
3930 Libraries
3931 ---------
3932 - [`iter::Empty<T>` now implements `Send` and `Sync` for any `T`.][68348]
3933 - [`Pin::{map_unchecked, map_unchecked_mut}` no longer require the return type
3934 to implement `Sized`.][67935]
3935 - [`io::Cursor` now derives `PartialEq` and `Eq`.][67233]
3936 - [`Layout::new` is now `const`.][66254]
3937 - [Added Standard Library support for `riscv64gc-unknown-linux-gnu`.][66899]
3938
3939
3940 Stabilized APIs
3941 ---------------
3942 - [`CondVar::wait_while`]
3943 - [`CondVar::wait_timeout_while`]
3944 - [`DebugMap::key`]
3945 - [`DebugMap::value`]
3946 - [`ManuallyDrop::take`]
3947 - [`matches!`]
3948 - [`ptr::slice_from_raw_parts_mut`]
3949 - [`ptr::slice_from_raw_parts`]
3950
3951 Cargo
3952 -----
3953 - [You no longer need to include `extern crate proc_macro;` to be able to
3954 `use proc_macro;` in the `2018` edition.][cargo/7700]
3955
3956 Compatibility Notes
3957 -------------------
3958 - [`Error::description` has been deprecated, and its use will now produce a
3959 warning.][66919] It's recommended to use `Display`/`to_string` instead.
3960
3961 [68253]: https://github.com/rust-lang/rust/pull/68253/
3962 [68348]: https://github.com/rust-lang/rust/pull/68348/
3963 [67935]: https://github.com/rust-lang/rust/pull/67935/
3964 [68339]: https://github.com/rust-lang/rust/pull/68339/
3965 [68122]: https://github.com/rust-lang/rust/pull/68122/
3966 [64273]: https://github.com/rust-lang/rust/pull/64273/
3967 [67712]: https://github.com/rust-lang/rust/pull/67712/
3968 [67887]: https://github.com/rust-lang/rust/pull/67887/
3969 [67131]: https://github.com/rust-lang/rust/pull/67131/
3970 [67233]: https://github.com/rust-lang/rust/pull/67233/
3971 [66899]: https://github.com/rust-lang/rust/pull/66899/
3972 [66919]: https://github.com/rust-lang/rust/pull/66919/
3973 [66254]: https://github.com/rust-lang/rust/pull/66254/
3974 [cargo/7700]: https://github.com/rust-lang/cargo/pull/7700
3975 [`DebugMap::key`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.key
3976 [`DebugMap::value`]: https://doc.rust-lang.org/stable/std/fmt/struct.DebugMap.html#method.value
3977 [`ManuallyDrop::take`]: https://doc.rust-lang.org/stable/std/mem/struct.ManuallyDrop.html#method.take
3978 [`matches!`]: https://doc.rust-lang.org/stable/std/macro.matches.html
3979 [`ptr::slice_from_raw_parts_mut`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts_mut.html
3980 [`ptr::slice_from_raw_parts`]: https://doc.rust-lang.org/stable/std/ptr/fn.slice_from_raw_parts.html
3981 [`CondVar::wait_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_while
3982 [`CondVar::wait_timeout_while`]: https://doc.rust-lang.org/stable/std/sync/struct.Condvar.html#method.wait_timeout_while
3983
3984
3985 Version 1.41.1 (2020-02-27)
3986 ===========================
3987
3988 * [Always check types of static items][69145]
3989 * [Always check lifetime bounds of `Copy` impls][69145]
3990 * [Fix miscompilation in callers of `Layout::repeat`][69225]
3991 * [Rust 1.41.0 was announced as the last Rust release with tier 1 or tier 2 support for 32-bit Apple targets][apple-32bit-drop].
3992 That announcement did not expect a patch release. 1.41.1 also includes release binaries for these targets.
3993
3994 [69225]: https://github.com/rust-lang/rust/issues/69225
3995 [69145]: https://github.com/rust-lang/rust/pull/69145
3996
3997
3998 Version 1.41.0 (2020-01-30)
3999 ===========================
4000
4001 Language
4002 --------
4003
4004 - [You can now pass type parameters to foreign items when implementing
4005 traits.][65879] E.g. You can now write `impl<T> From<Foo> for Vec<T> {}`.
4006 - [You can now arbitrarily nest receiver types in the `self` position.][64325] E.g. you can
4007 now write `fn foo(self: Box<Box<Self>>) {}`. Previously only `Self`, `&Self`,
4008 `&mut Self`, `Arc<Self>`, `Rc<Self>`, and `Box<Self>` were allowed.
4009 - [You can now use any valid identifier in a `format_args` macro.][66847]
4010 Previously identifiers starting with an underscore were not allowed.
4011 - [Visibility modifiers (e.g. `pub`) are now syntactically allowed on trait items and
4012 enum variants.][66183] These are still rejected semantically, but
4013 can be seen and parsed by procedural macros and conditional compilation.
4014 - [You can now define a Rust `extern "C"` function with `Box<T>` and use `T*` as the corresponding
4015 type on the C side.][62514] Please see [the documentation][box-memory-layout] for more information,
4016 including the important caveat about preferring to avoid `Box<T>` in Rust signatures for functions defined in C.
4017
4018 [box-memory-layout]: https://doc.rust-lang.org/std/boxed/index.html#memory-layout
4019
4020 Compiler
4021 --------
4022
4023 - [Rustc will now warn if you have unused loop `'label`s.][66325]
4024 - [Removed support for the `i686-unknown-dragonfly` target.][67255]
4025 - [Added tier 3 support\* for the `riscv64gc-unknown-linux-gnu` target.][66661]
4026 - [You can now pass an arguments file passing the `@path` syntax
4027 to rustc.][66172] Note that the format differs somewhat from what is
4028 found in other tooling; please see [the documentation][argfile-docs] for
4029 more information.
4030 - [You can now provide `--extern` flag without a path, indicating that it is
4031 available from the search path or specified with an `-L` flag.][64882]
4032
4033 \* Refer to Rust's [platform support page][platform-support-doc] for more
4034 information on Rust's tiered platform support.
4035
4036 [argfile-docs]: https://doc.rust-lang.org/nightly/rustc/command-line-arguments.html#path-load-command-line-flags-from-a-path
4037
4038 Libraries
4039 ---------
4040
4041 - [The `core::panic` module is now stable.][66771] It was already stable
4042 through `std`.
4043 - [`NonZero*` numerics now implement `From<NonZero*>` if it's a smaller integer
4044 width.][66277] E.g. `NonZeroU16` now implements `From<NonZeroU8>`.
4045 - [`MaybeUninit<T>` now implements `fmt::Debug`.][65013]
4046
4047 Stabilized APIs
4048 ---------------
4049
4050 - [`Result::map_or`]
4051 - [`Result::map_or_else`]
4052 - [`std::rc::Weak::weak_count`]
4053 - [`std::rc::Weak::strong_count`]
4054 - [`std::sync::Weak::weak_count`]
4055 - [`std::sync::Weak::strong_count`]
4056
4057 Cargo
4058 -----
4059
4060 - [Cargo will now document all the private items for binary crates
4061 by default.][cargo/7593]
4062 - [`cargo-install` will now reinstall the package if it detects that it is out
4063 of date.][cargo/7560]
4064 - [Cargo.lock now uses a more git friendly format that should help to reduce
4065 merge conflicts.][cargo/7579]
4066 - [You can now override specific dependencies's build settings][cargo/7591] E.g.
4067 `[profile.dev.package.image] opt-level = 2` sets the `image` crate's
4068 optimisation level to `2` for debug builds. You can also use
4069 `[profile.<profile>.build-override]` to override build scripts and
4070 their dependencies.
4071
4072 Misc
4073 ----
4074
4075 - [You can now specify `edition` in documentation code blocks to compile the block
4076 for that edition.][66238] E.g. `edition2018` tells rustdoc that the code sample
4077 should be compiled the 2018 edition of Rust.
4078 - [You can now provide custom themes to rustdoc with `--theme`, and check the
4079 current theme with `--check-theme`.][54733]
4080 - [You can use `#[cfg(doc)]` to compile an item when building documentation.][61351]
4081
4082 Compatibility Notes
4083 -------------------
4084
4085 - [As previously announced 1.41 will be the last tier 1 release for 32-bit
4086 Apple targets.][apple-32bit-drop] This means that the source code is still
4087 available to build, but the targets are no longer being tested and release
4088 binaries for those platforms will no longer be distributed by the Rust project.
4089 Please refer to the linked blog post for more information.
4090
4091 [54733]: https://github.com/rust-lang/rust/pull/54733/
4092 [61351]: https://github.com/rust-lang/rust/pull/61351/
4093 [62514]: https://github.com/rust-lang/rust/pull/62514/
4094 [67255]: https://github.com/rust-lang/rust/pull/67255/
4095 [66661]: https://github.com/rust-lang/rust/pull/66661/
4096 [66771]: https://github.com/rust-lang/rust/pull/66771/
4097 [66847]: https://github.com/rust-lang/rust/pull/66847/
4098 [66238]: https://github.com/rust-lang/rust/pull/66238/
4099 [66277]: https://github.com/rust-lang/rust/pull/66277/
4100 [66325]: https://github.com/rust-lang/rust/pull/66325/
4101 [66172]: https://github.com/rust-lang/rust/pull/66172/
4102 [66183]: https://github.com/rust-lang/rust/pull/66183/
4103 [65879]: https://github.com/rust-lang/rust/pull/65879/
4104 [65013]: https://github.com/rust-lang/rust/pull/65013/
4105 [64882]: https://github.com/rust-lang/rust/pull/64882/
4106 [64325]: https://github.com/rust-lang/rust/pull/64325/
4107 [cargo/7560]: https://github.com/rust-lang/cargo/pull/7560/
4108 [cargo/7579]: https://github.com/rust-lang/cargo/pull/7579/
4109 [cargo/7591]: https://github.com/rust-lang/cargo/pull/7591/
4110 [cargo/7593]: https://github.com/rust-lang/cargo/pull/7593/
4111 [`Result::map_or_else`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.map_or_else
4112 [`Result::map_or`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.map_or
4113 [`std::rc::Weak::weak_count`]: https://doc.rust-lang.org/std/rc/struct.Weak.html#method.weak_count
4114 [`std::rc::Weak::strong_count`]: https://doc.rust-lang.org/std/rc/struct.Weak.html#method.strong_count
4115 [`std::sync::Weak::weak_count`]: https://doc.rust-lang.org/std/sync/struct.Weak.html#method.weak_count
4116 [`std::sync::Weak::strong_count`]: https://doc.rust-lang.org/std/sync/struct.Weak.html#method.strong_count
4117 [apple-32bit-drop]: https://blog.rust-lang.org/2020/01/03/reducing-support-for-32-bit-apple-targets.html
4118
4119 Version 1.40.0 (2019-12-19)
4120 ===========================
4121
4122 Language
4123 --------
4124 - [You can now use tuple `struct`s and tuple `enum` variant's constructors in
4125 `const` contexts.][65188] e.g.
4126
4127 ```rust
4128 pub struct Point(i32, i32);
4129
4130 const ORIGIN: Point = {
4131 let constructor = Point;
4132
4133 constructor(0, 0)
4134 };
4135 ```
4136
4137 - [You can now mark `struct`s, `enum`s, and `enum` variants with the `#[non_exhaustive]` attribute to
4138 indicate that there may be variants or fields added in the future.][64639]
4139 For example this requires adding a wild-card branch (`_ => {}`) to any match
4140 statements on a non-exhaustive `enum`. [(RFC 2008)]
4141 - [You can now use function-like procedural macros in `extern` blocks and in
4142 type positions.][63931] e.g. `type Generated = macro!();`
4143 - [Function-like and attribute procedural macros can now emit
4144 `macro_rules!` items, so you can now have your macros generate macros.][64035]
4145 - [The `meta` pattern matcher in `macro_rules!` now correctly matches the modern
4146 attribute syntax.][63674] For example `(#[$m:meta])` now matches `#[attr]`,
4147 `#[attr{tokens}]`, `#[attr[tokens]]`, and `#[attr(tokens)]`.
4148
4149 Compiler
4150 --------
4151 - [Added tier 3 support\* for the
4152 `thumbv7neon-unknown-linux-musleabihf` target.][66103]
4153 - [Added tier 3 support for the
4154 `aarch64-unknown-none-softfloat` target.][64589]
4155 - [Added tier 3 support for the `mips64-unknown-linux-muslabi64`, and
4156 `mips64el-unknown-linux-muslabi64` targets.][65843]
4157
4158 \* Refer to Rust's [platform support page][platform-support-doc] for more
4159 information on Rust's tiered platform support.
4160
4161 Libraries
4162 ---------
4163 - [The `is_power_of_two` method on unsigned numeric types is now a `const` function.][65092]
4164
4165 Stabilized APIs
4166 ---------------
4167 - [`BTreeMap::get_key_value`]
4168 - [`HashMap::get_key_value`]
4169 - [`Option::as_deref_mut`]
4170 - [`Option::as_deref`]
4171 - [`Option::flatten`]
4172 - [`UdpSocket::peer_addr`]
4173 - [`f32::to_be_bytes`]
4174 - [`f32::to_le_bytes`]
4175 - [`f32::to_ne_bytes`]
4176 - [`f64::to_be_bytes`]
4177 - [`f64::to_le_bytes`]
4178 - [`f64::to_ne_bytes`]
4179 - [`f32::from_be_bytes`]
4180 - [`f32::from_le_bytes`]
4181 - [`f32::from_ne_bytes`]
4182 - [`f64::from_be_bytes`]
4183 - [`f64::from_le_bytes`]
4184 - [`f64::from_ne_bytes`]
4185 - [`mem::take`]
4186 - [`slice::repeat`]
4187 - [`todo!`]
4188
4189 Cargo
4190 -----
4191 - [Cargo will now always display warnings, rather than only on
4192 fresh builds.][cargo/7450]
4193 - [Feature flags (except `--all-features`) passed to a virtual workspace will
4194 now produce an error.][cargo/7507] Previously these flags were ignored.
4195 - [You can now publish `dev-dependencies` without including
4196 a `version`.][cargo/7333]
4197
4198 Misc
4199 ----
4200 - [You can now specify the `#[cfg(doctest)]` attribute to include an item only
4201 when running documentation tests with `rustdoc`.][63803]
4202
4203 Compatibility Notes
4204 -------------------
4205 - [As previously announced, any previous NLL warnings in the 2015 edition are
4206 now hard errors.][64221]
4207 - [The `include!` macro will now warn if it failed to include the
4208 entire file.][64284] The `include!` macro unintentionally only includes the
4209 first _expression_ in a file, and this can be unintuitive. This will become
4210 either a hard error in a future release, or the behavior may be fixed to include all expressions as expected.
4211 - [Using `#[inline]` on function prototypes and consts now emits a warning under
4212 `unused_attribute` lint.][65294] Using `#[inline]` anywhere else inside traits
4213 or `extern` blocks now correctly emits a hard error.
4214
4215 [65294]: https://github.com/rust-lang/rust/pull/65294/
4216 [66103]: https://github.com/rust-lang/rust/pull/66103/
4217 [65843]: https://github.com/rust-lang/rust/pull/65843/
4218 [65188]: https://github.com/rust-lang/rust/pull/65188/
4219 [65092]: https://github.com/rust-lang/rust/pull/65092/
4220 [64589]: https://github.com/rust-lang/rust/pull/64589/
4221 [64639]: https://github.com/rust-lang/rust/pull/64639/
4222 [64221]: https://github.com/rust-lang/rust/pull/64221/
4223 [64284]: https://github.com/rust-lang/rust/pull/64284/
4224 [63931]: https://github.com/rust-lang/rust/pull/63931/
4225 [64035]: https://github.com/rust-lang/rust/pull/64035/
4226 [63674]: https://github.com/rust-lang/rust/pull/63674/
4227 [63803]: https://github.com/rust-lang/rust/pull/63803/
4228 [cargo/7450]: https://github.com/rust-lang/cargo/pull/7450/
4229 [cargo/7507]: https://github.com/rust-lang/cargo/pull/7507/
4230 [cargo/7333]: https://github.com/rust-lang/cargo/pull/7333/
4231 [(rfc 2008)]: https://rust-lang.github.io/rfcs/2008-non-exhaustive.html
4232 [`f32::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_be_bytes
4233 [`f32::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_le_bytes
4234 [`f32::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_ne_bytes
4235 [`f64::to_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_be_bytes
4236 [`f64::to_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_le_bytes
4237 [`f64::to_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_ne_bytes
4238 [`f32::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_be_bytes
4239 [`f32::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_le_bytes
4240 [`f32::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_ne_bytes
4241 [`f64::from_be_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_be_bytes
4242 [`f64::from_le_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_le_bytes
4243 [`f64::from_ne_bytes`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_ne_bytes
4244 [`option::flatten`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.flatten
4245 [`option::as_deref`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref
4246 [`option::as_deref_mut`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_deref_mut
4247 [`hashmap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.get_key_value
4248 [`btreemap::get_key_value`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.get_key_value
4249 [`slice::repeat`]: https://doc.rust-lang.org/std/primitive.slice.html#method.repeat
4250 [`mem::take`]: https://doc.rust-lang.org/std/mem/fn.take.html
4251 [`udpsocket::peer_addr`]: https://doc.rust-lang.org/std/net/struct.UdpSocket.html#method.peer_addr
4252 [`todo!`]: https://doc.rust-lang.org/std/macro.todo.html
4253
4254
4255 Version 1.39.0 (2019-11-07)
4256 ===========================
4257
4258 Language
4259 --------
4260 - [You can now create `async` functions and blocks with `async fn`, `async move {}`, and
4261 `async {}` respectively, and you can now call `.await` on async expressions.][63209]
4262 - [You can now use certain attributes on function, closure, and function pointer
4263 parameters.][64010] These attributes include `cfg`, `cfg_attr`, `allow`, `warn`,
4264 `deny`, `forbid` as well as inert helper attributes used by procedural macro
4265 attributes applied to items. e.g.
4266 ```rust
4267 fn len(
4268 #[cfg(windows)] slice: &[u16],
4269 #[cfg(not(windows))] slice: &[u8],
4270 ) -> usize {
4271 slice.len()
4272 }
4273 ```
4274 - [You can now take shared references to bind-by-move patterns in the `if` guards
4275 of `match` arms.][63118] e.g.
4276 ```rust
4277 fn main() {
4278 let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);
4279
4280 match array {
4281 nums
4282 // ---- `nums` is bound by move.
4283 if nums.iter().sum::<u8>() == 10
4284 // ^------ `.iter()` implicitly takes a reference to `nums`.
4285 => {
4286 drop(nums);
4287 // ----------- Legal as `nums` was bound by move and so we have ownership.
4288 }
4289 _ => unreachable!(),
4290 }
4291 }
4292 ```
4293
4294
4295
4296 Compiler
4297 --------
4298 - [Added tier 3\* support for the `i686-unknown-uefi` target.][64334]
4299 - [Added tier 3 support for the `sparc64-unknown-openbsd` target.][63595]
4300 - [rustc will now trim code snippets in diagnostics to fit in your terminal.][63402]
4301 **Note** Cargo currently doesn't use this feature. Refer to
4302 [cargo#7315][cargo/7315] to track this feature's progress.
4303 - [You can now pass `--show-output` argument to test binaries to print the
4304 output of successful tests.][62600]
4305
4306
4307 \* Refer to Rust's [platform support page][platform-support-doc] for more
4308 information on Rust's tiered platform support.
4309
4310 Libraries
4311 ---------
4312 - [`Vec::new` and `String::new` are now `const` functions.][64028]
4313 - [`LinkedList::new` is now a `const` function.][63684]
4314 - [`str::len`, `[T]::len` and `str::as_bytes` are now `const` functions.][63770]
4315 - [The `abs`, `wrapping_abs`, and `overflowing_abs` numeric functions are
4316 now `const`.][63786]
4317
4318 Stabilized APIs
4319 ---------------
4320 - [`Pin::into_inner`]
4321 - [`Instant::checked_duration_since`]
4322 - [`Instant::saturating_duration_since`]
4323
4324 Cargo
4325 -----
4326 - [You can now publish git dependencies if supplied with a `version`.][cargo/7237]
4327 - [The `--all` flag has been renamed to `--workspace`.][cargo/7241] Using
4328 `--all` is now deprecated.
4329
4330 Misc
4331 ----
4332 - [You can now pass `-Clinker` to rustdoc to control the linker used
4333 for compiling doctests.][63834]
4334
4335 Compatibility Notes
4336 -------------------
4337 - [Code that was previously accepted by the old borrow checker, but rejected by
4338 the NLL borrow checker is now a hard error in Rust 2018.][63565] This was
4339 previously a warning, and will also become a hard error in the Rust 2015
4340 edition in the 1.40.0 release.
4341 - [`rustdoc` now requires `rustc` to be installed and in the same directory to
4342 run tests.][63827] This should improve performance when running a large
4343 amount of doctests.
4344 - [The `try!` macro will now issue a deprecation warning.][62672] It is
4345 recommended to use the `?` operator instead.
4346 - [`asinh(-0.0)` now correctly returns `-0.0`.][63698] Previously this
4347 returned `0.0`.
4348
4349 [62600]: https://github.com/rust-lang/rust/pull/62600/
4350 [62672]: https://github.com/rust-lang/rust/pull/62672/
4351 [63118]: https://github.com/rust-lang/rust/pull/63118/
4352 [63209]: https://github.com/rust-lang/rust/pull/63209/
4353 [63402]: https://github.com/rust-lang/rust/pull/63402/
4354 [63565]: https://github.com/rust-lang/rust/pull/63565/
4355 [63595]: https://github.com/rust-lang/rust/pull/63595/
4356 [63684]: https://github.com/rust-lang/rust/pull/63684/
4357 [63698]: https://github.com/rust-lang/rust/pull/63698/
4358 [63770]: https://github.com/rust-lang/rust/pull/63770/
4359 [63786]: https://github.com/rust-lang/rust/pull/63786/
4360 [63827]: https://github.com/rust-lang/rust/pull/63827/
4361 [63834]: https://github.com/rust-lang/rust/pull/63834/
4362 [64010]: https://github.com/rust-lang/rust/pull/64010/
4363 [64028]: https://github.com/rust-lang/rust/pull/64028/
4364 [64334]: https://github.com/rust-lang/rust/pull/64334/
4365 [cargo/7237]: https://github.com/rust-lang/cargo/pull/7237/
4366 [cargo/7241]: https://github.com/rust-lang/cargo/pull/7241/
4367 [cargo/7315]: https://github.com/rust-lang/cargo/pull/7315/
4368 [`Pin::into_inner`]: https://doc.rust-lang.org/std/pin/struct.Pin.html#method.into_inner
4369 [`Instant::checked_duration_since`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_duration_since
4370 [`Instant::saturating_duration_since`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.saturating_duration_since
4371
4372 Version 1.38.0 (2019-09-26)
4373 ==========================
4374
4375 Language
4376 --------
4377 - [The `#[global_allocator]` attribute can now be used in submodules.][62735]
4378 - [The `#[deprecated]` attribute can now be used on macros.][62042]
4379
4380 Compiler
4381 --------
4382 - [Added pipelined compilation support to `rustc`.][62766] This will
4383 improve compilation times in some cases. For further information please refer
4384 to the [_"Evaluating pipelined rustc compilation"_][pipeline-internals] thread.
4385 - [Added tier 3\* support for the `aarch64-uwp-windows-msvc`, `i686-uwp-windows-gnu`,
4386 `i686-uwp-windows-msvc`, `x86_64-uwp-windows-gnu`, and
4387 `x86_64-uwp-windows-msvc` targets.][60260]
4388 - [Added tier 3 support for the `armv7-unknown-linux-gnueabi` and
4389 `armv7-unknown-linux-musleabi` targets.][63107]
4390 - [Added tier 3 support for the `hexagon-unknown-linux-musl` target.][62814]
4391 - [Added tier 3 support for the `riscv32i-unknown-none-elf` target.][62784]
4392 - [Upgraded to LLVM 9.][62592]
4393
4394 \* Refer to Rust's [platform support page][platform-support-doc] for more
4395 information on Rust's tiered platform support.
4396
4397 Libraries
4398 ---------
4399 - [`ascii::EscapeDefault` now implements `Clone` and `Display`.][63421]
4400 - [Derive macros for prelude traits (e.g. `Clone`, `Debug`, `Hash`) are now
4401 available at the same path as the trait.][63056] (e.g. The `Clone` derive macro
4402 is available at `std::clone::Clone`). This also makes all built-in macros
4403 available in `std`/`core` root. e.g. `std::include_bytes!`.
4404 - [`str::Chars` now implements `Debug`.][63000]
4405 - [`slice::{concat, connect, join}` now accepts `&[T]` in addition to `&T`.][62528]
4406 - [`*const T` and `*mut T` now implement `marker::Unpin`.][62583]
4407 - [`Arc<[T]>` and `Rc<[T]>` now implement `FromIterator<T>`.][61953]
4408 - [Added euclidean remainder and division operations (`div_euclid`,
4409 `rem_euclid`) to all numeric primitives.][61884] Additionally `checked`,
4410 `overflowing`, and `wrapping` versions are available for all
4411 integer primitives.
4412 - [`thread::AccessError` now implements `Clone`, `Copy`, `Eq`, `Error`, and
4413 `PartialEq`.][61491]
4414 - [`iter::{StepBy, Peekable, Take}` now implement `DoubleEndedIterator`.][61457]
4415
4416 Stabilized APIs
4417 ---------------
4418 - [`<*const T>::cast`]
4419 - [`<*mut T>::cast`]
4420 - [`Duration::as_secs_f32`]
4421 - [`Duration::as_secs_f64`]
4422 - [`Duration::div_f32`]
4423 - [`Duration::div_f64`]
4424 - [`Duration::from_secs_f32`]
4425 - [`Duration::from_secs_f64`]
4426 - [`Duration::mul_f32`]
4427 - [`Duration::mul_f64`]
4428 - [`any::type_name`]
4429
4430 Cargo
4431 -----
4432 - [Added pipelined compilation support to `cargo`.][cargo/7143]
4433 - [You can now pass the `--features` option multiple times to enable
4434 multiple features.][cargo/7084]
4435
4436 Rustdoc
4437 -------
4438
4439 - [Documentation on `pub use` statements is prepended to the documentation of the re-exported item][63048]
4440
4441 Misc
4442 ----
4443 - [`rustc` will now warn about some incorrect uses of
4444 `mem::{uninitialized, zeroed}` that are known to cause undefined behaviour.][63346]
4445
4446 Compatibility Notes
4447 -------------------
4448 - The [`x86_64-unknown-uefi` platform can not be built][62785] with rustc
4449 1.38.0.
4450 - The [`armv7-unknown-linux-gnueabihf` platform is known to have
4451 issues][62896] with certain crates such as libc.
4452
4453 [60260]: https://github.com/rust-lang/rust/pull/60260/
4454 [61457]: https://github.com/rust-lang/rust/pull/61457/
4455 [61491]: https://github.com/rust-lang/rust/pull/61491/
4456 [61884]: https://github.com/rust-lang/rust/pull/61884/
4457 [61953]: https://github.com/rust-lang/rust/pull/61953/
4458 [62042]: https://github.com/rust-lang/rust/pull/62042/
4459 [62528]: https://github.com/rust-lang/rust/pull/62528/
4460 [62583]: https://github.com/rust-lang/rust/pull/62583/
4461 [62735]: https://github.com/rust-lang/rust/pull/62735/
4462 [62766]: https://github.com/rust-lang/rust/pull/62766/
4463 [62784]: https://github.com/rust-lang/rust/pull/62784/
4464 [62592]: https://github.com/rust-lang/rust/pull/62592/
4465 [62785]: https://github.com/rust-lang/rust/issues/62785/
4466 [62814]: https://github.com/rust-lang/rust/pull/62814/
4467 [62896]: https://github.com/rust-lang/rust/issues/62896/
4468 [63000]: https://github.com/rust-lang/rust/pull/63000/
4469 [63056]: https://github.com/rust-lang/rust/pull/63056/
4470 [63107]: https://github.com/rust-lang/rust/pull/63107/
4471 [63346]: https://github.com/rust-lang/rust/pull/63346/
4472 [63421]: https://github.com/rust-lang/rust/pull/63421/
4473 [cargo/7084]: https://github.com/rust-lang/cargo/pull/7084/
4474 [cargo/7143]: https://github.com/rust-lang/cargo/pull/7143/
4475 [63048]: https://github.com/rust-lang/rust/pull/63048
4476 [`<*const T>::cast`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.cast
4477 [`<*mut T>::cast`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.cast
4478 [`Duration::as_secs_f32`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_secs_f32
4479 [`Duration::as_secs_f64`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_secs_f64
4480 [`Duration::div_f32`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.div_f32
4481 [`Duration::div_f64`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.div_f64
4482 [`Duration::from_secs_f32`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.from_secs_f32
4483 [`Duration::from_secs_f64`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.from_secs_f64
4484 [`Duration::mul_f32`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.mul_f32
4485 [`Duration::mul_f64`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.mul_f64
4486 [`any::type_name`]: https://doc.rust-lang.org/std/any/fn.type_name.html
4487 [platform-support-doc]: https://doc.rust-lang.org/nightly/rustc/platform-support.html
4488 [pipeline-internals]: https://internals.rust-lang.org/t/evaluating-pipelined-rustc-compilation/10199
4489
4490 Version 1.37.0 (2019-08-15)
4491 ==========================
4492
4493 Language
4494 --------
4495 - `#[must_use]` will now warn if the type is contained in a [tuple][61100],
4496 [`Box`][62228], or an [array][62235] and unused.
4497 - [You can now use the `cfg` and `cfg_attr` attributes on
4498 generic parameters.][61547]
4499 - [You can now use enum variants through type alias.][61682] e.g. You can
4500 write the following:
4501 ```rust
4502 type MyOption = Option<u8>;
4503
4504 fn increment_or_zero(x: MyOption) -> u8 {
4505 match x {
4506 MyOption::Some(y) => y + 1,
4507 MyOption::None => 0,
4508 }
4509 }
4510 ```
4511 - [You can now use `_` as an identifier for consts.][61347] e.g. You can write
4512 `const _: u32 = 5;`.
4513 - [You can now use `#[repr(align(X)]` on enums.][61229]
4514 - [The `?` Kleene macro operator is now available in the
4515 2015 edition.][60932]
4516
4517 Compiler
4518 --------
4519 - [You can now enable Profile-Guided Optimization with the `-C profile-generate`
4520 and `-C profile-use` flags.][61268] For more information on how to use profile
4521 guided optimization, please refer to the [rustc book][rustc-book-pgo].
4522 - [The `rust-lldb` wrapper script should now work again.][61827]
4523
4524 Libraries
4525 ---------
4526 - [`mem::MaybeUninit<T>` is now ABI-compatible with `T`.][61802]
4527
4528 Stabilized APIs
4529 ---------------
4530 - [`BufReader::buffer`]
4531 - [`BufWriter::buffer`]
4532 - [`Cell::from_mut`]
4533 - [`Cell<[T]>::as_slice_of_cells`][`Cell<slice>::as_slice_of_cells`]
4534 - [`DoubleEndedIterator::nth_back`]
4535 - [`Option::xor`]
4536 - [`Wrapping::reverse_bits`]
4537 - [`i128::reverse_bits`]
4538 - [`i16::reverse_bits`]
4539 - [`i32::reverse_bits`]
4540 - [`i64::reverse_bits`]
4541 - [`i8::reverse_bits`]
4542 - [`isize::reverse_bits`]
4543 - [`slice::copy_within`]
4544 - [`u128::reverse_bits`]
4545 - [`u16::reverse_bits`]
4546 - [`u32::reverse_bits`]
4547 - [`u64::reverse_bits`]
4548 - [`u8::reverse_bits`]
4549 - [`usize::reverse_bits`]
4550
4551 Cargo
4552 -----
4553 - [`Cargo.lock` files are now included by default when publishing executable crates
4554 with executables.][cargo/7026]
4555 - [You can now specify `default-run="foo"` in `[package]` to specify the
4556 default executable to use for `cargo run`.][cargo/7056]
4557
4558 Misc
4559 ----
4560
4561 Compatibility Notes
4562 -------------------
4563 - [Using `...` for inclusive range patterns will now warn by default.][61342]
4564 Please transition your code to using the `..=` syntax for inclusive
4565 ranges instead.
4566 - [Using a trait object without the `dyn` will now warn by default.][61203]
4567 Please transition your code to use `dyn Trait` for trait objects instead.
4568
4569 [62228]: https://github.com/rust-lang/rust/pull/62228/
4570 [62235]: https://github.com/rust-lang/rust/pull/62235/
4571 [61802]: https://github.com/rust-lang/rust/pull/61802/
4572 [61827]: https://github.com/rust-lang/rust/pull/61827/
4573 [61547]: https://github.com/rust-lang/rust/pull/61547/
4574 [61682]: https://github.com/rust-lang/rust/pull/61682/
4575 [61268]: https://github.com/rust-lang/rust/pull/61268/
4576 [61342]: https://github.com/rust-lang/rust/pull/61342/
4577 [61347]: https://github.com/rust-lang/rust/pull/61347/
4578 [61100]: https://github.com/rust-lang/rust/pull/61100/
4579 [61203]: https://github.com/rust-lang/rust/pull/61203/
4580 [61229]: https://github.com/rust-lang/rust/pull/61229/
4581 [60932]: https://github.com/rust-lang/rust/pull/60932/
4582 [cargo/7026]: https://github.com/rust-lang/cargo/pull/7026/
4583 [cargo/7056]: https://github.com/rust-lang/cargo/pull/7056/
4584 [`BufReader::buffer`]: https://doc.rust-lang.org/std/io/struct.BufReader.html#method.buffer
4585 [`BufWriter::buffer`]: https://doc.rust-lang.org/std/io/struct.BufWriter.html#method.buffer
4586 [`Cell::from_mut`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.from_mut
4587 [`Cell<slice>::as_slice_of_cells`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.as_slice_of_cells
4588 [`DoubleEndedIterator::nth_back`]: https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html#method.nth_back
4589 [`Option::xor`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.xor
4590 [`Wrapping::reverse_bits`]: https://doc.rust-lang.org/std/num/struct.Wrapping.html#method.reverse_bits
4591 [`i128::reverse_bits`]: https://doc.rust-lang.org/std/primitive.i128.html#method.reverse_bits
4592 [`i16::reverse_bits`]: https://doc.rust-lang.org/std/primitive.i16.html#method.reverse_bits
4593 [`i32::reverse_bits`]: https://doc.rust-lang.org/std/primitive.i32.html#method.reverse_bits
4594 [`i64::reverse_bits`]: https://doc.rust-lang.org/std/primitive.i64.html#method.reverse_bits
4595 [`i8::reverse_bits`]: https://doc.rust-lang.org/std/primitive.i8.html#method.reverse_bits
4596 [`isize::reverse_bits`]: https://doc.rust-lang.org/std/primitive.isize.html#method.reverse_bits
4597 [`slice::copy_within`]: https://doc.rust-lang.org/std/primitive.slice.html#method.copy_within
4598 [`u128::reverse_bits`]: https://doc.rust-lang.org/std/primitive.u128.html#method.reverse_bits
4599 [`u16::reverse_bits`]: https://doc.rust-lang.org/std/primitive.u16.html#method.reverse_bits
4600 [`u32::reverse_bits`]: https://doc.rust-lang.org/std/primitive.u32.html#method.reverse_bits
4601 [`u64::reverse_bits`]: https://doc.rust-lang.org/std/primitive.u64.html#method.reverse_bits
4602 [`u8::reverse_bits`]: https://doc.rust-lang.org/std/primitive.u8.html#method.reverse_bits
4603 [`usize::reverse_bits`]: https://doc.rust-lang.org/std/primitive.usize.html#method.reverse_bits
4604 [rustc-book-pgo]: https://doc.rust-lang.org/rustc/profile-guided-optimization.html
4605
4606
4607 Version 1.36.0 (2019-07-04)
4608 ==========================
4609
4610 Language
4611 --------
4612 - [Non-Lexical Lifetimes are now enabled on the 2015 edition.][59114]
4613 - [The order of traits in trait objects no longer affects the semantics of that
4614 object.][59445] e.g. `dyn Send + fmt::Debug` is now equivalent to
4615 `dyn fmt::Debug + Send`, where this was previously not the case.
4616
4617 Libraries
4618 ---------
4619 - [`HashMap`'s implementation has been replaced with `hashbrown::HashMap` implementation.][58623]
4620 - [`TryFromSliceError` now implements `From<Infallible>`.][60318]
4621 - [`mem::needs_drop` is now available as a const fn.][60364]
4622 - [`alloc::Layout::from_size_align_unchecked` is now available as a const fn.][60370]
4623 - [`String` now implements `BorrowMut<str>`.][60404]
4624 - [`io::Cursor` now implements `Default`.][60234]
4625 - [Both `NonNull::{dangling, cast}` are now const fns.][60244]
4626 - [The `alloc` crate is now stable.][59675] `alloc` allows you to use a subset
4627 of `std` (e.g. `Vec`, `Box`, `Arc`) in `#![no_std]` environments if the
4628 environment has access to heap memory allocation.
4629 - [`String` now implements `From<&String>`.][59825]
4630 - [You can now pass multiple arguments to the `dbg!` macro.][59826] `dbg!` will
4631 return a tuple of each argument when there is multiple arguments.
4632 - [`Result::{is_err, is_ok}` are now `#[must_use]` and will produce a warning if
4633 not used.][59648]
4634
4635 Stabilized APIs
4636 ---------------
4637 - [`VecDeque::rotate_left`]
4638 - [`VecDeque::rotate_right`]
4639 - [`Iterator::copied`]
4640 - [`io::IoSlice`]
4641 - [`io::IoSliceMut`]
4642 - [`Read::read_vectored`]
4643 - [`Write::write_vectored`]
4644 - [`str::as_mut_ptr`]
4645 - [`mem::MaybeUninit`]
4646 - [`pointer::align_offset`]
4647 - [`future::Future`]
4648 - [`task::Context`]
4649 - [`task::RawWaker`]
4650 - [`task::RawWakerVTable`]
4651 - [`task::Waker`]
4652 - [`task::Poll`]
4653
4654 Cargo
4655 -----
4656 - [Cargo will now produce an error if you attempt to use the name of a required dependency as a feature.][cargo/6860]
4657 - [You can now pass the `--offline` flag to run cargo without accessing the network.][cargo/6934]
4658
4659 You can find further change's in [Cargo's 1.36.0 release notes][cargo-1-36-0].
4660
4661 Clippy
4662 ------
4663 There have been numerous additions and fixes to clippy, see [Clippy's 1.36.0 release notes][clippy-1-36-0] for more details.
4664
4665 Misc
4666 ----
4667
4668 Compatibility Notes
4669 -------------------
4670 - With the stabilisation of `mem::MaybeUninit`, `mem::uninitialized` use is no
4671 longer recommended, and will be deprecated in 1.39.0.
4672
4673 [60318]: https://github.com/rust-lang/rust/pull/60318/
4674 [60364]: https://github.com/rust-lang/rust/pull/60364/
4675 [60370]: https://github.com/rust-lang/rust/pull/60370/
4676 [60404]: https://github.com/rust-lang/rust/pull/60404/
4677 [60234]: https://github.com/rust-lang/rust/pull/60234/
4678 [60244]: https://github.com/rust-lang/rust/pull/60244/
4679 [58623]: https://github.com/rust-lang/rust/pull/58623/
4680 [59648]: https://github.com/rust-lang/rust/pull/59648/
4681 [59675]: https://github.com/rust-lang/rust/pull/59675/
4682 [59825]: https://github.com/rust-lang/rust/pull/59825/
4683 [59826]: https://github.com/rust-lang/rust/pull/59826/
4684 [59445]: https://github.com/rust-lang/rust/pull/59445/
4685 [59114]: https://github.com/rust-lang/rust/pull/59114/
4686 [cargo/6860]: https://github.com/rust-lang/cargo/pull/6860/
4687 [cargo/6934]: https://github.com/rust-lang/cargo/pull/6934/
4688 [`VecDeque::rotate_left`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.rotate_left
4689 [`VecDeque::rotate_right`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.rotate_right
4690 [`Iterator::copied`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#tymethod.copied
4691 [`io::IoSlice`]: https://doc.rust-lang.org/std/io/struct.IoSlice.html
4692 [`io::IoSliceMut`]: https://doc.rust-lang.org/std/io/struct.IoSliceMut.html
4693 [`Read::read_vectored`]: https://doc.rust-lang.org/std/io/trait.Read.html#method.read_vectored
4694 [`Write::write_vectored`]: https://doc.rust-lang.org/std/io/trait.Write.html#method.write_vectored
4695 [`str::as_mut_ptr`]: https://doc.rust-lang.org/std/primitive.str.html#method.as_mut_ptr
4696 [`mem::MaybeUninit`]: https://doc.rust-lang.org/std/mem/union.MaybeUninit.html
4697 [`pointer::align_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.align_offset
4698 [`future::Future`]: https://doc.rust-lang.org/std/future/trait.Future.html
4699 [`task::Context`]: https://doc.rust-lang.org/beta/std/task/struct.Context.html
4700 [`task::RawWaker`]: https://doc.rust-lang.org/beta/std/task/struct.RawWaker.html
4701 [`task::RawWakerVTable`]: https://doc.rust-lang.org/beta/std/task/struct.RawWakerVTable.html
4702 [`task::Waker`]: https://doc.rust-lang.org/beta/std/task/struct.Waker.html
4703 [`task::Poll`]: https://doc.rust-lang.org/beta/std/task/enum.Poll.html
4704 [clippy-1-36-0]: https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-136
4705 [cargo-1-36-0]: https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-136-2019-07-04
4706
4707
4708 Version 1.35.0 (2019-05-23)
4709 ==========================
4710
4711 Language
4712 --------
4713 - [`FnOnce`, `FnMut`, and the `Fn` traits are now implemented for `Box<FnOnce>`,
4714 `Box<FnMut>`, and `Box<Fn>` respectively.][59500]
4715 - [You can now coerce closures into unsafe function pointers.][59580] e.g.
4716 ```rust
4717 unsafe fn call_unsafe(func: unsafe fn()) {
4718 func()
4719 }
4720
4721 pub fn main() {
4722 unsafe { call_unsafe(|| {}); }
4723 }
4724 ```
4725
4726
4727 Compiler
4728 --------
4729 - [Added the `armv6-unknown-freebsd-gnueabihf` and
4730 `armv7-unknown-freebsd-gnueabihf` targets.][58080]
4731 - [Added the `wasm32-unknown-wasi` target.][59464]
4732
4733
4734 Libraries
4735 ---------
4736 - [`Thread` will now show its ID in `Debug` output.][59460]
4737 - [`StdinLock`, `StdoutLock`, and `StderrLock` now implement `AsRawFd`.][59512]
4738 - [`alloc::System` now implements `Default`.][59451]
4739 - [Expanded `Debug` output (`{:#?}`) for structs now has a trailing comma on the
4740 last field.][59076]
4741 - [`char::{ToLowercase, ToUppercase}` now
4742 implement `ExactSizeIterator`.][58778]
4743 - [All `NonZero` numeric types now implement `FromStr`.][58717]
4744 - [Removed the `Read` trait bounds
4745 on the `BufReader::{get_ref, get_mut, into_inner}` methods.][58423]
4746 - [You can now call the `dbg!` macro without any parameters to print the file
4747 and line where it is called.][57847]
4748 - [In place ASCII case conversions are now up to 4× faster.][59283]
4749 e.g. `str::make_ascii_lowercase`
4750 - [`hash_map::{OccupiedEntry, VacantEntry}` now implement `Sync`
4751 and `Send`.][58369]
4752
4753 Stabilized APIs
4754 ---------------
4755 - [`f32::copysign`]
4756 - [`f64::copysign`]
4757 - [`RefCell::replace_with`]
4758 - [`RefCell::map_split`]
4759 - [`ptr::hash`]
4760 - [`Range::contains`]
4761 - [`RangeFrom::contains`]
4762 - [`RangeTo::contains`]
4763 - [`RangeInclusive::contains`]
4764 - [`RangeToInclusive::contains`]
4765 - [`Option::copied`]
4766
4767 Cargo
4768 -----
4769 - [You can now set `cargo:rustc-cdylib-link-arg` at build time to pass custom
4770 linker arguments when building a `cdylib`.][cargo/6298] Its usage is highly
4771 platform specific.
4772
4773 Misc
4774 ----
4775 - [The Rust toolchain is now available natively for musl based distros.][58575]
4776
4777 [59460]: https://github.com/rust-lang/rust/pull/59460/
4778 [59464]: https://github.com/rust-lang/rust/pull/59464/
4779 [59500]: https://github.com/rust-lang/rust/pull/59500/
4780 [59512]: https://github.com/rust-lang/rust/pull/59512/
4781 [59580]: https://github.com/rust-lang/rust/pull/59580/
4782 [59283]: https://github.com/rust-lang/rust/pull/59283/
4783 [59451]: https://github.com/rust-lang/rust/pull/59451/
4784 [59076]: https://github.com/rust-lang/rust/pull/59076/
4785 [58778]: https://github.com/rust-lang/rust/pull/58778/
4786 [58717]: https://github.com/rust-lang/rust/pull/58717/
4787 [58369]: https://github.com/rust-lang/rust/pull/58369/
4788 [58423]: https://github.com/rust-lang/rust/pull/58423/
4789 [58080]: https://github.com/rust-lang/rust/pull/58080/
4790 [57847]: https://github.com/rust-lang/rust/pull/57847/
4791 [58575]: https://github.com/rust-lang/rust/pull/58575
4792 [cargo/6298]: https://github.com/rust-lang/cargo/pull/6298/
4793 [`f32::copysign`]: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign
4794 [`f64::copysign`]: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.copysign
4795 [`RefCell::replace_with`]: https://doc.rust-lang.org/stable/std/cell/struct.RefCell.html#method.replace_with
4796 [`RefCell::map_split`]: https://doc.rust-lang.org/stable/std/cell/struct.RefCell.html#method.map_split
4797 [`ptr::hash`]: https://doc.rust-lang.org/stable/std/ptr/fn.hash.html
4798 [`Range::contains`]: https://doc.rust-lang.org/std/ops/struct.Range.html#method.contains
4799 [`RangeFrom::contains`]: https://doc.rust-lang.org/std/ops/struct.RangeFrom.html#method.contains
4800 [`RangeTo::contains`]: https://doc.rust-lang.org/std/ops/struct.RangeTo.html#method.contains
4801 [`RangeInclusive::contains`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html#method.contains
4802 [`RangeToInclusive::contains`]: https://doc.rust-lang.org/std/ops/struct.RangeToInclusive.html#method.contains
4803 [`Option::copied`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.copied
4804
4805 Version 1.34.2 (2019-05-14)
4806 ===========================
4807
4808 * [Destabilize the `Error::type_id` function due to a security
4809 vulnerability][60785] ([CVE-2019-12083])
4810
4811 [60785]: https://github.com/rust-lang/rust/pull/60785
4812 [CVE-2019-12083]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12083
4813
4814 Version 1.34.1 (2019-04-25)
4815 ===========================
4816
4817 * [Fix false positives for the `redundant_closure` Clippy lint][clippy/3821]
4818 * [Fix false positives for the `missing_const_for_fn` Clippy lint][clippy/3844]
4819 * [Fix Clippy panic when checking some macros][clippy/3805]
4820
4821 [clippy/3821]: https://github.com/rust-lang/rust-clippy/pull/3821
4822 [clippy/3844]: https://github.com/rust-lang/rust-clippy/pull/3844
4823 [clippy/3805]: https://github.com/rust-lang/rust-clippy/pull/3805
4824
4825 Version 1.34.0 (2019-04-11)
4826 ==========================
4827
4828 Language
4829 --------
4830 - [You can now use `#[deprecated = "reason"]`][58166] as a shorthand for
4831 `#[deprecated(note = "reason")]`. This was previously allowed by mistake
4832 but had no effect.
4833 - [You can now accept token streams in `#[attr()]`,`#[attr[]]`, and
4834 `#[attr{}]` procedural macros.][57367]
4835 - [You can now write `extern crate self as foo;`][57407] to import your
4836 crate's root into the extern prelude.
4837
4838
4839 Compiler
4840 --------
4841 - [You can now target `riscv64imac-unknown-none-elf` and
4842 `riscv64gc-unknown-none-elf`.][58406]
4843 - [You can now enable linker plugin LTO optimisations with
4844 `-C linker-plugin-lto`.][58057] This allows rustc to compile your Rust code
4845 into LLVM bitcode allowing LLVM to perform LTO optimisations across C/C++ FFI
4846 boundaries.
4847 - [You can now target `powerpc64-unknown-freebsd`.][57809]
4848
4849
4850 Libraries
4851 ---------
4852 - [The trait bounds have been removed on some of `HashMap<K, V, S>`'s and
4853 `HashSet<T, S>`'s basic methods.][58370] Most notably you no longer require
4854 the `Hash` trait to create an iterator.
4855 - [The `Ord` trait bounds have been removed on some of `BinaryHeap<T>`'s basic
4856 methods.][58421] Most notably you no longer require the `Ord` trait to create
4857 an iterator.
4858 - [The methods `overflowing_neg` and `wrapping_neg` are now `const` functions
4859 for all numeric types.][58044]
4860 - [Indexing a `str` is now generic over all types that
4861 implement `SliceIndex<str>`.][57604]
4862 - [`str::trim`, `str::trim_matches`, `str::trim_{start, end}`, and
4863 `str::trim_{start, end}_matches` are now `#[must_use]`][57106] and will
4864 produce a warning if their returning type is unused.
4865 - [The methods `checked_pow`, `saturating_pow`, `wrapping_pow`, and
4866 `overflowing_pow` are now available for all numeric types.][57873] These are
4867 equivalent to methods such as `wrapping_add` for the `pow` operation.
4868
4869
4870 Stabilized APIs
4871 ---------------
4872
4873 #### std & core
4874 * [`Any::type_id`]
4875 * [`Error::type_id`]
4876 * [`atomic::AtomicI16`]
4877 * [`atomic::AtomicI32`]
4878 * [`atomic::AtomicI64`]
4879 * [`atomic::AtomicI8`]
4880 * [`atomic::AtomicU16`]
4881 * [`atomic::AtomicU32`]
4882 * [`atomic::AtomicU64`]
4883 * [`atomic::AtomicU8`]
4884 * [`convert::Infallible`]
4885 * [`convert::TryFrom`]
4886 * [`convert::TryInto`]
4887 * [`iter::from_fn`]
4888 * [`iter::successors`]
4889 * [`num::NonZeroI128`]
4890 * [`num::NonZeroI16`]
4891 * [`num::NonZeroI32`]
4892 * [`num::NonZeroI64`]
4893 * [`num::NonZeroI8`]
4894 * [`num::NonZeroIsize`]
4895 * [`slice::sort_by_cached_key`]
4896 * [`str::escape_debug`]
4897 * [`str::escape_default`]
4898 * [`str::escape_unicode`]
4899 * [`str::split_ascii_whitespace`]
4900
4901 #### std
4902 * [`Instant::checked_add`]
4903 * [`Instant::checked_sub`]
4904 * [`SystemTime::checked_add`]
4905 * [`SystemTime::checked_sub`]
4906
4907 Cargo
4908 -----
4909 - [You can now use alternative registries to crates.io.][cargo/6654]
4910
4911 Misc
4912 ----
4913 - [You can now use the `?` operator in your documentation tests without manually
4914 adding `fn main() -> Result<(), _> {}`.][56470]
4915
4916 Compatibility Notes
4917 -------------------
4918 - [`Command::before_exec` is being replaced by the unsafe method
4919 `Command::pre_exec`][58059] and will be deprecated with Rust 1.37.0.
4920 - [Use of `ATOMIC_{BOOL, ISIZE, USIZE}_INIT` is now deprecated][57425] as you
4921 can now use `const` functions in `static` variables.
4922
4923 [58370]: https://github.com/rust-lang/rust/pull/58370/
4924 [58406]: https://github.com/rust-lang/rust/pull/58406/
4925 [58421]: https://github.com/rust-lang/rust/pull/58421/
4926 [58166]: https://github.com/rust-lang/rust/pull/58166/
4927 [58044]: https://github.com/rust-lang/rust/pull/58044/
4928 [58057]: https://github.com/rust-lang/rust/pull/58057/
4929 [58059]: https://github.com/rust-lang/rust/pull/58059/
4930 [57809]: https://github.com/rust-lang/rust/pull/57809/
4931 [57873]: https://github.com/rust-lang/rust/pull/57873/
4932 [57604]: https://github.com/rust-lang/rust/pull/57604/
4933 [57367]: https://github.com/rust-lang/rust/pull/57367/
4934 [57407]: https://github.com/rust-lang/rust/pull/57407/
4935 [57425]: https://github.com/rust-lang/rust/pull/57425/
4936 [57106]: https://github.com/rust-lang/rust/pull/57106/
4937 [56470]: https://github.com/rust-lang/rust/pull/56470/
4938 [cargo/6654]: https://github.com/rust-lang/cargo/pull/6654/
4939 [`Any::type_id`]: https://doc.rust-lang.org/std/any/trait.Any.html#tymethod.type_id
4940 [`Error::type_id`]: https://doc.rust-lang.org/std/error/trait.Error.html#method.type_id
4941 [`atomic::AtomicI16`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI16.html
4942 [`atomic::AtomicI32`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI32.html
4943 [`atomic::AtomicI64`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI64.html
4944 [`atomic::AtomicI8`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicI8.html
4945 [`atomic::AtomicU16`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU16.html
4946 [`atomic::AtomicU32`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU32.html
4947 [`atomic::AtomicU64`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU64.html
4948 [`atomic::AtomicU8`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html
4949 [`convert::Infallible`]: https://doc.rust-lang.org/std/convert/enum.Infallible.html
4950 [`convert::TryFrom`]: https://doc.rust-lang.org/std/convert/trait.TryFrom.html
4951 [`convert::TryInto`]: https://doc.rust-lang.org/std/convert/trait.TryInto.html
4952 [`iter::from_fn`]: https://doc.rust-lang.org/std/iter/fn.from_fn.html
4953 [`iter::successors`]: https://doc.rust-lang.org/std/iter/fn.successors.html
4954 [`num::NonZeroI128`]: https://doc.rust-lang.org/std/num/struct.NonZeroI128.html
4955 [`num::NonZeroI16`]: https://doc.rust-lang.org/std/num/struct.NonZeroI16.html
4956 [`num::NonZeroI32`]: https://doc.rust-lang.org/std/num/struct.NonZeroI32.html
4957 [`num::NonZeroI64`]: https://doc.rust-lang.org/std/num/struct.NonZeroI64.html
4958 [`num::NonZeroI8`]: https://doc.rust-lang.org/std/num/struct.NonZeroI8.html
4959 [`num::NonZeroIsize`]: https://doc.rust-lang.org/std/num/struct.NonZeroIsize.html
4960 [`slice::sort_by_cached_key`]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_by_cached_key
4961 [`str::escape_debug`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_debug
4962 [`str::escape_default`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_default
4963 [`str::escape_unicode`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_unicode
4964 [`str::split_ascii_whitespace`]: https://doc.rust-lang.org/std/primitive.str.html#method.split_ascii_whitespace
4965 [`Instant::checked_add`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_add
4966 [`Instant::checked_sub`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_sub
4967 [`SystemTime::checked_add`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_add
4968 [`SystemTime::checked_sub`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_sub
4969
4970
4971 Version 1.33.0 (2019-02-28)
4972 ==========================
4973
4974 Language
4975 --------
4976 - [You can now use the `cfg(target_vendor)` attribute.][57465] E.g.
4977 `#[cfg(target_vendor="apple")] fn main() { println!("Hello Apple!"); }`
4978 - [Integer patterns such as in a match expression can now be exhaustive.][56362]
4979 E.g. You can have match statement on a `u8` that covers `0..=255` and
4980 you would no longer be required to have a `_ => unreachable!()` case.
4981 - [You can now have multiple patterns in `if let` and `while let`
4982 expressions.][57532] You can do this with the same syntax as a `match`
4983 expression. E.g.
4984 ```rust
4985 enum Creature {
4986 Crab(String),
4987 Lobster(String),
4988 Person(String),
4989 }
4990
4991 fn main() {
4992 let state = Creature::Crab("Ferris");
4993
4994 if let Creature::Crab(name) | Creature::Person(name) = state {
4995 println!("This creature's name is: {}", name);
4996 }
4997 }
4998 ```
4999 - [You can now have irrefutable `if let` and `while let` patterns.][57535] Using
5000 this feature will by default produce a warning as this behaviour can be
5001 unintuitive. E.g. `if let _ = 5 {}`
5002 - [You can now use `let` bindings, assignments, expression statements,
5003 and irrefutable pattern destructuring in const functions.][57175]
5004 - [You can now call unsafe const functions.][57067] E.g.
5005 ```rust
5006 const unsafe fn foo() -> i32 { 5 }
5007 const fn bar() -> i32 {
5008 unsafe { foo() }
5009 }
5010 ```
5011 - [You can now specify multiple attributes in a `cfg_attr` attribute.][57332]
5012 E.g. `#[cfg_attr(all(), must_use, optimize)]`
5013 - [You can now specify a specific alignment with the `#[repr(packed)]`
5014 attribute.][57049] E.g. `#[repr(packed(2))] struct Foo(i16, i32);` is a struct
5015 with an alignment of 2 bytes and a size of 6 bytes.
5016 - [You can now import an item from a module as an `_`.][56303] This allows you to
5017 import a trait's impls, and not have the name in the namespace. E.g.
5018 ```rust
5019 use std::io::Read as _;
5020
5021 // Allowed as there is only one `Read` in the module.
5022 pub trait Read {}
5023 ```
5024 - [You may now use `Rc`, `Arc`, and `Pin` as method receivers][56805].
5025
5026 Compiler
5027 --------
5028 - [You can now set a linker flavor for `rustc` with the `-Clinker-flavor`
5029 command line argument.][56351]
5030 - [The minimum required LLVM version has been bumped to 6.0.][56642]
5031 - [Added support for the PowerPC64 architecture on FreeBSD.][57615]
5032 - [The `x86_64-fortanix-unknown-sgx` target support has been upgraded to
5033 tier 2 support.][57130] Visit the [platform support][platform-support] page for
5034 information on Rust's platform support.
5035 - [Added support for the `thumbv7neon-linux-androideabi` and
5036 `thumbv7neon-unknown-linux-gnueabihf` targets.][56947]
5037 - [Added support for the `x86_64-unknown-uefi` target.][56769]
5038
5039 Libraries
5040 ---------
5041 - [The methods `overflowing_{add, sub, mul, shl, shr}` are now `const`
5042 functions for all numeric types.][57566]
5043 - [The methods `rotate_left`, `rotate_right`, and `wrapping_{add, sub, mul, shl, shr}`
5044 are now `const` functions for all numeric types.][57105]
5045 - [The methods `is_positive` and `is_negative` are now `const` functions for
5046 all signed numeric types.][57105]
5047 - [The `get` method for all `NonZero` types is now `const`.][57167]
5048 - [The methods `count_ones`, `count_zeros`, `leading_zeros`, `trailing_zeros`,
5049 `swap_bytes`, `from_be`, `from_le`, `to_be`, `to_le` are now `const` for all
5050 numeric types.][57234]
5051 - [`Ipv4Addr::new` is now a `const` function][57234]
5052
5053 Stabilized APIs
5054 ---------------
5055 - [`unix::FileExt::read_exact_at`]
5056 - [`unix::FileExt::write_all_at`]
5057 - [`Option::transpose`]
5058 - [`Result::transpose`]
5059 - [`convert::identity`]
5060 - [`pin::Pin`]
5061 - [`marker::Unpin`]
5062 - [`marker::PhantomPinned`]
5063 - [`Vec::resize_with`]
5064 - [`VecDeque::resize_with`]
5065 - [`Duration::as_millis`]
5066 - [`Duration::as_micros`]
5067 - [`Duration::as_nanos`]
5068
5069
5070 Cargo
5071 -----
5072 - [You can now publish crates that require a feature flag to compile with
5073 `cargo publish --features` or `cargo publish --all-features`.][cargo/6453]
5074 - [Cargo should now rebuild a crate if a file was modified during the initial
5075 build.][cargo/6484]
5076
5077 Compatibility Notes
5078 -------------------
5079 - The methods `str::{trim_left, trim_right, trim_left_matches, trim_right_matches}`
5080 are now deprecated in the standard library, and their usage will now produce a warning.
5081 Please use the `str::{trim_start, trim_end, trim_start_matches, trim_end_matches}`
5082 methods instead.
5083 - The `Error::cause` method has been deprecated in favor of `Error::source` which supports
5084 downcasting.
5085 - [Libtest no longer creates a new thread for each test when
5086 `--test-threads=1`. It also runs the tests in deterministic order][56243]
5087
5088 [56243]: https://github.com/rust-lang/rust/pull/56243
5089 [56303]: https://github.com/rust-lang/rust/pull/56303/
5090 [56351]: https://github.com/rust-lang/rust/pull/56351/
5091 [56362]: https://github.com/rust-lang/rust/pull/56362
5092 [56642]: https://github.com/rust-lang/rust/pull/56642/
5093 [56769]: https://github.com/rust-lang/rust/pull/56769/
5094 [56805]: https://github.com/rust-lang/rust/pull/56805
5095 [56947]: https://github.com/rust-lang/rust/pull/56947/
5096 [57049]: https://github.com/rust-lang/rust/pull/57049/
5097 [57067]: https://github.com/rust-lang/rust/pull/57067/
5098 [57105]: https://github.com/rust-lang/rust/pull/57105
5099 [57130]: https://github.com/rust-lang/rust/pull/57130/
5100 [57167]: https://github.com/rust-lang/rust/pull/57167/
5101 [57175]: https://github.com/rust-lang/rust/pull/57175/
5102 [57234]: https://github.com/rust-lang/rust/pull/57234/
5103 [57332]: https://github.com/rust-lang/rust/pull/57332/
5104 [57465]: https://github.com/rust-lang/rust/pull/57465/
5105 [57532]: https://github.com/rust-lang/rust/pull/57532/
5106 [57535]: https://github.com/rust-lang/rust/pull/57535/
5107 [57566]: https://github.com/rust-lang/rust/pull/57566/
5108 [57615]: https://github.com/rust-lang/rust/pull/57615/
5109 [cargo/6453]: https://github.com/rust-lang/cargo/pull/6453/
5110 [cargo/6484]: https://github.com/rust-lang/cargo/pull/6484/
5111 [`unix::FileExt::read_exact_at`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html#method.read_exact_at
5112 [`unix::FileExt::write_all_at`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html#method.write_all_at
5113 [`Option::transpose`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.transpose
5114 [`Result::transpose`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.transpose
5115 [`convert::identity`]: https://doc.rust-lang.org/std/convert/fn.identity.html
5116 [`pin::Pin`]: https://doc.rust-lang.org/std/pin/struct.Pin.html
5117 [`marker::Unpin`]: https://doc.rust-lang.org/stable/std/marker/trait.Unpin.html
5118 [`marker::PhantomPinned`]: https://doc.rust-lang.org/nightly/std/marker/struct.PhantomPinned.html
5119 [`Vec::resize_with`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.resize_with
5120 [`VecDeque::resize_with`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.resize_with
5121 [`Duration::as_millis`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_millis
5122 [`Duration::as_micros`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_micros
5123 [`Duration::as_nanos`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_nanos
5124 [platform-support]: https://forge.rust-lang.org/platform-support.html
5125
5126 Version 1.32.0 (2019-01-17)
5127 ==========================
5128
5129 Language
5130 --------
5131 #### 2018 edition
5132 - [You can now use the `?` operator in macro definitions.][56245] The `?`
5133 operator allows you to specify zero or one repetitions similar to the `*` and
5134 `+` operators.
5135 - [Module paths with no leading keyword like `super`, `self`, or `crate`, will
5136 now always resolve to the item (`enum`, `struct`, etc.) available in the
5137 module if present, before resolving to a external crate or an item the prelude.][56759]
5138 E.g.
5139 ```rust
5140 enum Color { Red, Green, Blue }
5141
5142 use Color::*;
5143 ```
5144
5145 #### All editions
5146 - [You can now match against `PhantomData<T>` types.][55837]
5147 - [You can now match against literals in macros with the `literal`
5148 specifier.][56072] This will match against a literal of any type.
5149 E.g. `1`, `'A'`, `"Hello World"`
5150 - [Self can now be used as a constructor and pattern for unit and tuple structs.][56365] E.g.
5151 ```rust
5152 struct Point(i32, i32);
5153
5154 impl Point {
5155 pub fn new(x: i32, y: i32) -> Self {
5156 Self(x, y)
5157 }
5158
5159 pub fn is_origin(&self) -> bool {
5160 match self {
5161 Self(0, 0) => true,
5162 _ => false,
5163 }
5164 }
5165 }
5166 ```
5167 - [Self can also now be used in type definitions.][56366] E.g.
5168 ```rust
5169 enum List<T>
5170 where
5171 Self: PartialOrd<Self> // can write `Self` instead of `List<T>`
5172 {
5173 Nil,
5174 Cons(T, Box<Self>) // likewise here
5175 }
5176 ```
5177 - [You can now mark traits with `#[must_use]`.][55663] This provides a warning if
5178 a `impl Trait` or `dyn Trait` is returned and unused in the program.
5179
5180 Compiler
5181 --------
5182 - [The default allocator has changed from jemalloc to the default allocator on
5183 your system.][55238] The compiler itself on Linux & macOS will still use
5184 jemalloc, but programs compiled with it will use the system allocator.
5185 - [Added the `aarch64-pc-windows-msvc` target.][55702]
5186
5187 Libraries
5188 ---------
5189 - [`PathBuf` now implements `FromStr`.][55148]
5190 - [`Box<[T]>` now implements `FromIterator<T>`.][55843]
5191 - [The `dbg!` macro has been stabilized.][56395] This macro enables you to
5192 easily debug expressions in your rust program. E.g.
5193 ```rust
5194 let a = 2;
5195 let b = dbg!(a * 2) + 1;
5196 // ^-- prints: [src/main.rs:4] a * 2 = 4
5197 assert_eq!(b, 5);
5198 ```
5199
5200 The following APIs are now `const` functions and can be used in a
5201 `const` context.
5202
5203 - [`Cell::as_ptr`]
5204 - [`UnsafeCell::get`]
5205 - [`char::is_ascii`]
5206 - [`iter::empty`]
5207 - [`ManuallyDrop::new`]
5208 - [`ManuallyDrop::into_inner`]
5209 - [`RangeInclusive::start`]
5210 - [`RangeInclusive::end`]
5211 - [`NonNull::as_ptr`]
5212 - [`slice::as_ptr`]
5213 - [`str::as_ptr`]
5214 - [`Duration::as_secs`]
5215 - [`Duration::subsec_millis`]
5216 - [`Duration::subsec_micros`]
5217 - [`Duration::subsec_nanos`]
5218 - [`CStr::as_ptr`]
5219 - [`Ipv4Addr::is_unspecified`]
5220 - [`Ipv6Addr::new`]
5221 - [`Ipv6Addr::octets`]
5222
5223 Stabilized APIs
5224 ---------------
5225 - [`i8::to_be_bytes`]
5226 - [`i8::to_le_bytes`]
5227 - [`i8::to_ne_bytes`]
5228 - [`i8::from_be_bytes`]
5229 - [`i8::from_le_bytes`]
5230 - [`i8::from_ne_bytes`]
5231 - [`i16::to_be_bytes`]
5232 - [`i16::to_le_bytes`]
5233 - [`i16::to_ne_bytes`]
5234 - [`i16::from_be_bytes`]
5235 - [`i16::from_le_bytes`]
5236 - [`i16::from_ne_bytes`]
5237 - [`i32::to_be_bytes`]
5238 - [`i32::to_le_bytes`]
5239 - [`i32::to_ne_bytes`]
5240 - [`i32::from_be_bytes`]
5241 - [`i32::from_le_bytes`]
5242 - [`i32::from_ne_bytes`]
5243 - [`i64::to_be_bytes`]
5244 - [`i64::to_le_bytes`]
5245 - [`i64::to_ne_bytes`]
5246 - [`i64::from_be_bytes`]
5247 - [`i64::from_le_bytes`]
5248 - [`i64::from_ne_bytes`]
5249 - [`i128::to_be_bytes`]
5250 - [`i128::to_le_bytes`]
5251 - [`i128::to_ne_bytes`]
5252 - [`i128::from_be_bytes`]
5253 - [`i128::from_le_bytes`]
5254 - [`i128::from_ne_bytes`]
5255 - [`isize::to_be_bytes`]
5256 - [`isize::to_le_bytes`]
5257 - [`isize::to_ne_bytes`]
5258 - [`isize::from_be_bytes`]
5259 - [`isize::from_le_bytes`]
5260 - [`isize::from_ne_bytes`]
5261 - [`u8::to_be_bytes`]
5262 - [`u8::to_le_bytes`]
5263 - [`u8::to_ne_bytes`]
5264 - [`u8::from_be_bytes`]
5265 - [`u8::from_le_bytes`]
5266 - [`u8::from_ne_bytes`]
5267 - [`u16::to_be_bytes`]
5268 - [`u16::to_le_bytes`]
5269 - [`u16::to_ne_bytes`]
5270 - [`u16::from_be_bytes`]
5271 - [`u16::from_le_bytes`]
5272 - [`u16::from_ne_bytes`]
5273 - [`u32::to_be_bytes`]
5274 - [`u32::to_le_bytes`]
5275 - [`u32::to_ne_bytes`]
5276 - [`u32::from_be_bytes`]
5277 - [`u32::from_le_bytes`]
5278 - [`u32::from_ne_bytes`]
5279 - [`u64::to_be_bytes`]
5280 - [`u64::to_le_bytes`]
5281 - [`u64::to_ne_bytes`]
5282 - [`u64::from_be_bytes`]
5283 - [`u64::from_le_bytes`]
5284 - [`u64::from_ne_bytes`]
5285 - [`u128::to_be_bytes`]
5286 - [`u128::to_le_bytes`]
5287 - [`u128::to_ne_bytes`]
5288 - [`u128::from_be_bytes`]
5289 - [`u128::from_le_bytes`]
5290 - [`u128::from_ne_bytes`]
5291 - [`usize::to_be_bytes`]
5292 - [`usize::to_le_bytes`]
5293 - [`usize::to_ne_bytes`]
5294 - [`usize::from_be_bytes`]
5295 - [`usize::from_le_bytes`]
5296 - [`usize::from_ne_bytes`]
5297
5298 Cargo
5299 -----
5300 - [You can now run `cargo c` as an alias for `cargo check`.][cargo/6218]
5301 - [Usernames are now allowed in alt registry URLs.][cargo/6242]
5302
5303 Misc
5304 ----
5305 - [`libproc_macro` has been added to the `rust-src` distribution.][55280]
5306
5307 Compatibility Notes
5308 -------------------
5309 - [The argument types for AVX's
5310 `_mm256_stream_si256`, `_mm256_stream_pd`, `_mm256_stream_ps`][55610] have
5311 been changed from `*const` to `*mut` as the previous implementation
5312 was unsound.
5313
5314
5315 [55148]: https://github.com/rust-lang/rust/pull/55148/
5316 [55238]: https://github.com/rust-lang/rust/pull/55238/
5317 [55280]: https://github.com/rust-lang/rust/pull/55280/
5318 [55610]: https://github.com/rust-lang/rust/pull/55610/
5319 [55663]: https://github.com/rust-lang/rust/pull/55663/
5320 [55702]: https://github.com/rust-lang/rust/pull/55702/
5321 [55837]: https://github.com/rust-lang/rust/pull/55837/
5322 [55843]: https://github.com/rust-lang/rust/pull/55843/
5323 [56072]: https://github.com/rust-lang/rust/pull/56072/
5324 [56245]: https://github.com/rust-lang/rust/pull/56245/
5325 [56365]: https://github.com/rust-lang/rust/pull/56365/
5326 [56366]: https://github.com/rust-lang/rust/pull/56366/
5327 [56395]: https://github.com/rust-lang/rust/pull/56395/
5328 [56759]: https://github.com/rust-lang/rust/pull/56759/
5329 [cargo/6218]: https://github.com/rust-lang/cargo/pull/6218/
5330 [cargo/6242]: https://github.com/rust-lang/cargo/pull/6242/
5331 [`CStr::as_ptr`]: https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.as_ptr
5332 [`Cell::as_ptr`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.as_ptr
5333 [`Duration::as_secs`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.as_secs
5334 [`Duration::subsec_micros`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_micros
5335 [`Duration::subsec_millis`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_millis
5336 [`Duration::subsec_nanos`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_nanos
5337 [`Ipv4Addr::is_unspecified`]: https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html#method.is_unspecified
5338 [`Ipv6Addr::new`]: https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html#method.new
5339 [`Ipv6Addr::octets`]: https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html#method.octets
5340 [`ManuallyDrop::into_inner`]: https://doc.rust-lang.org/std/mem/struct.ManuallyDrop.html#method.into_inner
5341 [`ManuallyDrop::new`]: https://doc.rust-lang.org/std/mem/struct.ManuallyDrop.html#method.new
5342 [`NonNull::as_ptr`]: https://doc.rust-lang.org/std/ptr/struct.NonNull.html#method.as_ptr
5343 [`RangeInclusive::end`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html#method.end
5344 [`RangeInclusive::start`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html#method.start
5345 [`UnsafeCell::get`]: https://doc.rust-lang.org/std/cell/struct.UnsafeCell.html#method.get
5346 [`slice::as_ptr`]: https://doc.rust-lang.org/std/primitive.slice.html#method.as_ptr
5347 [`char::is_ascii`]: https://doc.rust-lang.org/std/primitive.char.html#method.is_ascii
5348 [`i128::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.from_be_bytes
5349 [`i128::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.from_le_bytes
5350 [`i128::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.from_ne_bytes
5351 [`i128::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.to_be_bytes
5352 [`i128::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.to_le_bytes
5353 [`i128::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i128.html#method.to_ne_bytes
5354 [`i16::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.from_be_bytes
5355 [`i16::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.from_le_bytes
5356 [`i16::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.from_ne_bytes
5357 [`i16::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.to_be_bytes
5358 [`i16::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.to_le_bytes
5359 [`i16::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i16.html#method.to_ne_bytes
5360 [`i32::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.from_be_bytes
5361 [`i32::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.from_le_bytes
5362 [`i32::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.from_ne_bytes
5363 [`i32::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.to_be_bytes
5364 [`i32::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.to_le_bytes
5365 [`i32::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i32.html#method.to_ne_bytes
5366 [`i64::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.from_be_bytes
5367 [`i64::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.from_le_bytes
5368 [`i64::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.from_ne_bytes
5369 [`i64::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.to_be_bytes
5370 [`i64::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.to_le_bytes
5371 [`i64::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i64.html#method.to_ne_bytes
5372 [`i8::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.from_be_bytes
5373 [`i8::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.from_le_bytes
5374 [`i8::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.from_ne_bytes
5375 [`i8::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.to_be_bytes
5376 [`i8::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.to_le_bytes
5377 [`i8::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.i8.html#method.to_ne_bytes
5378 [`isize::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.from_be_bytes
5379 [`isize::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.from_le_bytes
5380 [`isize::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.from_ne_bytes
5381 [`isize::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.to_be_bytes
5382 [`isize::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.to_le_bytes
5383 [`isize::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.isize.html#method.to_ne_bytes
5384 [`iter::empty`]: https://doc.rust-lang.org/std/iter/fn.empty.html
5385 [`str::as_ptr`]: https://doc.rust-lang.org/std/primitive.str.html#method.as_ptr
5386 [`u128::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.from_be_bytes
5387 [`u128::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.from_le_bytes
5388 [`u128::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.from_ne_bytes
5389 [`u128::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.to_be_bytes
5390 [`u128::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.to_le_bytes
5391 [`u128::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u128.html#method.to_ne_bytes
5392 [`u16::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.from_be_bytes
5393 [`u16::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.from_le_bytes
5394 [`u16::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.from_ne_bytes
5395 [`u16::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.to_be_bytes
5396 [`u16::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.to_le_bytes
5397 [`u16::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u16.html#method.to_ne_bytes
5398 [`u32::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.from_be_bytes
5399 [`u32::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.from_le_bytes
5400 [`u32::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.from_ne_bytes
5401 [`u32::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.to_be_bytes
5402 [`u32::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.to_le_bytes
5403 [`u32::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u32.html#method.to_ne_bytes
5404 [`u64::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.from_be_bytes
5405 [`u64::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.from_le_bytes
5406 [`u64::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.from_ne_bytes
5407 [`u64::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.to_be_bytes
5408 [`u64::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.to_le_bytes
5409 [`u64::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u64.html#method.to_ne_bytes
5410 [`u8::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.from_be_bytes
5411 [`u8::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.from_le_bytes
5412 [`u8::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.from_ne_bytes
5413 [`u8::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.to_be_bytes
5414 [`u8::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.to_le_bytes
5415 [`u8::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.u8.html#method.to_ne_bytes
5416 [`usize::from_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.from_be_bytes
5417 [`usize::from_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.from_le_bytes
5418 [`usize::from_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.from_ne_bytes
5419 [`usize::to_be_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.to_be_bytes
5420 [`usize::to_le_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.to_le_bytes
5421 [`usize::to_ne_bytes`]: https://doc.rust-lang.org/stable/std/primitive.usize.html#method.to_ne_bytes
5422
5423
5424 Version 1.31.1 (2018-12-20)
5425 ===========================
5426
5427 - [Fix Rust failing to build on `powerpc-unknown-netbsd`][56562]
5428 - [Fix broken go-to-definition in RLS][rls/1171]
5429 - [Fix infinite loop on hover in RLS][rls/1170]
5430
5431 [56562]: https://github.com/rust-lang/rust/pull/56562
5432 [rls/1171]: https://github.com/rust-lang/rls/issues/1171
5433 [rls/1170]: https://github.com/rust-lang/rls/pull/1170
5434
5435 Version 1.31.0 (2018-12-06)
5436 ==========================
5437
5438 Language
5439 --------
5440 - 🎉 [This version marks the release of the 2018 edition of Rust.][54057] 🎉
5441 - [New lifetime elision rules now allow for eliding lifetimes in functions and
5442 impl headers.][54778] E.g. `impl<'a> Reader for BufReader<'a> {}` can now be
5443 `impl Reader for BufReader<'_> {}`. Lifetimes are still required to be defined
5444 in structs.
5445 - [You can now define and use `const` functions.][54835] These are currently
5446 a strict minimal subset of the [const fn RFC][RFC-911]. Refer to the
5447 [language reference][const-reference] for what exactly is available.
5448 - [You can now use tool lints, which allow you to scope lints from external
5449 tools using attributes.][54870] E.g. `#[allow(clippy::filter_map)]`.
5450 - [`#[no_mangle]` and `#[export_name]` attributes can now be located anywhere in
5451 a crate, not just in exported functions.][54451]
5452 - [You can now use parentheses in pattern matches.][54497]
5453
5454 Compiler
5455 --------
5456 - [Updated musl to 1.1.20][54430]
5457
5458 Libraries
5459 ---------
5460 - [You can now convert `num::NonZero*` types to their raw equivalents using the
5461 `From` trait.][54240] E.g. `u8` now implements `From<NonZeroU8>`.
5462 - [You can now convert a `&Option<T>` into `Option<&T>` and `&mut Option<T>`
5463 into `Option<&mut T>` using the `From` trait.][53218]
5464 - [You can now multiply (`*`) a `time::Duration` by a `u32`.][52813]
5465
5466
5467 Stabilized APIs
5468 ---------------
5469 - [`slice::align_to`]
5470 - [`slice::align_to_mut`]
5471 - [`slice::chunks_exact`]
5472 - [`slice::chunks_exact_mut`]
5473 - [`slice::rchunks`]
5474 - [`slice::rchunks_mut`]
5475 - [`slice::rchunks_exact`]
5476 - [`slice::rchunks_exact_mut`]
5477 - [`Option::replace`]
5478
5479 Cargo
5480 -----
5481 - [Cargo will now download crates in parallel using HTTP/2.][cargo/6005]
5482 - [You can now rename packages in your Cargo.toml][cargo/6319] We have a guide
5483 on [how to use the `package` key in your dependencies.][cargo-rename-reference]
5484
5485 [52813]: https://github.com/rust-lang/rust/pull/52813/
5486 [53218]: https://github.com/rust-lang/rust/pull/53218/
5487 [54057]: https://github.com/rust-lang/rust/pull/54057/
5488 [54240]: https://github.com/rust-lang/rust/pull/54240/
5489 [54430]: https://github.com/rust-lang/rust/pull/54430/
5490 [54451]: https://github.com/rust-lang/rust/pull/54451/
5491 [54497]: https://github.com/rust-lang/rust/pull/54497/
5492 [54778]: https://github.com/rust-lang/rust/pull/54778/
5493 [54835]: https://github.com/rust-lang/rust/pull/54835/
5494 [54870]: https://github.com/rust-lang/rust/pull/54870/
5495 [RFC-911]: https://github.com/rust-lang/rfcs/pull/911
5496 [`Option::replace`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.replace
5497 [`slice::align_to_mut`]: https://doc.rust-lang.org/std/primitive.slice.html#method.align_to_mut
5498 [`slice::align_to`]: https://doc.rust-lang.org/std/primitive.slice.html#method.align_to
5499 [`slice::chunks_exact_mut`]: https://doc.rust-lang.org/std/primitive.slice.html#method.chunks_exact_mut
5500 [`slice::chunks_exact`]: https://doc.rust-lang.org/std/primitive.slice.html#method.chunks_exact
5501 [`slice::rchunks_exact_mut`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rchunks_mut
5502 [`slice::rchunks_exact`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rchunks_exact
5503 [`slice::rchunks_mut`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rchunks_mut
5504 [`slice::rchunks`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rchunks
5505 [cargo/6005]: https://github.com/rust-lang/cargo/pull/6005/
5506 [cargo/6319]: https://github.com/rust-lang/cargo/pull/6319/
5507 [cargo-rename-reference]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#renaming-dependencies-in-cargotoml
5508 [const-reference]: https://doc.rust-lang.org/reference/items/functions.html#const-functions
5509
5510 Version 1.30.1 (2018-11-08)
5511 ===========================
5512
5513 - [Fixed overflow ICE in rustdoc][54199]
5514 - [Cap Cargo progress bar width at 60 in MSYS terminals][cargo/6122]
5515
5516 [54199]: https://github.com/rust-lang/rust/pull/54199
5517 [cargo/6122]: https://github.com/rust-lang/cargo/pull/6122
5518
5519 Version 1.30.0 (2018-10-25)
5520 ==========================
5521
5522 Language
5523 --------
5524 - [Procedural macros are now available.][52081] These kinds of macros allow for
5525 more powerful code generation. There is a [new chapter available][proc-macros]
5526 in the Rust Programming Language book that goes further in depth.
5527 - [You can now use keywords as identifiers using the raw identifiers
5528 syntax (`r#`),][53236] e.g. `let r#for = true;`
5529 - [Using anonymous parameters in traits is now deprecated with a warning and
5530 will be a hard error in the 2018 edition.][53272]
5531 - [You can now use `crate` in paths.][54404] This allows you to refer to the
5532 crate root in the path, e.g. `use crate::foo;` refers to `foo` in `src/lib.rs`.
5533 - [Using a external crate no longer requires being prefixed with `::`.][54404]
5534 Previously, using a external crate in a module without a use statement
5535 required `let json = ::serde_json::from_str(foo);` but can now be written
5536 as `let json = serde_json::from_str(foo);`.
5537 - [You can now apply the `#[used]` attribute to static items to prevent the
5538 compiler from optimising them away, even if they appear to be unused,][51363]
5539 e.g. `#[used] static FOO: u32 = 1;`
5540 - [You can now import and reexport macros from other crates with the `use`
5541 syntax.][50911] Macros exported with `#[macro_export]` are now placed into
5542 the root module of the crate. If your macro relies on calling other local
5543 macros, it is recommended to export with the
5544 `#[macro_export(local_inner_macros)]` attribute so users won't have to import
5545 those macros.
5546 - [You can now catch visibility keywords (e.g. `pub`, `pub(crate)`) in macros
5547 using the `vis` specifier.][53370]
5548 - [Non-macro attributes now allow all forms of literals, not just
5549 strings.][53044] Previously, you would write `#[attr("true")]`, and you can now
5550 write `#[attr(true)]`.
5551 - [You can now specify a function to handle a panic in the Rust runtime with the
5552 `#[panic_handler]` attribute.][51366]
5553
5554 Compiler
5555 --------
5556 - [Added the `riscv32imc-unknown-none-elf` target.][53822]
5557 - [Added the `aarch64-unknown-netbsd` target][53165]
5558 - [Upgraded to LLVM 8.][53611]
5559
5560 Libraries
5561 ---------
5562 - [`ManuallyDrop` now allows the inner type to be unsized.][53033]
5563
5564 Stabilized APIs
5565 ---------------
5566 - [`Ipv4Addr::BROADCAST`]
5567 - [`Ipv4Addr::LOCALHOST`]
5568 - [`Ipv4Addr::UNSPECIFIED`]
5569 - [`Ipv6Addr::LOCALHOST`]
5570 - [`Ipv6Addr::UNSPECIFIED`]
5571 - [`Iterator::find_map`]
5572
5573 The following methods are replacement methods for `trim_left`, `trim_right`,
5574 `trim_left_matches`, and `trim_right_matches`, which will be deprecated
5575 in 1.33.0:
5576 - [`str::trim_end_matches`]
5577 - [`str::trim_end`]
5578 - [`str::trim_start_matches`]
5579 - [`str::trim_start`]
5580
5581 Cargo
5582 ----
5583 - [`cargo run` doesn't require specifying a package in workspaces.][cargo/5877]
5584 - [`cargo doc` now supports `--message-format=json`.][cargo/5878] This is
5585 equivalent to calling `rustdoc --error-format=json`.
5586 - [Cargo will now provide a progress bar for builds.][cargo/5995]
5587
5588 Misc
5589 ----
5590 - [`rustdoc` allows you to specify what edition to treat your code as with the
5591 `--edition` option.][54057]
5592 - [`rustdoc` now has the `--color` (specify whether to output color) and
5593 `--error-format` (specify error format, e.g. `json`) options.][53003]
5594 - [We now distribute a `rust-gdbgui` script that invokes `gdbgui` with Rust
5595 debug symbols.][53774]
5596 - [Attributes from Rust tools such as `rustfmt` or `clippy` are now
5597 available,][53459] e.g. `#[rustfmt::skip]` will skip formatting the next item.
5598
5599 [50911]: https://github.com/rust-lang/rust/pull/50911/
5600 [51363]: https://github.com/rust-lang/rust/pull/51363/
5601 [51366]: https://github.com/rust-lang/rust/pull/51366/
5602 [52081]: https://github.com/rust-lang/rust/pull/52081/
5603 [53003]: https://github.com/rust-lang/rust/pull/53003/
5604 [53033]: https://github.com/rust-lang/rust/pull/53033/
5605 [53044]: https://github.com/rust-lang/rust/pull/53044/
5606 [53165]: https://github.com/rust-lang/rust/pull/53165/
5607 [53611]: https://github.com/rust-lang/rust/pull/53611/
5608 [53236]: https://github.com/rust-lang/rust/pull/53236/
5609 [53272]: https://github.com/rust-lang/rust/pull/53272/
5610 [53370]: https://github.com/rust-lang/rust/pull/53370/
5611 [53459]: https://github.com/rust-lang/rust/pull/53459/
5612 [53774]: https://github.com/rust-lang/rust/pull/53774/
5613 [53822]: https://github.com/rust-lang/rust/pull/53822/
5614 [54057]: https://github.com/rust-lang/rust/pull/54057/
5615 [54404]: https://github.com/rust-lang/rust/pull/54404/
5616 [cargo/5877]: https://github.com/rust-lang/cargo/pull/5877/
5617 [cargo/5878]: https://github.com/rust-lang/cargo/pull/5878/
5618 [cargo/5995]: https://github.com/rust-lang/cargo/pull/5995/
5619 [proc-macros]: https://doc.rust-lang.org/nightly/book/2018-edition/ch19-06-macros.html
5620
5621 [`Ipv4Addr::BROADCAST`]: https://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#associatedconstant.BROADCAST
5622 [`Ipv4Addr::LOCALHOST`]: https://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#associatedconstant.LOCALHOST
5623 [`Ipv4Addr::UNSPECIFIED`]: https://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#associatedconstant.UNSPECIFIED
5624 [`Ipv6Addr::LOCALHOST`]: https://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#associatedconstant.LOCALHOST
5625 [`Ipv6Addr::UNSPECIFIED`]: https://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#associatedconstant.UNSPECIFIED
5626 [`Iterator::find_map`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.find_map
5627 [`str::trim_end_matches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.trim_end_matches
5628 [`str::trim_end`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.trim_end
5629 [`str::trim_start_matches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.trim_start_matches
5630 [`str::trim_start`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.trim_start
5631
5632
5633 Version 1.29.2 (2018-10-11)
5634 ===========================
5635
5636 - [Workaround for an aliasing-related LLVM bug, which caused miscompilation.][54639]
5637 - The `rls-preview` component on the windows-gnu targets has been restored.
5638
5639 [54639]: https://github.com/rust-lang/rust/pull/54639
5640
5641
5642 Version 1.29.1 (2018-09-25)
5643 ===========================
5644
5645 Security Notes
5646 --------------
5647
5648 - The standard library's `str::repeat` function contained an out of bounds write
5649 caused by an integer overflow. This has been fixed by deterministically
5650 panicking when an overflow happens.
5651
5652 Thank you to Scott McMurray for responsibly disclosing this vulnerability to
5653 us.
5654
5655
5656 Version 1.29.0 (2018-09-13)
5657 ==========================
5658
5659 Compiler
5660 --------
5661 - [Bumped minimum LLVM version to 5.0.][51899]
5662 - [Added `powerpc64le-unknown-linux-musl` target.][51619]
5663 - [Added `aarch64-unknown-hermit` and `x86_64-unknown-hermit` targets.][52861]
5664 - [Upgraded to LLVM 7.][51966]
5665
5666 Libraries
5667 ---------
5668 - [`Once::call_once` no longer requires `Once` to be `'static`.][52239]
5669 - [`BuildHasherDefault` now implements `PartialEq` and `Eq`.][52402]
5670 - [`Box<CStr>`, `Box<OsStr>`, and `Box<Path>` now implement `Clone`.][51912]
5671 - [Implemented `PartialEq<&str>` for `OsString` and `PartialEq<OsString>`
5672 for `&str`.][51178]
5673 - [`Cell<T>` now allows `T` to be unsized.][50494]
5674 - [`SocketAddr` is now stable on Redox.][52656]
5675
5676 Stabilized APIs
5677 ---------------
5678 - [`Arc::downcast`]
5679 - [`Iterator::flatten`]
5680 - [`Rc::downcast`]
5681
5682 Cargo
5683 -----
5684 - [Cargo can silently fix some bad lockfiles.][cargo/5831] You can use
5685 `--locked` to disable this behavior.
5686 - [`cargo-install` will now allow you to cross compile an install
5687 using `--target`.][cargo/5614]
5688 - [Added the `cargo-fix` subcommand to automatically move project code from
5689 2015 edition to 2018.][cargo/5723]
5690 - [`cargo doc` can now optionally document private types using the
5691 `--document-private-items` flag.][cargo/5543]
5692
5693 Misc
5694 ----
5695 - [`rustdoc` now has the `--cap-lints` option which demotes all lints above
5696 the specified level to that level.][52354] For example `--cap-lints warn`
5697 will demote `deny` and `forbid` lints to `warn`.
5698 - [`rustc` and `rustdoc` will now have the exit code of `1` if compilation
5699 fails and `101` if there is a panic.][52197]
5700 - [A preview of clippy has been made available through rustup.][51122]
5701 You can install the preview with `rustup component add clippy-preview`.
5702
5703 Compatibility Notes
5704 -------------------
5705 - [`str::{slice_unchecked, slice_unchecked_mut}` are now deprecated.][51807]
5706 Use `str::get_unchecked(begin..end)` instead.
5707 - [`std::env::home_dir` is now deprecated for its unintuitive behavior.][51656]
5708 Consider using the `home_dir` function from
5709 https://crates.io/crates/dirs instead.
5710 - [`rustc` will no longer silently ignore invalid data in target spec.][52330]
5711 - [`cfg` attributes and `--cfg` command line flags are now more
5712 strictly validated.][53893]
5713
5714 [53893]: https://github.com/rust-lang/rust/pull/53893/
5715 [52861]: https://github.com/rust-lang/rust/pull/52861/
5716 [51966]: https://github.com/rust-lang/rust/pull/51966/
5717 [52656]: https://github.com/rust-lang/rust/pull/52656/
5718 [52239]: https://github.com/rust-lang/rust/pull/52239/
5719 [52330]: https://github.com/rust-lang/rust/pull/52330/
5720 [52354]: https://github.com/rust-lang/rust/pull/52354/
5721 [52402]: https://github.com/rust-lang/rust/pull/52402/
5722 [52197]: https://github.com/rust-lang/rust/pull/52197/
5723 [51807]: https://github.com/rust-lang/rust/pull/51807/
5724 [51899]: https://github.com/rust-lang/rust/pull/51899/
5725 [51912]: https://github.com/rust-lang/rust/pull/51912/
5726 [51619]: https://github.com/rust-lang/rust/pull/51619/
5727 [51656]: https://github.com/rust-lang/rust/pull/51656/
5728 [51178]: https://github.com/rust-lang/rust/pull/51178/
5729 [51122]: https://github.com/rust-lang/rust/pull/51122
5730 [50494]: https://github.com/rust-lang/rust/pull/50494/
5731 [cargo/5543]: https://github.com/rust-lang/cargo/pull/5543
5732 [cargo/5614]: https://github.com/rust-lang/cargo/pull/5614/
5733 [cargo/5723]: https://github.com/rust-lang/cargo/pull/5723/
5734 [cargo/5831]: https://github.com/rust-lang/cargo/pull/5831/
5735 [`Arc::downcast`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.downcast
5736 [`Iterator::flatten`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.flatten
5737 [`Rc::downcast`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.downcast
5738
5739
5740 Version 1.28.0 (2018-08-02)
5741 ===========================
5742
5743 Language
5744 --------
5745 - [The `#[repr(transparent)]` attribute is now stable.][51562] This attribute
5746 allows a Rust newtype wrapper (`struct NewType<T>(T);`) to be represented as
5747 the inner type across Foreign Function Interface (FFI) boundaries.
5748 - [The keywords `pure`, `sizeof`, `alignof`, and `offsetof` have been unreserved
5749 and can now be used as identifiers.][51196]
5750 - [The `GlobalAlloc` trait and `#[global_allocator]` attribute are now
5751 stable.][51241] This will allow users to specify a global allocator for
5752 their program.
5753 - [Unit test functions marked with the `#[test]` attribute can now return
5754 `Result<(), E: Debug>` in addition to `()`.][51298]
5755 - [The `lifetime` specifier for `macro_rules!` is now stable.][50385] This
5756 allows macros to easily target lifetimes.
5757
5758 Compiler
5759 --------
5760 - [The `s` and `z` optimisation levels are now stable.][50265] These optimisations
5761 prioritise making smaller binary sizes. `z` is the same as `s` with the
5762 exception that it does not vectorise loops, which typically results in an even
5763 smaller binary.
5764 - [The short error format is now stable.][49546] Specified with
5765 `--error-format=short` this option will provide a more compressed output of
5766 rust error messages.
5767 - [Added a lint warning when you have duplicated `macro_export`s.][50143]
5768 - [Reduced the number of allocations in the macro parser.][50855] This can
5769 improve compile times of macro heavy crates on average by 5%.
5770
5771 Libraries
5772 ---------
5773 - [Implemented `Default` for `&mut str`.][51306]
5774 - [Implemented `From<bool>` for all integer and unsigned number types.][50554]
5775 - [Implemented `Extend` for `()`.][50234]
5776 - [The `Debug` implementation of `time::Duration` should now be more easily
5777 human readable.][50364] Previously a `Duration` of one second would printed as
5778 `Duration { secs: 1, nanos: 0 }` and will now be printed as `1s`.
5779 - [Implemented `From<&String>` for `Cow<str>`, `From<&Vec<T>>` for `Cow<[T]>`,
5780 `From<Cow<CStr>>` for `CString`, `From<CString>, From<CStr>, From<&CString>`
5781 for `Cow<CStr>`, `From<OsString>, From<OsStr>, From<&OsString>` for
5782 `Cow<OsStr>`, `From<&PathBuf>` for `Cow<Path>`, and `From<Cow<Path>>`
5783 for `PathBuf`.][50170]
5784 - [Implemented `Shl` and `Shr` for `Wrapping<u128>`
5785 and `Wrapping<i128>`.][50465]
5786 - [`DirEntry::metadata` now uses `fstatat` instead of `lstat` when
5787 possible.][51050] This can provide up to a 40% speed increase.
5788 - [Improved error messages when using `format!`.][50610]
5789
5790 Stabilized APIs
5791 ---------------
5792 - [`Iterator::step_by`]
5793 - [`Path::ancestors`]
5794 - [`SystemTime::UNIX_EPOCH`]
5795 - [`alloc::GlobalAlloc`]
5796 - [`alloc::Layout`]
5797 - [`alloc::LayoutErr`]
5798 - [`alloc::System`]
5799 - [`alloc::alloc`]
5800 - [`alloc::alloc_zeroed`]
5801 - [`alloc::dealloc`]
5802 - [`alloc::realloc`]
5803 - [`alloc::handle_alloc_error`]
5804 - [`btree_map::Entry::or_default`]
5805 - [`fmt::Alignment`]
5806 - [`hash_map::Entry::or_default`]
5807 - [`iter::repeat_with`]
5808 - [`num::NonZeroUsize`]
5809 - [`num::NonZeroU128`]
5810 - [`num::NonZeroU16`]
5811 - [`num::NonZeroU32`]
5812 - [`num::NonZeroU64`]
5813 - [`num::NonZeroU8`]
5814 - [`ops::RangeBounds`]
5815 - [`slice::SliceIndex`]
5816 - [`slice::from_mut`]
5817 - [`slice::from_ref`]
5818 - [`{Any + Send + Sync}::downcast_mut`]
5819 - [`{Any + Send + Sync}::downcast_ref`]
5820 - [`{Any + Send + Sync}::is`]
5821
5822 Cargo
5823 -----
5824 - [Cargo will now no longer allow you to publish crates with build scripts that
5825 modify the `src` directory.][cargo/5584] The `src` directory in a crate should be
5826 considered to be immutable.
5827
5828 Misc
5829 ----
5830 - [The `suggestion_applicability` field in `rustc`'s json output is now
5831 stable.][50486] This will allow dev tools to check whether a code suggestion
5832 would apply to them.
5833
5834 Compatibility Notes
5835 -------------------
5836 - [Rust will consider trait objects with duplicated constraints to be the same
5837 type as without the duplicated constraint.][51276] For example the below code will
5838 now fail to compile.
5839 ```rust
5840 trait Trait {}
5841
5842 impl Trait + Send {
5843 fn test(&self) { println!("one"); } //~ ERROR duplicate definitions with name `test`
5844 }
5845
5846 impl Trait + Send + Send {
5847 fn test(&self) { println!("two"); }
5848 }
5849 ```
5850
5851 [49546]: https://github.com/rust-lang/rust/pull/49546/
5852 [50143]: https://github.com/rust-lang/rust/pull/50143/
5853 [50170]: https://github.com/rust-lang/rust/pull/50170/
5854 [50234]: https://github.com/rust-lang/rust/pull/50234/
5855 [50265]: https://github.com/rust-lang/rust/pull/50265/
5856 [50364]: https://github.com/rust-lang/rust/pull/50364/
5857 [50385]: https://github.com/rust-lang/rust/pull/50385/
5858 [50465]: https://github.com/rust-lang/rust/pull/50465/
5859 [50486]: https://github.com/rust-lang/rust/pull/50486/
5860 [50554]: https://github.com/rust-lang/rust/pull/50554/
5861 [50610]: https://github.com/rust-lang/rust/pull/50610/
5862 [50855]: https://github.com/rust-lang/rust/pull/50855/
5863 [51050]: https://github.com/rust-lang/rust/pull/51050/
5864 [51196]: https://github.com/rust-lang/rust/pull/51196/
5865 [51241]: https://github.com/rust-lang/rust/pull/51241/
5866 [51276]: https://github.com/rust-lang/rust/pull/51276/
5867 [51298]: https://github.com/rust-lang/rust/pull/51298/
5868 [51306]: https://github.com/rust-lang/rust/pull/51306/
5869 [51562]: https://github.com/rust-lang/rust/pull/51562/
5870 [cargo/5584]: https://github.com/rust-lang/cargo/pull/5584/
5871 [`Iterator::step_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.step_by
5872 [`Path::ancestors`]: https://doc.rust-lang.org/std/path/struct.Path.html#method.ancestors
5873 [`SystemTime::UNIX_EPOCH`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#associatedconstant.UNIX_EPOCH
5874 [`alloc::GlobalAlloc`]: https://doc.rust-lang.org/std/alloc/trait.GlobalAlloc.html
5875 [`alloc::Layout`]: https://doc.rust-lang.org/std/alloc/struct.Layout.html
5876 [`alloc::LayoutErr`]: https://doc.rust-lang.org/std/alloc/struct.LayoutErr.html
5877 [`alloc::System`]: https://doc.rust-lang.org/std/alloc/struct.System.html
5878 [`alloc::alloc`]: https://doc.rust-lang.org/std/alloc/fn.alloc.html
5879 [`alloc::alloc_zeroed`]: https://doc.rust-lang.org/std/alloc/fn.alloc_zeroed.html
5880 [`alloc::dealloc`]: https://doc.rust-lang.org/std/alloc/fn.dealloc.html
5881 [`alloc::realloc`]: https://doc.rust-lang.org/std/alloc/fn.realloc.html
5882 [`alloc::handle_alloc_error`]: https://doc.rust-lang.org/std/alloc/fn.handle_alloc_error.html
5883 [`btree_map::Entry::or_default`]: https://doc.rust-lang.org/std/collections/btree_map/enum.Entry.html#method.or_default
5884 [`fmt::Alignment`]: https://doc.rust-lang.org/std/fmt/enum.Alignment.html
5885 [`hash_map::Entry::or_default`]: https://doc.rust-lang.org/std/collections/hash_map/enum.Entry.html#method.or_default
5886 [`iter::repeat_with`]: https://doc.rust-lang.org/std/iter/fn.repeat_with.html
5887 [`num::NonZeroUsize`]: https://doc.rust-lang.org/std/num/struct.NonZeroUsize.html
5888 [`num::NonZeroU128`]: https://doc.rust-lang.org/std/num/struct.NonZeroU128.html
5889 [`num::NonZeroU16`]: https://doc.rust-lang.org/std/num/struct.NonZeroU16.html
5890 [`num::NonZeroU32`]: https://doc.rust-lang.org/std/num/struct.NonZeroU32.html
5891 [`num::NonZeroU64`]: https://doc.rust-lang.org/std/num/struct.NonZeroU64.html
5892 [`num::NonZeroU8`]: https://doc.rust-lang.org/std/num/struct.NonZeroU8.html
5893 [`ops::RangeBounds`]: https://doc.rust-lang.org/std/ops/trait.RangeBounds.html
5894 [`slice::SliceIndex`]: https://doc.rust-lang.org/std/slice/trait.SliceIndex.html
5895 [`slice::from_mut`]: https://doc.rust-lang.org/std/slice/fn.from_mut.html
5896 [`slice::from_ref`]: https://doc.rust-lang.org/std/slice/fn.from_ref.html
5897 [`{Any + Send + Sync}::downcast_mut`]: https://doc.rust-lang.org/std/any/trait.Any.html#method.downcast_mut-2
5898 [`{Any + Send + Sync}::downcast_ref`]: https://doc.rust-lang.org/std/any/trait.Any.html#method.downcast_ref-2
5899 [`{Any + Send + Sync}::is`]: https://doc.rust-lang.org/std/any/trait.Any.html#method.is-2
5900
5901 Version 1.27.2 (2018-07-20)
5902 ===========================
5903
5904 Compatibility Notes
5905 -------------------
5906
5907 - The borrow checker was fixed to avoid potential unsoundness when using
5908 match ergonomics: [#52213][52213].
5909
5910 [52213]: https://github.com/rust-lang/rust/issues/52213
5911
5912 Version 1.27.1 (2018-07-10)
5913 ===========================
5914
5915 Security Notes
5916 --------------
5917
5918 - rustdoc would execute plugins in the /tmp/rustdoc/plugins directory
5919 when running, which enabled executing code as some other user on a
5920 given machine. This release fixes that vulnerability; you can read
5921 more about this on the [blog][rustdoc-sec]. The associated CVE is [CVE-2018-1000622].
5922
5923 Thank you to Red Hat for responsibly disclosing this vulnerability to us.
5924
5925 Compatibility Notes
5926 -------------------
5927
5928 - The borrow checker was fixed to avoid an additional potential unsoundness when using
5929 match ergonomics: [#51415][51415], [#49534][49534].
5930
5931 [51415]: https://github.com/rust-lang/rust/issues/51415
5932 [49534]: https://github.com/rust-lang/rust/issues/49534
5933 [rustdoc-sec]: https://blog.rust-lang.org/2018/07/06/security-advisory-for-rustdoc.html
5934 [CVE-2018-1000622]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=%20CVE-2018-1000622
5935
5936 Version 1.27.0 (2018-06-21)
5937 ==========================
5938
5939 Language
5940 --------
5941 - [Removed 'proc' from the reserved keywords list.][49699] This allows `proc` to
5942 be used as an identifier.
5943 - [The dyn syntax is now available.][49968] This syntax is equivalent to the
5944 bare `Trait` syntax, and should make it clearer when being used in tandem with
5945 `impl Trait` because it is equivalent to the following syntax:
5946 `&Trait == &dyn Trait`, `&mut Trait == &mut dyn Trait`, and
5947 `Box<Trait> == Box<dyn Trait>`.
5948 - [Attributes on generic parameters such as types and lifetimes are
5949 now stable.][48851] e.g.
5950 `fn foo<#[lifetime_attr] 'a, #[type_attr] T: 'a>() {}`
5951 - [The `#[must_use]` attribute can now also be used on functions as well as
5952 types.][48925] It provides a lint that by default warns users when the
5953 value returned by a function has not been used.
5954
5955 Compiler
5956 --------
5957 - [Added the `armv5te-unknown-linux-musleabi` target.][50423]
5958
5959 Libraries
5960 ---------
5961 - [SIMD (Single Instruction Multiple Data) on x86/x86_64 is now stable.][49664]
5962 This includes [`arch::x86`] & [`arch::x86_64`] modules which contain
5963 SIMD intrinsics, a new macro called `is_x86_feature_detected!`, the
5964 `#[target_feature(enable="")]` attribute, and adding `target_feature = ""` to
5965 the `cfg` attribute.
5966 - [A lot of methods for `[u8]`, `f32`, and `f64` previously only available in
5967 std are now available in core.][49896]
5968 - [The generic `Rhs` type parameter on `ops::{Shl, ShlAssign, Shr}` now defaults
5969 to `Self`.][49630]
5970 - [`std::str::replace` now has the `#[must_use]` attribute][50177] to clarify
5971 that the operation isn't done in place.
5972 - [`Clone::clone`, `Iterator::collect`, and `ToOwned::to_owned` now have
5973 the `#[must_use]` attribute][49533] to warn about unused potentially
5974 expensive allocations.
5975
5976 Stabilized APIs
5977 ---------------
5978 - [`DoubleEndedIterator::rfind`]
5979 - [`DoubleEndedIterator::rfold`]
5980 - [`DoubleEndedIterator::try_rfold`]
5981 - [`Duration::from_micros`]
5982 - [`Duration::from_nanos`]
5983 - [`Duration::subsec_micros`]
5984 - [`Duration::subsec_millis`]
5985 - [`HashMap::remove_entry`]
5986 - [`Iterator::try_fold`]
5987 - [`Iterator::try_for_each`]
5988 - [`NonNull::cast`]
5989 - [`Option::filter`]
5990 - [`String::replace_range`]
5991 - [`Take::set_limit`]
5992 - [`hint::unreachable_unchecked`]
5993 - [`os::unix::process::parent_id`]
5994 - [`ptr::swap_nonoverlapping`]
5995 - [`slice::rsplit_mut`]
5996 - [`slice::rsplit`]
5997 - [`slice::swap_with_slice`]
5998
5999 Cargo
6000 -----
6001 - [`cargo-metadata` now includes `authors`, `categories`, `keywords`,
6002 `readme`, and `repository` fields.][cargo/5386]
6003 - [`cargo-metadata` now includes a package's `metadata` table.][cargo/5360]
6004 - [Added the `--target-dir` optional argument.][cargo/5393] This allows you to specify
6005 a different directory than `target` for placing compilation artifacts.
6006 - [Cargo will be adding automatic target inference for binaries, benchmarks,
6007 examples, and tests in the Rust 2018 edition.][cargo/5335] If your project specifies
6008 specific targets, e.g. using `[[bin]]`, and have other binaries in locations
6009 where cargo would infer a binary, Cargo will produce a warning. You can
6010 disable this feature ahead of time by setting any of the following to false:
6011 `autobins`, `autobenches`, `autoexamples`, `autotests`.
6012 - [Cargo will now cache compiler information.][cargo/5359] This can be disabled by
6013 setting `CARGO_CACHE_RUSTC_INFO=0` in your environment.
6014
6015 Misc
6016 ----
6017 - [Added “The Rustc book” into the official documentation.][49707]
6018 [“The Rustc book”] documents and teaches how to use the rustc compiler.
6019 - [All books available on `doc.rust-lang.org` are now searchable.][49623]
6020
6021 Compatibility Notes
6022 -------------------
6023 - [Calling a `CharExt` or `StrExt` method directly on core will no longer
6024 work.][49896] e.g. `::core::prelude::v1::StrExt::is_empty("")` will not
6025 compile, `"".is_empty()` will still compile.
6026 - [`Debug` output on `atomic::{AtomicBool, AtomicIsize, AtomicPtr, AtomicUsize}`
6027 will only print the inner type.][48553] E.g.
6028 `print!("{:?}", AtomicBool::new(true))` will print `true`,
6029 not `AtomicBool(true)`.
6030 - [The maximum number for `repr(align(N))` is now 2²⁹.][50378] Previously you
6031 could enter higher numbers but they were not supported by LLVM. Up to 512MB
6032 alignment should cover all use cases.
6033 - The `.description()` method on the `std::error::Error` trait
6034 [has been soft-deprecated][50163]. It is no longer required to implement it.
6035
6036 [48553]: https://github.com/rust-lang/rust/pull/48553/
6037 [48851]: https://github.com/rust-lang/rust/pull/48851/
6038 [48925]: https://github.com/rust-lang/rust/pull/48925/
6039 [49533]: https://github.com/rust-lang/rust/pull/49533/
6040 [49623]: https://github.com/rust-lang/rust/pull/49623/
6041 [49630]: https://github.com/rust-lang/rust/pull/49630/
6042 [49664]: https://github.com/rust-lang/rust/pull/49664/
6043 [49699]: https://github.com/rust-lang/rust/pull/49699/
6044 [49707]: https://github.com/rust-lang/rust/pull/49707/
6045 [49896]: https://github.com/rust-lang/rust/pull/49896/
6046 [49968]: https://github.com/rust-lang/rust/pull/49968/
6047 [50163]: https://github.com/rust-lang/rust/pull/50163
6048 [50177]: https://github.com/rust-lang/rust/pull/50177/
6049 [50378]: https://github.com/rust-lang/rust/pull/50378/
6050 [50423]: https://github.com/rust-lang/rust/pull/50423/
6051 [cargo/5335]: https://github.com/rust-lang/cargo/pull/5335/
6052 [cargo/5359]: https://github.com/rust-lang/cargo/pull/5359/
6053 [cargo/5360]: https://github.com/rust-lang/cargo/pull/5360/
6054 [cargo/5386]: https://github.com/rust-lang/cargo/pull/5386/
6055 [cargo/5393]: https://github.com/rust-lang/cargo/pull/5393/
6056 [`DoubleEndedIterator::rfind`]: https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html#method.rfind
6057 [`DoubleEndedIterator::rfold`]: https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html#method.rfold
6058 [`DoubleEndedIterator::try_rfold`]: https://doc.rust-lang.org/std/iter/trait.DoubleEndedIterator.html#method.try_rfold
6059 [`Duration::from_micros`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.from_micros
6060 [`Duration::from_nanos`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.from_nanos
6061 [`Duration::subsec_micros`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_micros
6062 [`Duration::subsec_millis`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.subsec_millis
6063 [`HashMap::remove_entry`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.remove_entry
6064 [`Iterator::try_fold`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.try_fold
6065 [`Iterator::try_for_each`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.try_for_each
6066 [`NonNull::cast`]: https://doc.rust-lang.org/std/ptr/struct.NonNull.html#method.cast
6067 [`Option::filter`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.filter
6068 [`String::replace_range`]: https://doc.rust-lang.org/std/string/struct.String.html#method.replace_range
6069 [`Take::set_limit`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.set_limit
6070 [`hint::unreachable_unchecked`]: https://doc.rust-lang.org/std/hint/fn.unreachable_unchecked.html
6071 [`os::unix::process::parent_id`]: https://doc.rust-lang.org/std/os/unix/process/fn.parent_id.html
6072 [`process::id`]: https://doc.rust-lang.org/std/process/fn.id.html
6073 [`ptr::swap_nonoverlapping`]: https://doc.rust-lang.org/std/ptr/fn.swap_nonoverlapping.html
6074 [`slice::rsplit_mut`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rsplit_mut
6075 [`slice::rsplit`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rsplit
6076 [`slice::swap_with_slice`]: https://doc.rust-lang.org/std/primitive.slice.html#method.swap_with_slice
6077 [`arch::x86_64`]: https://doc.rust-lang.org/std/arch/x86_64/index.html
6078 [`arch::x86`]: https://doc.rust-lang.org/std/arch/x86/index.html
6079 [“The Rustc book”]: https://doc.rust-lang.org/rustc
6080
6081
6082 Version 1.26.2 (2018-06-05)
6083 ==========================
6084
6085 Compatibility Notes
6086 -------------------
6087
6088 - [The borrow checker was fixed to avoid unsoundness when using match ergonomics.][51117]
6089
6090 [51117]: https://github.com/rust-lang/rust/issues/51117
6091
6092
6093 Version 1.26.1 (2018-05-29)
6094 ==========================
6095
6096 Tools
6097 -----
6098
6099 - [RLS now works on Windows.][50646]
6100 - [Rustfmt stopped badly formatting text in some cases.][rustfmt/2695]
6101
6102
6103 Compatibility Notes
6104 --------
6105
6106 - [`fn main() -> impl Trait` no longer works for non-Termination
6107 trait.][50656]
6108 This reverts an accidental stabilization.
6109 - [`NaN > NaN` no longer returns true in const-fn contexts.][50812]
6110 - [Prohibit using turbofish for `impl Trait` in method arguments.][50950]
6111
6112 [50646]: https://github.com/rust-lang/rust/issues/50646
6113 [50656]: https://github.com/rust-lang/rust/pull/50656
6114 [50812]: https://github.com/rust-lang/rust/pull/50812
6115 [50950]: https://github.com/rust-lang/rust/issues/50950
6116 [rustfmt/2695]: https://github.com/rust-lang-nursery/rustfmt/issues/2695
6117
6118 Version 1.26.0 (2018-05-10)
6119 ==========================
6120
6121 Language
6122 --------
6123 - [Closures now implement `Copy` and/or `Clone` if all captured variables
6124 implement either or both traits.][49299]
6125 - [The inclusive range syntax e.g. `for x in 0..=10` is now stable.][47813]
6126 - [The `'_` lifetime is now stable. The underscore lifetime can be used anywhere a
6127 lifetime can be elided.][49458]
6128 - [`impl Trait` is now stable allowing you to have abstract types in returns
6129 or in function parameters.][49255] E.g. `fn foo() -> impl Iterator<Item=u8>` or
6130 `fn open(path: impl AsRef<Path>)`.
6131 - [Pattern matching will now automatically apply dereferences.][49394]
6132 - [128-bit integers in the form of `u128` and `i128` are now stable.][49101]
6133 - [`main` can now return `Result<(), E: Debug>`][49162] in addition to `()`.
6134 - [A lot of operations are now available in a const context.][46882] E.g. You
6135 can now index into constant arrays, reference and dereference into constants,
6136 and use tuple struct constructors.
6137 - [Fixed entry slice patterns are now stable.][48516] E.g.
6138 ```rust
6139 let points = [1, 2, 3, 4];
6140 match points {
6141 [1, 2, 3, 4] => println!("All points were sequential."),
6142 _ => println!("Not all points were sequential."),
6143 }
6144 ```
6145
6146
6147 Compiler
6148 --------
6149 - [LLD is now used as the default linker for `wasm32-unknown-unknown`.][48125]
6150 - [Fixed exponential projection complexity on nested types.][48296]
6151 This can provide up to a ~12% reduction in compile times for certain crates.
6152 - [Added the `--remap-path-prefix` option to rustc.][48359] Allowing you
6153 to remap path prefixes outputted by the compiler.
6154 - [Added `powerpc-unknown-netbsd` target.][48281]
6155
6156 Libraries
6157 ---------
6158 - [Implemented `From<u16> for usize` & `From<{u8, i16}> for isize`.][49305]
6159 - [Added hexadecimal formatting for integers with fmt::Debug][48978]
6160 e.g. `assert!(format!("{:02x?}", b"Foo\0") == "[46, 6f, 6f, 00]")`
6161 - [Implemented `Default, Hash` for `cmp::Reverse`.][48628]
6162 - [Optimized `str::repeat` being 8x faster in large cases.][48657]
6163 - [`ascii::escape_default` is now available in libcore.][48735]
6164 - [Trailing commas are now supported in std and core macros.][48056]
6165 - [Implemented `Copy, Clone` for `cmp::Reverse`][47379]
6166 - [Implemented `Clone` for `char::{ToLowercase, ToUppercase}`.][48629]
6167
6168 Stabilized APIs
6169 ---------------
6170 - [`*const T::add`]
6171 - [`*const T::copy_to_nonoverlapping`]
6172 - [`*const T::copy_to`]
6173 - [`*const T::read_unaligned`]
6174 - [`*const T::read_volatile`]
6175 - [`*const T::read`]
6176 - [`*const T::sub`]
6177 - [`*const T::wrapping_add`]
6178 - [`*const T::wrapping_sub`]
6179 - [`*mut T::add`]
6180 - [`*mut T::copy_to_nonoverlapping`]
6181 - [`*mut T::copy_to`]
6182 - [`*mut T::read_unaligned`]
6183 - [`*mut T::read_volatile`]
6184 - [`*mut T::read`]
6185 - [`*mut T::replace`]
6186 - [`*mut T::sub`]
6187 - [`*mut T::swap`]
6188 - [`*mut T::wrapping_add`]
6189 - [`*mut T::wrapping_sub`]
6190 - [`*mut T::write_bytes`]
6191 - [`*mut T::write_unaligned`]
6192 - [`*mut T::write_volatile`]
6193 - [`*mut T::write`]
6194 - [`Box::leak`]
6195 - [`FromUtf8Error::as_bytes`]
6196 - [`LocalKey::try_with`]
6197 - [`Option::cloned`]
6198 - [`btree_map::Entry::and_modify`]
6199 - [`fs::read_to_string`]
6200 - [`fs::read`]
6201 - [`fs::write`]
6202 - [`hash_map::Entry::and_modify`]
6203 - [`iter::FusedIterator`]
6204 - [`ops::RangeInclusive`]
6205 - [`ops::RangeToInclusive`]
6206 - [`process::id`]
6207 - [`slice::rotate_left`]
6208 - [`slice::rotate_right`]
6209 - [`String::retain`]
6210
6211
6212 Cargo
6213 -----
6214 - [Cargo will now output path to custom commands when `-v` is
6215 passed with `--list`][cargo/5041]
6216 - [The Cargo binary version is now the same as the Rust version][cargo/5083]
6217
6218 Misc
6219 ----
6220 - [The second edition of "The Rust Programming Language" book is now recommended
6221 over the first.][48404]
6222
6223 Compatibility Notes
6224 -------------------
6225
6226 - [aliasing a `Fn` trait as `dyn` no longer works.][48481] E.g. the following
6227 syntax is now invalid.
6228 ```
6229 use std::ops::Fn as dyn;
6230 fn g(_: Box<dyn(std::fmt::Debug)>) {}
6231 ```
6232 - [The result of dereferences are no longer promoted to `'static`.][47408]
6233 e.g.
6234 ```rust
6235 fn main() {
6236 const PAIR: &(i32, i32) = &(0, 1);
6237 let _reversed_pair: &'static _ = &(PAIR.1, PAIR.0); // Doesn't work
6238 }
6239 ```
6240 - [Deprecate `AsciiExt` trait in favor of inherent methods.][49109]
6241 - [`".e0"` will now no longer parse as `0.0` and will instead cause
6242 an error.][48235]
6243 - [Removed hoedown from rustdoc.][48274]
6244 - [Bounds on higher-kinded lifetimes a hard error.][48326]
6245
6246 [46882]: https://github.com/rust-lang/rust/pull/46882
6247 [47379]: https://github.com/rust-lang/rust/pull/47379
6248 [47408]: https://github.com/rust-lang/rust/pull/47408
6249 [47813]: https://github.com/rust-lang/rust/pull/47813
6250 [48056]: https://github.com/rust-lang/rust/pull/48056
6251 [48125]: https://github.com/rust-lang/rust/pull/48125
6252 [48235]: https://github.com/rust-lang/rust/pull/48235
6253 [48274]: https://github.com/rust-lang/rust/pull/48274
6254 [48281]: https://github.com/rust-lang/rust/pull/48281
6255 [48296]: https://github.com/rust-lang/rust/pull/48296
6256 [48326]: https://github.com/rust-lang/rust/pull/48326
6257 [48359]: https://github.com/rust-lang/rust/pull/48359
6258 [48404]: https://github.com/rust-lang/rust/pull/48404
6259 [48481]: https://github.com/rust-lang/rust/pull/48481
6260 [48516]: https://github.com/rust-lang/rust/pull/48516
6261 [48628]: https://github.com/rust-lang/rust/pull/48628
6262 [48629]: https://github.com/rust-lang/rust/pull/48629
6263 [48657]: https://github.com/rust-lang/rust/pull/48657
6264 [48735]: https://github.com/rust-lang/rust/pull/48735
6265 [48978]: https://github.com/rust-lang/rust/pull/48978
6266 [49101]: https://github.com/rust-lang/rust/pull/49101
6267 [49109]: https://github.com/rust-lang/rust/pull/49109
6268 [49162]: https://github.com/rust-lang/rust/pull/49162
6269 [49255]: https://github.com/rust-lang/rust/pull/49255
6270 [49299]: https://github.com/rust-lang/rust/pull/49299
6271 [49305]: https://github.com/rust-lang/rust/pull/49305
6272 [49394]: https://github.com/rust-lang/rust/pull/49394
6273 [49458]: https://github.com/rust-lang/rust/pull/49458
6274 [`*const T::add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.add
6275 [`*const T::copy_to_nonoverlapping`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to_nonoverlapping
6276 [`*const T::copy_to`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to
6277 [`*const T::read_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_unaligned
6278 [`*const T::read_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_volatile
6279 [`*const T::read`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read
6280 [`*const T::sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.sub
6281 [`*const T::wrapping_add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_add
6282 [`*const T::wrapping_sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_sub
6283 [`*mut T::add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.add-1
6284 [`*mut T::copy_to_nonoverlapping`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to_nonoverlapping-1
6285 [`*mut T::copy_to`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to-1
6286 [`*mut T::read_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_unaligned-1
6287 [`*mut T::read_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_volatile-1
6288 [`*mut T::read`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read-1
6289 [`*mut T::replace`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.replace
6290 [`*mut T::sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.sub-1
6291 [`*mut T::swap`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.swap
6292 [`*mut T::wrapping_add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_add-1
6293 [`*mut T::wrapping_sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_sub-1
6294 [`*mut T::write_bytes`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_bytes
6295 [`*mut T::write_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_unaligned
6296 [`*mut T::write_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_volatile
6297 [`*mut T::write`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write
6298 [`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method.leak
6299 [`FromUtf8Error::as_bytes`]: https://doc.rust-lang.org/std/string/struct.FromUtf8Error.html#method.as_bytes
6300 [`LocalKey::try_with`]: https://doc.rust-lang.org/std/thread/struct.LocalKey.html#method.try_with
6301 [`Option::cloned`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.cloned
6302 [`btree_map::Entry::and_modify`]: https://doc.rust-lang.org/std/collections/btree_map/enum.Entry.html#method.and_modify
6303 [`fs::read_to_string`]: https://doc.rust-lang.org/std/fs/fn.read_to_string.html
6304 [`fs::read`]: https://doc.rust-lang.org/std/fs/fn.read.html
6305 [`fs::write`]: https://doc.rust-lang.org/std/fs/fn.write.html
6306 [`hash_map::Entry::and_modify`]: https://doc.rust-lang.org/std/collections/hash_map/enum.Entry.html#method.and_modify
6307 [`iter::FusedIterator`]: https://doc.rust-lang.org/std/iter/trait.FusedIterator.html
6308 [`ops::RangeInclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html
6309 [`ops::RangeToInclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeToInclusive.html
6310 [`process::id`]: https://doc.rust-lang.org/std/process/fn.id.html
6311 [`slice::rotate_left`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_left
6312 [`slice::rotate_right`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_right
6313 [`String::retain`]: https://doc.rust-lang.org/std/string/struct.String.html#method.retain
6314 [cargo/5041]: https://github.com/rust-lang/cargo/pull/5041
6315 [cargo/5083]: https://github.com/rust-lang/cargo/pull/5083
6316
6317
6318 Version 1.25.0 (2018-03-29)
6319 ==========================
6320
6321 Language
6322 --------
6323 - [The `#[repr(align(x))]` attribute is now stable.][47006] [RFC 1358]
6324 - [You can now use nested groups of imports.][47948]
6325 e.g. `use std::{fs::File, io::Read, path::{Path, PathBuf}};`
6326 - [You can now have `|` at the start of a match arm.][47947] e.g.
6327 ```rust
6328 enum Foo { A, B, C }
6329
6330 fn main() {
6331 let x = Foo::A;
6332 match x {
6333 | Foo::A
6334 | Foo::B => println!("AB"),
6335 | Foo::C => println!("C"),
6336 }
6337 }
6338 ```
6339
6340 Compiler
6341 --------
6342 - [Upgraded to LLVM 6.][47828]
6343 - [Added `-C lto=val` option.][47521]
6344 - [Added `i586-unknown-linux-musl` target][47282]
6345
6346 Libraries
6347 ---------
6348 - [Impl Send for `process::Command` on Unix.][47760]
6349 - [Impl PartialEq and Eq for `ParseCharError`.][47790]
6350 - [`UnsafeCell::into_inner` is now safe.][47204]
6351 - [Implement libstd for CloudABI.][47268]
6352 - [`Float::{from_bits, to_bits}` is now available in libcore.][46931]
6353 - [Implement `AsRef<Path>` for Component][46985]
6354 - [Implemented `Write` for `Cursor<&mut Vec<u8>>`][46830]
6355 - [Moved `Duration` to libcore.][46666]
6356
6357 Stabilized APIs
6358 ---------------
6359 - [`Location::column`]
6360 - [`ptr::NonNull`]
6361
6362 The following functions can now be used in a constant expression.
6363 eg. `static MINUTE: Duration = Duration::from_secs(60);`
6364 - [`Duration::new`][47300]
6365 - [`Duration::from_secs`][47300]
6366 - [`Duration::from_millis`][47300]
6367
6368 Cargo
6369 -----
6370 - [`cargo new` no longer removes `rust` or `rs` prefixs/suffixs.][cargo/5013]
6371 - [`cargo new` now defaults to creating a binary crate, instead of a
6372 library crate.][cargo/5029]
6373
6374 Misc
6375 ----
6376 - [Rust by example is now shipped with new releases][46196]
6377
6378 Compatibility Notes
6379 -------------------
6380 - [Deprecated `net::lookup_host`.][47510]
6381 - [`rustdoc` has switched to pulldown as the default markdown renderer.][47398]
6382 - The borrow checker was sometimes incorrectly permitting overlapping borrows
6383 around indexing operations (see [#47349][47349]). This has been fixed (which also
6384 enabled some correct code that used to cause errors (e.g. [#33903][33903] and [#46095][46095]).
6385 - [Removed deprecated unstable attribute `#[simd]`.][47251]
6386
6387 [33903]: https://github.com/rust-lang/rust/pull/33903
6388 [47947]: https://github.com/rust-lang/rust/pull/47947
6389 [47948]: https://github.com/rust-lang/rust/pull/47948
6390 [47760]: https://github.com/rust-lang/rust/pull/47760
6391 [47790]: https://github.com/rust-lang/rust/pull/47790
6392 [47828]: https://github.com/rust-lang/rust/pull/47828
6393 [47398]: https://github.com/rust-lang/rust/pull/47398
6394 [47510]: https://github.com/rust-lang/rust/pull/47510
6395 [47521]: https://github.com/rust-lang/rust/pull/47521
6396 [47204]: https://github.com/rust-lang/rust/pull/47204
6397 [47251]: https://github.com/rust-lang/rust/pull/47251
6398 [47268]: https://github.com/rust-lang/rust/pull/47268
6399 [47282]: https://github.com/rust-lang/rust/pull/47282
6400 [47300]: https://github.com/rust-lang/rust/pull/47300
6401 [47349]: https://github.com/rust-lang/rust/pull/47349
6402 [46931]: https://github.com/rust-lang/rust/pull/46931
6403 [46985]: https://github.com/rust-lang/rust/pull/46985
6404 [47006]: https://github.com/rust-lang/rust/pull/47006
6405 [46830]: https://github.com/rust-lang/rust/pull/46830
6406 [46095]: https://github.com/rust-lang/rust/pull/46095
6407 [46666]: https://github.com/rust-lang/rust/pull/46666
6408 [46196]: https://github.com/rust-lang/rust/pull/46196
6409 [cargo/5013]: https://github.com/rust-lang/cargo/pull/5013
6410 [cargo/5029]: https://github.com/rust-lang/cargo/pull/5029
6411 [RFC 1358]: https://github.com/rust-lang/rfcs/pull/1358
6412 [`Location::column`]: https://doc.rust-lang.org/std/panic/struct.Location.html#method.column
6413 [`ptr::NonNull`]: https://doc.rust-lang.org/std/ptr/struct.NonNull.html
6414
6415
6416 Version 1.24.1 (2018-03-01)
6417 ==========================
6418
6419 - [Do not abort when unwinding through FFI][48251]
6420 - [Emit UTF-16 files for linker arguments on Windows][48318]
6421 - [Make the error index generator work again][48308]
6422 - [Cargo will warn on Windows 7 if an update is needed][cargo/5069].
6423
6424 [48251]: https://github.com/rust-lang/rust/issues/48251
6425 [48308]: https://github.com/rust-lang/rust/issues/48308
6426 [48318]: https://github.com/rust-lang/rust/issues/48318
6427 [cargo/5069]: https://github.com/rust-lang/cargo/pull/5069
6428
6429
6430 Version 1.24.0 (2018-02-15)
6431 ==========================
6432
6433 Language
6434 --------
6435 - [External `sysv64` ffi is now available.][46528]
6436 eg. `extern "sysv64" fn foo () {}`
6437
6438 Compiler
6439 --------
6440 - [rustc now uses 16 codegen units by default for release builds.][46910]
6441 For the fastest builds, utilize `codegen-units=1`.
6442 - [Added `armv4t-unknown-linux-gnueabi` target.][47018]
6443 - [Add `aarch64-unknown-openbsd` support][46760]
6444
6445 Libraries
6446 ---------
6447 - [`str::find::<char>` now uses memchr.][46735] This should lead to a 10x
6448 improvement in performance in the majority of cases.
6449 - [`OsStr`'s `Debug` implementation is now lossless and consistent
6450 with Windows.][46798]
6451 - [`time::{SystemTime, Instant}` now implement `Hash`.][46828]
6452 - [impl `From<bool>` for `AtomicBool`][46293]
6453 - [impl `From<{CString, &CStr}>` for `{Arc<CStr>, Rc<CStr>}`][45990]
6454 - [impl `From<{OsString, &OsStr}>` for `{Arc<OsStr>, Rc<OsStr>}`][45990]
6455 - [impl `From<{PathBuf, &Path}>` for `{Arc<Path>, Rc<Path>}`][45990]
6456 - [float::from_bits now just uses transmute.][46012] This provides
6457 some optimisations from LLVM.
6458 - [Copied `AsciiExt` methods onto `char`][46077]
6459 - [Remove `T: Sized` requirement on `ptr::is_null()`][46094]
6460 - [impl `From<RecvError>` for `{TryRecvError, RecvTimeoutError}`][45506]
6461 - [Optimised `f32::{min, max}` to generate more efficient x86 assembly][47080]
6462 - [`[u8]::contains` now uses memchr which provides a 3x speed improvement][46713]
6463
6464 Stabilized APIs
6465 ---------------
6466 - [`RefCell::replace`]
6467 - [`RefCell::swap`]
6468 - [`atomic::spin_loop_hint`]
6469
6470 The following functions can now be used in a constant expression.
6471 eg. `let buffer: [u8; size_of::<usize>()];`, `static COUNTER: AtomicUsize = AtomicUsize::new(1);`
6472
6473 - [`AtomicBool::new`][46287]
6474 - [`AtomicUsize::new`][46287]
6475 - [`AtomicIsize::new`][46287]
6476 - [`AtomicPtr::new`][46287]
6477 - [`Cell::new`][46287]
6478 - [`{integer}::min_value`][46287]
6479 - [`{integer}::max_value`][46287]
6480 - [`mem::size_of`][46287]
6481 - [`mem::align_of`][46287]
6482 - [`ptr::null`][46287]
6483 - [`ptr::null_mut`][46287]
6484 - [`RefCell::new`][46287]
6485 - [`UnsafeCell::new`][46287]
6486
6487 Cargo
6488 -----
6489 - [Added a `workspace.default-members` config that
6490 overrides implied `--all` in virtual workspaces.][cargo/4743]
6491 - [Enable incremental by default on development builds.][cargo/4817] Also added
6492 configuration keys to `Cargo.toml` and `.cargo/config` to disable on a
6493 per-project or global basis respectively.
6494
6495 Misc
6496 ----
6497
6498 Compatibility Notes
6499 -------------------
6500 - [Floating point types `Debug` impl now always prints a decimal point.][46831]
6501 - [`Ipv6Addr` now rejects superfluous `::`'s in IPv6 addresses][46671] This is
6502 in accordance with IETF RFC 4291 §2.2.
6503 - [Unwinding will no longer go past FFI boundaries, and will instead abort.][46833]
6504 - [`Formatter::flags` method is now deprecated.][46284] The `sign_plus`,
6505 `sign_minus`, `alternate`, and `sign_aware_zero_pad` should be used instead.
6506 - [Leading zeros in tuple struct members is now an error][47084]
6507 - [`column!()` macro is one-based instead of zero-based][46977]
6508 - [`fmt::Arguments` can no longer be shared across threads][45198]
6509 - [Access to `#[repr(packed)]` struct fields is now unsafe][44884]
6510 - [Cargo sets a different working directory for the compiler][cargo/4788]
6511
6512 [44884]: https://github.com/rust-lang/rust/pull/44884
6513 [45198]: https://github.com/rust-lang/rust/pull/45198
6514 [45506]: https://github.com/rust-lang/rust/pull/45506
6515 [45990]: https://github.com/rust-lang/rust/pull/45990
6516 [46012]: https://github.com/rust-lang/rust/pull/46012
6517 [46077]: https://github.com/rust-lang/rust/pull/46077
6518 [46094]: https://github.com/rust-lang/rust/pull/46094
6519 [46284]: https://github.com/rust-lang/rust/pull/46284
6520 [46287]: https://github.com/rust-lang/rust/pull/46287
6521 [46293]: https://github.com/rust-lang/rust/pull/46293
6522 [46528]: https://github.com/rust-lang/rust/pull/46528
6523 [46671]: https://github.com/rust-lang/rust/pull/46671
6524 [46713]: https://github.com/rust-lang/rust/pull/46713
6525 [46735]: https://github.com/rust-lang/rust/pull/46735
6526 [46760]: https://github.com/rust-lang/rust/pull/46760
6527 [46798]: https://github.com/rust-lang/rust/pull/46798
6528 [46828]: https://github.com/rust-lang/rust/pull/46828
6529 [46831]: https://github.com/rust-lang/rust/pull/46831
6530 [46833]: https://github.com/rust-lang/rust/pull/46833
6531 [46910]: https://github.com/rust-lang/rust/pull/46910
6532 [46977]: https://github.com/rust-lang/rust/pull/46977
6533 [47018]: https://github.com/rust-lang/rust/pull/47018
6534 [47080]: https://github.com/rust-lang/rust/pull/47080
6535 [47084]: https://github.com/rust-lang/rust/pull/47084
6536 [cargo/4743]: https://github.com/rust-lang/cargo/pull/4743
6537 [cargo/4788]: https://github.com/rust-lang/cargo/pull/4788
6538 [cargo/4817]: https://github.com/rust-lang/cargo/pull/4817
6539 [`RefCell::replace`]: https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.replace
6540 [`RefCell::swap`]: https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.swap
6541 [`atomic::spin_loop_hint`]: https://doc.rust-lang.org/std/sync/atomic/fn.spin_loop_hint.html
6542
6543
6544 Version 1.23.0 (2018-01-04)
6545 ==========================
6546
6547 Language
6548 --------
6549 - [Arbitrary `auto` traits are now permitted in trait objects.][45772]
6550 - [rustc now uses subtyping on the left hand side of binary operations.][45435]
6551 Which should fix some confusing errors in some operations.
6552
6553 Compiler
6554 --------
6555 - [Enabled `TrapUnreachable` in LLVM which should mitigate the impact of
6556 undefined behavior.][45920]
6557 - [rustc now suggests renaming import if names clash.][45660]
6558 - [Display errors/warnings correctly when there are zero-width or
6559 wide characters.][45711]
6560 - [rustc now avoids unnecessary copies of arguments that are
6561 simple bindings][45380] This should improve memory usage on average by 5-10%.
6562 - [Updated musl used to build musl rustc to 1.1.17][45393]
6563
6564 Libraries
6565 ---------
6566 - [Allow a trailing comma in `assert_eq/ne` macro][45887]
6567 - [Implement Hash for raw pointers to unsized types][45483]
6568 - [impl `From<*mut T>` for `AtomicPtr<T>`][45610]
6569 - [impl `From<usize/isize>` for `AtomicUsize/AtomicIsize`.][45610]
6570 - [Removed the `T: Sync` requirement for `RwLock<T>: Send`][45267]
6571 - [Removed `T: Sized` requirement for `{<*const T>, <*mut T>}::as_ref`
6572 and `<*mut T>::as_mut`][44932]
6573 - [Optimized `Thread::{park, unpark}` implementation][45524]
6574 - [Improved `SliceExt::binary_search` performance.][45333]
6575 - [impl `FromIterator<()>` for `()`][45379]
6576 - [Copied `AsciiExt` trait methods to primitive types.][44042] Use of `AsciiExt`
6577 is now deprecated.
6578
6579 Stabilized APIs
6580 ---------------
6581
6582 Cargo
6583 -----
6584 - [Cargo now supports uninstallation of multiple packages][cargo/4561]
6585 eg. `cargo uninstall foo bar` uninstalls `foo` and `bar`.
6586 - [Added unit test checking to `cargo check`][cargo/4592]
6587 - [Cargo now lets you install a specific version
6588 using `cargo install --version`][cargo/4637]
6589
6590 Misc
6591 ----
6592 - [Releases now ship with the Cargo book documentation.][45692]
6593 - [rustdoc now prints rendering warnings on every run.][45324]
6594
6595 Compatibility Notes
6596 -------------------
6597 - [Changes have been made to type equality to make it more correct,
6598 in rare cases this could break some code.][45853] [Tracking issue for
6599 further information][45852]
6600 - [`char::escape_debug` now uses Unicode 10 over 9.][45571]
6601 - [Upgraded Android SDK to 27, and NDK to r15c.][45580] This drops support for
6602 Android 9, the minimum supported version is Android 14.
6603 - [Bumped the minimum LLVM to 3.9][45326]
6604
6605 [44042]: https://github.com/rust-lang/rust/pull/44042
6606 [44932]: https://github.com/rust-lang/rust/pull/44932
6607 [45267]: https://github.com/rust-lang/rust/pull/45267
6608 [45324]: https://github.com/rust-lang/rust/pull/45324
6609 [45326]: https://github.com/rust-lang/rust/pull/45326
6610 [45333]: https://github.com/rust-lang/rust/pull/45333
6611 [45379]: https://github.com/rust-lang/rust/pull/45379
6612 [45380]: https://github.com/rust-lang/rust/pull/45380
6613 [45393]: https://github.com/rust-lang/rust/pull/45393
6614 [45435]: https://github.com/rust-lang/rust/pull/45435
6615 [45483]: https://github.com/rust-lang/rust/pull/45483
6616 [45524]: https://github.com/rust-lang/rust/pull/45524
6617 [45571]: https://github.com/rust-lang/rust/pull/45571
6618 [45580]: https://github.com/rust-lang/rust/pull/45580
6619 [45610]: https://github.com/rust-lang/rust/pull/45610
6620 [45660]: https://github.com/rust-lang/rust/pull/45660
6621 [45692]: https://github.com/rust-lang/rust/pull/45692
6622 [45711]: https://github.com/rust-lang/rust/pull/45711
6623 [45772]: https://github.com/rust-lang/rust/pull/45772
6624 [45852]: https://github.com/rust-lang/rust/issues/45852
6625 [45853]: https://github.com/rust-lang/rust/pull/45853
6626 [45887]: https://github.com/rust-lang/rust/pull/45887
6627 [45920]: https://github.com/rust-lang/rust/pull/45920
6628 [cargo/4561]: https://github.com/rust-lang/cargo/pull/4561
6629 [cargo/4592]: https://github.com/rust-lang/cargo/pull/4592
6630 [cargo/4637]: https://github.com/rust-lang/cargo/pull/4637
6631
6632
6633 Version 1.22.1 (2017-11-22)
6634 ==========================
6635
6636 - [Update Cargo to fix an issue with macOS 10.13 "High Sierra"][46183]
6637
6638 [46183]: https://github.com/rust-lang/rust/pull/46183
6639
6640 Version 1.22.0 (2017-11-22)
6641 ==========================
6642
6643 Language
6644 --------
6645 - [`non_snake_case` lint now allows extern no-mangle functions][44966]
6646 - [Now accepts underscores in unicode escapes][43716]
6647 - [`T op= &T` now works for numeric types.][44287] eg. `let mut x = 2; x += &8;`
6648 - [types that impl `Drop` are now allowed in `const` and `static` types][44456]
6649
6650 Compiler
6651 --------
6652 - [rustc now defaults to having 16 codegen units at debug on supported platforms.][45064]
6653 - [rustc will no longer inline in codegen units when compiling for debug][45075]
6654 This should decrease compile times for debug builds.
6655 - [strict memory alignment now enabled on ARMv6][45094]
6656 - [Remove support for the PNaCl target `le32-unknown-nacl`][45041]
6657
6658 Libraries
6659 ---------
6660 - [Allow atomic operations up to 32 bits
6661 on `armv5te_unknown_linux_gnueabi`][44978]
6662 - [`Box<Error>` now impls `From<Cow<str>>`][44466]
6663 - [`std::mem::Discriminant` is now guaranteed to be `Send + Sync`][45095]
6664 - [`fs::copy` now returns the length of the main stream on NTFS.][44895]
6665 - [Properly detect overflow in `Instant += Duration`.][44220]
6666 - [impl `Hasher` for `{&mut Hasher, Box<Hasher>}`][44015]
6667 - [impl `fmt::Debug` for `SplitWhitespace`.][44303]
6668 - [`Option<T>` now impls `Try`][42526] This allows for using `?` with `Option` types.
6669
6670 Stabilized APIs
6671 ---------------
6672
6673 Cargo
6674 -----
6675 - [Cargo will now build multi file examples in subdirectories of the `examples`
6676 folder that have a `main.rs` file.][cargo/4496]
6677 - [Changed `[root]` to `[package]` in `Cargo.lock`][cargo/4571] Packages with
6678 the old format will continue to work and can be updated with `cargo update`.
6679 - [Now supports vendoring git repositories][cargo/3992]
6680
6681 Misc
6682 ----
6683 - [`libbacktrace` is now available on Apple platforms.][44251]
6684 - [Stabilised the `compile_fail` attribute for code fences in doc-comments.][43949]
6685 This now lets you specify that a given code example will fail to compile.
6686
6687 Compatibility Notes
6688 -------------------
6689 - [The minimum Android version that rustc can build for has been bumped
6690 to `4.0` from `2.3`][45656]
6691 - [Allowing `T op= &T` for numeric types has broken some type
6692 inference cases][45480]
6693
6694
6695 [42526]: https://github.com/rust-lang/rust/pull/42526
6696 [43716]: https://github.com/rust-lang/rust/pull/43716
6697 [43949]: https://github.com/rust-lang/rust/pull/43949
6698 [44015]: https://github.com/rust-lang/rust/pull/44015
6699 [44220]: https://github.com/rust-lang/rust/pull/44220
6700 [44251]: https://github.com/rust-lang/rust/pull/44251
6701 [44287]: https://github.com/rust-lang/rust/pull/44287
6702 [44303]: https://github.com/rust-lang/rust/pull/44303
6703 [44456]: https://github.com/rust-lang/rust/pull/44456
6704 [44466]: https://github.com/rust-lang/rust/pull/44466
6705 [44895]: https://github.com/rust-lang/rust/pull/44895
6706 [44966]: https://github.com/rust-lang/rust/pull/44966
6707 [44978]: https://github.com/rust-lang/rust/pull/44978
6708 [45041]: https://github.com/rust-lang/rust/pull/45041
6709 [45064]: https://github.com/rust-lang/rust/pull/45064
6710 [45075]: https://github.com/rust-lang/rust/pull/45075
6711 [45094]: https://github.com/rust-lang/rust/pull/45094
6712 [45095]: https://github.com/rust-lang/rust/pull/45095
6713 [45480]: https://github.com/rust-lang/rust/issues/45480
6714 [45656]: https://github.com/rust-lang/rust/pull/45656
6715 [cargo/3992]: https://github.com/rust-lang/cargo/pull/3992
6716 [cargo/4496]: https://github.com/rust-lang/cargo/pull/4496
6717 [cargo/4571]: https://github.com/rust-lang/cargo/pull/4571
6718
6719
6720
6721
6722
6723
6724 Version 1.21.0 (2017-10-12)
6725 ==========================
6726
6727 Language
6728 --------
6729 - [You can now use static references for literals.][43838]
6730 Example:
6731 ```rust
6732 fn main() {
6733 let x: &'static u32 = &0;
6734 }
6735 ```
6736 - [Relaxed path syntax. Optional `::` before `<` is now allowed in all contexts.][43540]
6737 Example:
6738 ```rust
6739 my_macro!(Vec<i32>::new); // Always worked
6740 my_macro!(Vec::<i32>::new); // Now works
6741 ```
6742
6743 Compiler
6744 --------
6745 - [Upgraded jemalloc to 4.5.0][43911]
6746 - [Enabled unwinding panics on Redox][43917]
6747 - [Now runs LLVM in parallel during translation phase.][43506]
6748 This should reduce peak memory usage.
6749
6750 Libraries
6751 ---------
6752 - [Generate builtin impls for `Clone` for all arrays and tuples that
6753 are `T: Clone`][43690]
6754 - [`Stdin`, `Stdout`, and `Stderr` now implement `AsRawFd`.][43459]
6755 - [`Rc` and `Arc` now implement `From<&[T]> where T: Clone`, `From<str>`,
6756 `From<String>`, `From<Box<T>> where T: ?Sized`, and `From<Vec<T>>`.][42565]
6757
6758 Stabilized APIs
6759 ---------------
6760
6761 [`std::mem::discriminant`]
6762
6763 Cargo
6764 -----
6765 - [You can now call `cargo install` with multiple package names][cargo/4216]
6766 - [Cargo commands inside a virtual workspace will now implicitly
6767 pass `--all`][cargo/4335]
6768 - [Added a `[patch]` section to `Cargo.toml` to handle
6769 prepublication dependencies][cargo/4123] [RFC 1969]
6770 - [`include` & `exclude` fields in `Cargo.toml` now accept gitignore
6771 like patterns][cargo/4270]
6772 - [Added the `--all-targets` option][cargo/4400]
6773 - [Using required dependencies as a feature is now deprecated and emits
6774 a warning][cargo/4364]
6775
6776
6777 Misc
6778 ----
6779 - [Cargo docs are moving][43916]
6780 to [doc.rust-lang.org/cargo](https://doc.rust-lang.org/cargo)
6781 - [The rustdoc book is now available][43863]
6782 at [doc.rust-lang.org/rustdoc](https://doc.rust-lang.org/rustdoc)
6783 - [Added a preview of RLS has been made available through rustup][44204]
6784 Install with `rustup component add rls-preview`
6785 - [`std::os` documentation for Unix, Linux, and Windows now appears on doc.rust-lang.org][43348]
6786 Previously only showed `std::os::unix`.
6787
6788 Compatibility Notes
6789 -------------------
6790 - [Changes in method matching against higher-ranked types][43880] This may cause
6791 breakage in subtyping corner cases. [A more in-depth explanation is available.][info/43880]
6792 - [rustc's JSON error output's byte position start at top of file.][42973]
6793 Was previously relative to the rustc's internal `CodeMap` struct which
6794 required the unstable library `libsyntax` to correctly use.
6795 - [`unused_results` lint no longer ignores booleans][43728]
6796
6797 [42565]: https://github.com/rust-lang/rust/pull/42565
6798 [42973]: https://github.com/rust-lang/rust/pull/42973
6799 [43348]: https://github.com/rust-lang/rust/pull/43348
6800 [43459]: https://github.com/rust-lang/rust/pull/43459
6801 [43506]: https://github.com/rust-lang/rust/pull/43506
6802 [43540]: https://github.com/rust-lang/rust/pull/43540
6803 [43690]: https://github.com/rust-lang/rust/pull/43690
6804 [43728]: https://github.com/rust-lang/rust/pull/43728
6805 [43838]: https://github.com/rust-lang/rust/pull/43838
6806 [43863]: https://github.com/rust-lang/rust/pull/43863
6807 [43880]: https://github.com/rust-lang/rust/pull/43880
6808 [43911]: https://github.com/rust-lang/rust/pull/43911
6809 [43916]: https://github.com/rust-lang/rust/pull/43916
6810 [43917]: https://github.com/rust-lang/rust/pull/43917
6811 [44204]: https://github.com/rust-lang/rust/pull/44204
6812 [cargo/4123]: https://github.com/rust-lang/cargo/pull/4123
6813 [cargo/4216]: https://github.com/rust-lang/cargo/pull/4216
6814 [cargo/4270]: https://github.com/rust-lang/cargo/pull/4270
6815 [cargo/4335]: https://github.com/rust-lang/cargo/pull/4335
6816 [cargo/4364]: https://github.com/rust-lang/cargo/pull/4364
6817 [cargo/4400]: https://github.com/rust-lang/cargo/pull/4400
6818 [RFC 1969]: https://github.com/rust-lang/rfcs/pull/1969
6819 [info/43880]: https://github.com/rust-lang/rust/issues/44224#issuecomment-330058902
6820 [`std::mem::discriminant`]: https://doc.rust-lang.org/std/mem/fn.discriminant.html
6821
6822 Version 1.20.0 (2017-08-31)
6823 ===========================
6824
6825 Language
6826 --------
6827 - [Associated constants are now stabilised.][42809]
6828 - [A lot of macro bugs are now fixed.][42913]
6829
6830 Compiler
6831 --------
6832
6833 - [Struct fields are now properly coerced to the expected field type.][42807]
6834 - [Enabled wasm LLVM backend][42571] WASM can now be built with the
6835 `wasm32-experimental-emscripten` target.
6836 - [Changed some of the error messages to be more helpful.][42033]
6837 - [Add support for RELRO(RELocation Read-Only) for platforms that support
6838 it.][43170]
6839 - [rustc now reports the total number of errors on compilation failure][43015]
6840 previously this was only the number of errors in the pass that failed.
6841 - [Expansion in rustc has been sped up 29x.][42533]
6842 - [added `msp430-none-elf` target.][43099]
6843 - [rustc will now suggest one-argument enum variant to fix type mismatch when
6844 applicable][43178]
6845 - [Fixes backtraces on Redox][43228]
6846 - [rustc now identifies different versions of same crate when absolute paths of
6847 different types match in an error message.][42826]
6848
6849 Libraries
6850 ---------
6851
6852
6853 - [Relaxed Debug constraints on `{HashMap,BTreeMap}::{Keys,Values}`.][42854]
6854 - [Impl `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Debug`, `Hash` for unsized
6855 tuples.][43011]
6856 - [Impl `fmt::{Display, Debug}` for `Ref`, `RefMut`, `MutexGuard`,
6857 `RwLockReadGuard`, `RwLockWriteGuard`][42822]
6858 - [Impl `Clone` for `DefaultHasher`.][42799]
6859 - [Impl `Sync` for `SyncSender`.][42397]
6860 - [Impl `FromStr` for `char`][42271]
6861 - [Fixed how `{f32, f64}::{is_sign_negative, is_sign_positive}` handles
6862 NaN.][42431]
6863 - [allow messages in the `unimplemented!()` macro.][42155]
6864 ie. `unimplemented!("Waiting for 1.21 to be stable")`
6865 - [`pub(restricted)` is now supported in the `thread_local!` macro.][43185]
6866 - [Upgrade to Unicode 10.0.0][42999]
6867 - [Reimplemented `{f32, f64}::{min, max}` in Rust instead of using CMath.][42430]
6868 - [Skip the main thread's manual stack guard on Linux][43072]
6869 - [Iterator::nth for `ops::{Range, RangeFrom}` is now done in *O*(1) time][43077]
6870 - [`#[repr(align(N))]` attribute max number is now 2^31 - 1.][43097] This was
6871 previously 2^15.
6872 - [`{OsStr, Path}::Display` now avoids allocations where possible][42613]
6873
6874 Stabilized APIs
6875 ---------------
6876
6877 - [`CStr::into_c_string`]
6878 - [`CString::as_c_str`]
6879 - [`CString::into_boxed_c_str`]
6880 - [`Chain::get_mut`]
6881 - [`Chain::get_ref`]
6882 - [`Chain::into_inner`]
6883 - [`Option::get_or_insert_with`]
6884 - [`Option::get_or_insert`]
6885 - [`OsStr::into_os_string`]
6886 - [`OsString::into_boxed_os_str`]
6887 - [`Take::get_mut`]
6888 - [`Take::get_ref`]
6889 - [`Utf8Error::error_len`]
6890 - [`char::EscapeDebug`]
6891 - [`char::escape_debug`]
6892 - [`compile_error!`]
6893 - [`f32::from_bits`]
6894 - [`f32::to_bits`]
6895 - [`f64::from_bits`]
6896 - [`f64::to_bits`]
6897 - [`mem::ManuallyDrop`]
6898 - [`slice::sort_unstable_by_key`]
6899 - [`slice::sort_unstable_by`]
6900 - [`slice::sort_unstable`]
6901 - [`str::from_boxed_utf8_unchecked`]
6902 - [`str::as_bytes_mut`]
6903 - [`str::as_bytes_mut`]
6904 - [`str::from_utf8_mut`]
6905 - [`str::from_utf8_unchecked_mut`]
6906 - [`str::get_mut`]
6907 - [`str::get_unchecked_mut`]
6908 - [`str::get_unchecked`]
6909 - [`str::get`]
6910 - [`str::into_boxed_bytes`]
6911
6912
6913 Cargo
6914 -----
6915 - [Cargo API token location moved from `~/.cargo/config` to
6916 `~/.cargo/credentials`.][cargo/3978]
6917 - [Cargo will now build `main.rs` binaries that are in sub-directories of
6918 `src/bin`.][cargo/4214] ie. Having `src/bin/server/main.rs` and
6919 `src/bin/client/main.rs` generates `target/debug/server` and `target/debug/client`
6920 - [You can now specify version of a binary when installed through
6921 `cargo install` using `--vers`.][cargo/4229]
6922 - [Added `--no-fail-fast` flag to cargo to run all benchmarks regardless of
6923 failure.][cargo/4248]
6924 - [Changed the convention around which file is the crate root.][cargo/4259]
6925
6926 Compatibility Notes
6927 -------------------
6928
6929 - [Functions with `'static` in their return types will now not be as usable as
6930 if they were using lifetime parameters instead.][42417]
6931 - [The reimplementation of `{f32, f64}::is_sign_{negative, positive}` now
6932 takes the sign of NaN into account where previously didn't.][42430]
6933
6934 [42033]: https://github.com/rust-lang/rust/pull/42033
6935 [42155]: https://github.com/rust-lang/rust/pull/42155
6936 [42271]: https://github.com/rust-lang/rust/pull/42271
6937 [42397]: https://github.com/rust-lang/rust/pull/42397
6938 [42417]: https://github.com/rust-lang/rust/pull/42417
6939 [42430]: https://github.com/rust-lang/rust/pull/42430
6940 [42431]: https://github.com/rust-lang/rust/pull/42431
6941 [42533]: https://github.com/rust-lang/rust/pull/42533
6942 [42571]: https://github.com/rust-lang/rust/pull/42571
6943 [42613]: https://github.com/rust-lang/rust/pull/42613
6944 [42799]: https://github.com/rust-lang/rust/pull/42799
6945 [42807]: https://github.com/rust-lang/rust/pull/42807
6946 [42809]: https://github.com/rust-lang/rust/pull/42809
6947 [42822]: https://github.com/rust-lang/rust/pull/42822
6948 [42826]: https://github.com/rust-lang/rust/pull/42826
6949 [42854]: https://github.com/rust-lang/rust/pull/42854
6950 [42913]: https://github.com/rust-lang/rust/pull/42913
6951 [42999]: https://github.com/rust-lang/rust/pull/42999
6952 [43011]: https://github.com/rust-lang/rust/pull/43011
6953 [43015]: https://github.com/rust-lang/rust/pull/43015
6954 [43072]: https://github.com/rust-lang/rust/pull/43072
6955 [43077]: https://github.com/rust-lang/rust/pull/43077
6956 [43097]: https://github.com/rust-lang/rust/pull/43097
6957 [43099]: https://github.com/rust-lang/rust/pull/43099
6958 [43170]: https://github.com/rust-lang/rust/pull/43170
6959 [43178]: https://github.com/rust-lang/rust/pull/43178
6960 [43185]: https://github.com/rust-lang/rust/pull/43185
6961 [43228]: https://github.com/rust-lang/rust/pull/43228
6962 [cargo/3978]: https://github.com/rust-lang/cargo/pull/3978
6963 [cargo/4214]: https://github.com/rust-lang/cargo/pull/4214
6964 [cargo/4229]: https://github.com/rust-lang/cargo/pull/4229
6965 [cargo/4248]: https://github.com/rust-lang/cargo/pull/4248
6966 [cargo/4259]: https://github.com/rust-lang/cargo/pull/4259
6967 [`CStr::into_c_string`]: https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.into_c_string
6968 [`CString::as_c_str`]: https://doc.rust-lang.org/std/ffi/struct.CString.html#method.as_c_str
6969 [`CString::into_boxed_c_str`]: https://doc.rust-lang.org/std/ffi/struct.CString.html#method.into_boxed_c_str
6970 [`Chain::get_mut`]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.get_mut
6971 [`Chain::get_ref`]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.get_ref
6972 [`Chain::into_inner`]: https://doc.rust-lang.org/std/io/struct.Chain.html#method.into_inner
6973 [`Option::get_or_insert_with`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.get_or_insert_with
6974 [`Option::get_or_insert`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.get_or_insert
6975 [`OsStr::into_os_string`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.into_os_string
6976 [`OsString::into_boxed_os_str`]: https://doc.rust-lang.org/std/ffi/struct.OsString.html#method.into_boxed_os_str
6977 [`Take::get_mut`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.get_mut
6978 [`Take::get_ref`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.get_ref
6979 [`Utf8Error::error_len`]: https://doc.rust-lang.org/std/str/struct.Utf8Error.html#method.error_len
6980 [`char::EscapeDebug`]: https://doc.rust-lang.org/std/char/struct.EscapeDebug.html
6981 [`char::escape_debug`]: https://doc.rust-lang.org/std/primitive.char.html#method.escape_debug
6982 [`compile_error!`]: https://doc.rust-lang.org/std/macro.compile_error.html
6983 [`f32::from_bits`]: https://doc.rust-lang.org/std/primitive.f32.html#method.from_bits
6984 [`f32::to_bits`]: https://doc.rust-lang.org/std/primitive.f32.html#method.to_bits
6985 [`f64::from_bits`]: https://doc.rust-lang.org/std/primitive.f64.html#method.from_bits
6986 [`f64::to_bits`]: https://doc.rust-lang.org/std/primitive.f64.html#method.to_bits
6987 [`mem::ManuallyDrop`]: https://doc.rust-lang.org/std/mem/union.ManuallyDrop.html
6988 [`slice::sort_unstable_by_key`]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable_by_key
6989 [`slice::sort_unstable_by`]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable_by
6990 [`slice::sort_unstable`]: https://doc.rust-lang.org/std/primitive.slice.html#method.sort_unstable
6991 [`str::from_boxed_utf8_unchecked`]: https://doc.rust-lang.org/std/str/fn.from_boxed_utf8_unchecked.html
6992 [`str::as_bytes_mut`]: https://doc.rust-lang.org/std/primitive.str.html#method.as_bytes_mut
6993 [`str::from_utf8_mut`]: https://doc.rust-lang.org/std/str/fn.from_utf8_mut.html
6994 [`str::from_utf8_unchecked_mut`]: https://doc.rust-lang.org/std/str/fn.from_utf8_unchecked_mut.html
6995 [`str::get_mut`]: https://doc.rust-lang.org/std/primitive.str.html#method.get_mut
6996 [`str::get_unchecked_mut`]: https://doc.rust-lang.org/std/primitive.str.html#method.get_unchecked_mut
6997 [`str::get_unchecked`]: https://doc.rust-lang.org/std/primitive.str.html#method.get_unchecked
6998 [`str::get`]: https://doc.rust-lang.org/std/primitive.str.html#method.get
6999 [`str::into_boxed_bytes`]: https://doc.rust-lang.org/std/primitive.str.html#method.into_boxed_bytes
7000
7001
7002 Version 1.19.0 (2017-07-20)
7003 ===========================
7004
7005 Language
7006 --------
7007
7008 - [Numeric fields can now be used for creating tuple structs.][41145] [RFC 1506]
7009 For example `struct Point(u32, u32); let x = Point { 0: 7, 1: 0 };`.
7010 - [Macro recursion limit increased to 1024 from 64.][41676]
7011 - [Added lint for detecting unused macros.][41907]
7012 - [`loop` can now return a value with `break`.][42016] [RFC 1624]
7013 For example: `let x = loop { break 7; };`
7014 - [C compatible `union`s are now available.][42068] [RFC 1444] They can only
7015 contain `Copy` types and cannot have a `Drop` implementation.
7016 Example: `union Foo { bar: u8, baz: usize }`
7017 - [Non capturing closures can now be coerced into `fn`s,][42162] [RFC 1558]
7018 Example: `let foo: fn(u8) -> u8 = |v: u8| { v };`
7019
7020 Compiler
7021 --------
7022
7023 - [Add support for bootstrapping the Rust compiler toolchain on Android.][41370]
7024 - [Change `arm-linux-androideabi` to correspond to the `armeabi`
7025 official ABI.][41656] If you wish to continue targeting the `armeabi-v7a` ABI
7026 you should use `--target armv7-linux-androideabi`.
7027 - [Fixed ICE when removing a source file between compilation sessions.][41873]
7028 - [Minor optimisation of string operations.][42037]
7029 - [Compiler error message is now `aborting due to previous error(s)` instead of
7030 `aborting due to N previous errors`][42150] This was previously inaccurate and
7031 would only count certain kinds of errors.
7032 - [The compiler now supports Visual Studio 2017][42225]
7033 - [The compiler is now built against LLVM 4.0.1 by default][42948]
7034 - [Added a lot][42264] of [new error codes][42302]
7035 - [Added `target-feature=+crt-static` option][37406] [RFC 1721] Which allows
7036 libraries with C Run-time Libraries(CRT) to be statically linked.
7037 - [Fixed various ARM codegen bugs][42740]
7038
7039 Libraries
7040 ---------
7041
7042 - [`String` now implements `FromIterator<Cow<'a, str>>` and
7043 `Extend<Cow<'a, str>>`][41449]
7044 - [`Vec` now implements `From<&mut [T]>`][41530]
7045 - [`Box<[u8]>` now implements `From<Box<str>>`][41258]
7046 - [`SplitWhitespace` now implements `Clone`][41659]
7047 - [`[u8]::reverse` is now 5x faster and `[u16]::reverse` is now
7048 1.5x faster][41764]
7049 - [`eprint!` and `eprintln!` macros added to prelude.][41192] Same as the `print!`
7050 macros, but for printing to stderr.
7051
7052 Stabilized APIs
7053 ---------------
7054
7055 - [`OsString::shrink_to_fit`]
7056 - [`cmp::Reverse`]
7057 - [`Command::envs`]
7058 - [`thread::ThreadId`]
7059
7060 Cargo
7061 -----
7062
7063 - [Build scripts can now add environment variables to the environment
7064 the crate is being compiled in.
7065 Example: `println!("cargo:rustc-env=FOO=bar");`][cargo/3929]
7066 - [Subcommands now replace the current process rather than spawning a new
7067 child process][cargo/3970]
7068 - [Workspace members can now accept glob file patterns][cargo/3979]
7069 - [Added `--all` flag to the `cargo bench` subcommand to run benchmarks of all
7070 the members in a given workspace.][cargo/3988]
7071 - [Updated `libssh2-sys` to 0.2.6][cargo/4008]
7072 - [Target directory path is now in the cargo metadata][cargo/4022]
7073 - [Cargo no longer checks out a local working directory for the
7074 crates.io index][cargo/4026] This should provide smaller file size for the
7075 registry, and improve cloning times, especially on Windows machines.
7076 - [Added an `--exclude` option for excluding certain packages when using the
7077 `--all` option][cargo/4031]
7078 - [Cargo will now automatically retry when receiving a 5xx error
7079 from crates.io][cargo/4032]
7080 - [The `--features` option now accepts multiple comma or space
7081 delimited values.][cargo/4084]
7082 - [Added support for custom target specific runners][cargo/3954]
7083
7084 Misc
7085 ----
7086
7087 - [Added `rust-windbg.cmd`][39983] for loading rust `.natvis` files in the
7088 Windows Debugger.
7089 - [Rust will now release XZ compressed packages][rust-installer/57]
7090 - [rustup will now prefer to download rust packages with
7091 XZ compression][rustup/1100] over GZip packages.
7092 - [Added the ability to escape `#` in rust documentation][41785] By adding
7093 additional `#`'s ie. `##` is now `#`
7094
7095 Compatibility Notes
7096 -------------------
7097
7098 - [`MutexGuard<T>` may only be `Sync` if `T` is `Sync`.][41624]
7099 - [`-Z` flags are now no longer allowed to be used on the stable
7100 compiler.][41751] This has been a warning for a year previous to this.
7101 - [As a result of the `-Z` flag change, the `cargo-check` plugin no
7102 longer works][42844]. Users should migrate to the built-in `check`
7103 command, which has been available since 1.16.
7104 - [Ending a float literal with `._` is now a hard error.
7105 Example: `42._` .][41946]
7106 - [Any use of a private `extern crate` outside of its module is now a
7107 hard error.][36886] This was previously a warning.
7108 - [`use ::self::foo;` is now a hard error.][36888] `self` paths are always
7109 relative while the `::` prefix makes a path absolute, but was ignored and the
7110 path was relative regardless.
7111 - [Floating point constants in match patterns is now a hard error][36890]
7112 This was previously a warning.
7113 - [Struct or enum constants that don't derive `PartialEq` & `Eq` used
7114 match patterns is now a hard error][36891] This was previously a warning.
7115 - [Lifetimes named `'_` are no longer allowed.][36892] This was previously
7116 a warning.
7117 - [From the pound escape, lines consisting of multiple `#`s are
7118 now visible][41785]
7119 - [It is an error to re-export private enum variants][42460]. This is
7120 known to break a number of crates that depend on an older version of
7121 mustache.
7122 - [On Windows, if `VCINSTALLDIR` is set incorrectly, `rustc` will try
7123 to use it to find the linker, and the build will fail where it did
7124 not previously][42607]
7125
7126 [36886]: https://github.com/rust-lang/rust/issues/36886
7127 [36888]: https://github.com/rust-lang/rust/issues/36888
7128 [36890]: https://github.com/rust-lang/rust/issues/36890
7129 [36891]: https://github.com/rust-lang/rust/issues/36891
7130 [36892]: https://github.com/rust-lang/rust/issues/36892
7131 [37406]: https://github.com/rust-lang/rust/issues/37406
7132 [39983]: https://github.com/rust-lang/rust/pull/39983
7133 [41145]: https://github.com/rust-lang/rust/pull/41145
7134 [41192]: https://github.com/rust-lang/rust/pull/41192
7135 [41258]: https://github.com/rust-lang/rust/pull/41258
7136 [41370]: https://github.com/rust-lang/rust/pull/41370
7137 [41449]: https://github.com/rust-lang/rust/pull/41449
7138 [41530]: https://github.com/rust-lang/rust/pull/41530
7139 [41624]: https://github.com/rust-lang/rust/pull/41624
7140 [41656]: https://github.com/rust-lang/rust/pull/41656
7141 [41659]: https://github.com/rust-lang/rust/pull/41659
7142 [41676]: https://github.com/rust-lang/rust/pull/41676
7143 [41751]: https://github.com/rust-lang/rust/pull/41751
7144 [41764]: https://github.com/rust-lang/rust/pull/41764
7145 [41785]: https://github.com/rust-lang/rust/pull/41785
7146 [41873]: https://github.com/rust-lang/rust/pull/41873
7147 [41907]: https://github.com/rust-lang/rust/pull/41907
7148 [41946]: https://github.com/rust-lang/rust/pull/41946
7149 [42016]: https://github.com/rust-lang/rust/pull/42016
7150 [42037]: https://github.com/rust-lang/rust/pull/42037
7151 [42068]: https://github.com/rust-lang/rust/pull/42068
7152 [42150]: https://github.com/rust-lang/rust/pull/42150
7153 [42162]: https://github.com/rust-lang/rust/pull/42162
7154 [42225]: https://github.com/rust-lang/rust/pull/42225
7155 [42264]: https://github.com/rust-lang/rust/pull/42264
7156 [42302]: https://github.com/rust-lang/rust/pull/42302
7157 [42460]: https://github.com/rust-lang/rust/issues/42460
7158 [42607]: https://github.com/rust-lang/rust/issues/42607
7159 [42740]: https://github.com/rust-lang/rust/pull/42740
7160 [42844]: https://github.com/rust-lang/rust/issues/42844
7161 [42948]: https://github.com/rust-lang/rust/pull/42948
7162 [RFC 1444]: https://github.com/rust-lang/rfcs/pull/1444
7163 [RFC 1506]: https://github.com/rust-lang/rfcs/pull/1506
7164 [RFC 1558]: https://github.com/rust-lang/rfcs/pull/1558
7165 [RFC 1624]: https://github.com/rust-lang/rfcs/pull/1624
7166 [RFC 1721]: https://github.com/rust-lang/rfcs/pull/1721
7167 [`Command::envs`]: https://doc.rust-lang.org/std/process/struct.Command.html#method.envs
7168 [`OsString::shrink_to_fit`]: https://doc.rust-lang.org/std/ffi/struct.OsString.html#method.shrink_to_fit
7169 [`cmp::Reverse`]: https://doc.rust-lang.org/std/cmp/struct.Reverse.html
7170 [`thread::ThreadId`]: https://doc.rust-lang.org/std/thread/struct.ThreadId.html
7171 [cargo/3929]: https://github.com/rust-lang/cargo/pull/3929
7172 [cargo/3954]: https://github.com/rust-lang/cargo/pull/3954
7173 [cargo/3970]: https://github.com/rust-lang/cargo/pull/3970
7174 [cargo/3979]: https://github.com/rust-lang/cargo/pull/3979
7175 [cargo/3988]: https://github.com/rust-lang/cargo/pull/3988
7176 [cargo/4008]: https://github.com/rust-lang/cargo/pull/4008
7177 [cargo/4022]: https://github.com/rust-lang/cargo/pull/4022
7178 [cargo/4026]: https://github.com/rust-lang/cargo/pull/4026
7179 [cargo/4031]: https://github.com/rust-lang/cargo/pull/4031
7180 [cargo/4032]: https://github.com/rust-lang/cargo/pull/4032
7181 [cargo/4084]: https://github.com/rust-lang/cargo/pull/4084
7182 [rust-installer/57]: https://github.com/rust-lang/rust-installer/pull/57
7183 [rustup/1100]: https://github.com/rust-lang-nursery/rustup.rs/pull/1100
7184
7185
7186 Version 1.18.0 (2017-06-08)
7187 ===========================
7188
7189 Language
7190 --------
7191
7192 - [Stabilize pub(restricted)][40556] `pub` can now accept a module path to
7193 make the item visible to just that module tree. Also accepts the keyword
7194 `crate` to make something public to the whole crate but not users of the
7195 library. Example: `pub(crate) mod utils;`. [RFC 1422].
7196 - [Stabilize `#![windows_subsystem]` attribute][40870] conservative exposure of the
7197 `/SUBSYSTEM` linker flag on Windows platforms. [RFC 1665].
7198 - [Refactor of trait object type parsing][40043] Now `ty` in macros can accept
7199 types like `Write + Send`, trailing `+` are now supported in trait objects,
7200 and better error reporting for trait objects starting with `?Sized`.
7201 - [0e+10 is now a valid floating point literal][40589]
7202 - [Now warns if you bind a lifetime parameter to 'static][40734]
7203 - [Tuples, Enum variant fields, and structs with no `repr` attribute or with
7204 `#[repr(Rust)]` are reordered to minimize padding and produce a smaller
7205 representation in some cases.][40377]
7206
7207 Compiler
7208 --------
7209
7210 - [rustc can now emit mir with `--emit mir`][39891]
7211 - [Improved LLVM IR for trivial functions][40367]
7212 - [Added explanation for E0090(Wrong number of lifetimes are supplied)][40723]
7213 - [rustc compilation is now 15%-20% faster][41469] Thanks to optimisation
7214 opportunities found through profiling
7215 - [Improved backtrace formatting when panicking][38165]
7216
7217 Libraries
7218 ---------
7219
7220 - [Specialized `Vec::from_iter` being passed `vec::IntoIter`][40731] if the
7221 iterator hasn't been advanced the original `Vec` is reassembled with no actual
7222 iteration or reallocation.
7223 - [Simplified HashMap Bucket interface][40561] provides performance
7224 improvements for iterating and cloning.
7225 - [Specialize Vec::from_elem to use calloc][40409]
7226 - [Fixed Race condition in fs::create_dir_all][39799]
7227 - [No longer caching stdio on Windows][40516]
7228 - [Optimized insertion sort in slice][40807] insertion sort in some cases
7229 2.50%~ faster and in one case now 12.50% faster.
7230 - [Optimized `AtomicBool::fetch_nand`][41143]
7231
7232 Stabilized APIs
7233 ---------------
7234
7235 - [`Child::try_wait`]
7236 - [`HashMap::retain`]
7237 - [`HashSet::retain`]
7238 - [`PeekMut::pop`]
7239 - [`TcpStream::peek`]
7240 - [`UdpSocket::peek`]
7241 - [`UdpSocket::peek_from`]
7242
7243 Cargo
7244 -----
7245
7246 - [Added partial Pijul support][cargo/3842] Pijul is a version control system in Rust.
7247 You can now create new cargo projects with Pijul using `cargo new --vcs pijul`
7248 - [Now always emits build script warnings for crates that fail to build][cargo/3847]
7249 - [Added Android build support][cargo/3885]
7250 - [Added `--bins` and `--tests` flags][cargo/3901] now you can build all programs
7251 of a certain type, for example `cargo build --bins` will build all
7252 binaries.
7253 - [Added support for haiku][cargo/3952]
7254
7255 Misc
7256 ----
7257
7258 - [rustdoc can now use pulldown-cmark with the `--enable-commonmark` flag][40338]
7259 - [Rust now uses the official cross compiler for NetBSD][40612]
7260 - [rustdoc now accepts `#` at the start of files][40828]
7261 - [Fixed jemalloc support for musl][41168]
7262
7263 Compatibility Notes
7264 -------------------
7265
7266 - [Changes to how the `0` flag works in format!][40241] Padding zeroes are now
7267 always placed after the sign if it exists and before the digits. With the `#`
7268 flag the zeroes are placed after the prefix and before the digits.
7269 - [Due to the struct field optimisation][40377], using `transmute` on structs
7270 that have no `repr` attribute or `#[repr(Rust)]` will no longer work. This has
7271 always been undefined behavior, but is now more likely to break in practice.
7272 - [The refactor of trait object type parsing][40043] fixed a bug where `+` was
7273 receiving the wrong priority parsing things like `&for<'a> Tr<'a> + Send` as
7274 `&(for<'a> Tr<'a> + Send)` instead of `(&for<'a> Tr<'a>) + Send`
7275 - [Overlapping inherent `impl`s are now a hard error][40728]
7276 - [`PartialOrd` and `Ord` must agree on the ordering.][41270]
7277 - [`rustc main.rs -o out --emit=asm,llvm-ir`][41085] Now will output
7278 `out.asm` and `out.ll` instead of only one of the filetypes.
7279 - [ calling a function that returns `Self` will no longer work][41805] when
7280 the size of `Self` cannot be statically determined.
7281 - [rustc now builds with a "pthreads" flavour of MinGW for Windows GNU][40805]
7282 this has caused a few regressions namely:
7283
7284 - Changed the link order of local static/dynamic libraries (respecting the
7285 order on given rather than having the compiler reorder).
7286 - Changed how MinGW is linked, native code linked to dynamic libraries
7287 may require manually linking to the gcc support library (for the native
7288 code itself)
7289
7290 [38165]: https://github.com/rust-lang/rust/pull/38165
7291 [39799]: https://github.com/rust-lang/rust/pull/39799
7292 [39891]: https://github.com/rust-lang/rust/pull/39891
7293 [40043]: https://github.com/rust-lang/rust/pull/40043
7294 [40241]: https://github.com/rust-lang/rust/pull/40241
7295 [40338]: https://github.com/rust-lang/rust/pull/40338
7296 [40367]: https://github.com/rust-lang/rust/pull/40367
7297 [40377]: https://github.com/rust-lang/rust/pull/40377
7298 [40409]: https://github.com/rust-lang/rust/pull/40409
7299 [40516]: https://github.com/rust-lang/rust/pull/40516
7300 [40556]: https://github.com/rust-lang/rust/pull/40556
7301 [40561]: https://github.com/rust-lang/rust/pull/40561
7302 [40589]: https://github.com/rust-lang/rust/pull/40589
7303 [40612]: https://github.com/rust-lang/rust/pull/40612
7304 [40723]: https://github.com/rust-lang/rust/pull/40723
7305 [40728]: https://github.com/rust-lang/rust/pull/40728
7306 [40731]: https://github.com/rust-lang/rust/pull/40731
7307 [40734]: https://github.com/rust-lang/rust/pull/40734
7308 [40805]: https://github.com/rust-lang/rust/pull/40805
7309 [40807]: https://github.com/rust-lang/rust/pull/40807
7310 [40828]: https://github.com/rust-lang/rust/pull/40828
7311 [40870]: https://github.com/rust-lang/rust/pull/40870
7312 [41085]: https://github.com/rust-lang/rust/pull/41085
7313 [41143]: https://github.com/rust-lang/rust/pull/41143
7314 [41168]: https://github.com/rust-lang/rust/pull/41168
7315 [41270]: https://github.com/rust-lang/rust/issues/41270
7316 [41469]: https://github.com/rust-lang/rust/pull/41469
7317 [41805]: https://github.com/rust-lang/rust/issues/41805
7318 [RFC 1422]: https://github.com/rust-lang/rfcs/blob/master/text/1422-pub-restricted.md
7319 [RFC 1665]: https://github.com/rust-lang/rfcs/blob/master/text/1665-windows-subsystem.md
7320 [`Child::try_wait`]: https://doc.rust-lang.org/std/process/struct.Child.html#method.try_wait
7321 [`HashMap::retain`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.retain
7322 [`HashSet::retain`]: https://doc.rust-lang.org/std/collections/struct.HashSet.html#method.retain
7323 [`PeekMut::pop`]: https://doc.rust-lang.org/std/collections/binary_heap/struct.PeekMut.html#method.pop
7324 [`TcpStream::peek`]: https://doc.rust-lang.org/std/net/struct.TcpStream.html#method.peek
7325 [`UdpSocket::peek_from`]: https://doc.rust-lang.org/std/net/struct.UdpSocket.html#method.peek_from
7326 [`UdpSocket::peek`]: https://doc.rust-lang.org/std/net/struct.UdpSocket.html#method.peek
7327 [cargo/3842]: https://github.com/rust-lang/cargo/pull/3842
7328 [cargo/3847]: https://github.com/rust-lang/cargo/pull/3847
7329 [cargo/3885]: https://github.com/rust-lang/cargo/pull/3885
7330 [cargo/3901]: https://github.com/rust-lang/cargo/pull/3901
7331 [cargo/3952]: https://github.com/rust-lang/cargo/pull/3952
7332
7333
7334 Version 1.17.0 (2017-04-27)
7335 ===========================
7336
7337 Language
7338 --------
7339
7340 * [The lifetime of statics and consts defaults to `'static`][39265]. [RFC 1623]
7341 * [Fields of structs may be initialized without duplicating the field/variable
7342 names][39761]. [RFC 1682]
7343 * [`Self` may be included in the `where` clause of `impls`][38864]. [RFC 1647]
7344 * [When coercing to an unsized type lifetimes must be equal][40319]. That is,
7345 there is no subtyping between `T` and `U` when `T: Unsize<U>`. For example,
7346 coercing `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to
7347 `'b`. Soundness fix.
7348 * [Values passed to the indexing operator, `[]`, automatically coerce][40166]
7349 * [Static variables may contain references to other statics][40027]
7350
7351 Compiler
7352 --------
7353
7354 * [Exit quickly on only `--emit dep-info`][40336]
7355 * [Make `-C relocation-model` more correctly determine whether the linker
7356 creates a position-independent executable][40245]
7357 * [Add `-C overflow-checks` to directly control whether integer overflow
7358 panics][40037]
7359 * [The rustc type checker now checks items on demand instead of in a single
7360 in-order pass][40008]. This is mostly an internal refactoring in support of
7361 future work, including incremental type checking, but also resolves [RFC
7362 1647], allowing `Self` to appear in `impl` `where` clauses.
7363 * [Optimize vtable loads][39995]
7364 * [Turn off vectorization for Emscripten targets][39990]
7365 * [Provide suggestions for unknown macros imported with `use`][39953]
7366 * [Fix ICEs in path resolution][39939]
7367 * [Strip exception handling code on Emscripten when `panic=abort`][39193]
7368 * [Add clearer error message using `&str + &str`][39116]
7369
7370 Stabilized APIs
7371 ---------------
7372
7373 * [`Arc::into_raw`]
7374 * [`Arc::from_raw`]
7375 * [`Arc::ptr_eq`]
7376 * [`Rc::into_raw`]
7377 * [`Rc::from_raw`]
7378 * [`Rc::ptr_eq`]
7379 * [`Ordering::then`]
7380 * [`Ordering::then_with`]
7381 * [`BTreeMap::range`]
7382 * [`BTreeMap::range_mut`]
7383 * [`collections::Bound`]
7384 * [`process::abort`]
7385 * [`ptr::read_unaligned`]
7386 * [`ptr::write_unaligned`]
7387 * [`Result::expect_err`]
7388 * [`Cell::swap`]
7389 * [`Cell::replace`]
7390 * [`Cell::into_inner`]
7391 * [`Cell::take`]
7392
7393 Libraries
7394 ---------
7395
7396 * [`BTreeMap` and `BTreeSet` can iterate over ranges][27787]
7397 * [`Cell` can store non-`Copy` types][39793]. [RFC 1651]
7398 * [`String` implements `FromIterator<&char>`][40028]
7399 * `Box` [implements][40009] a number of new conversions:
7400 `From<Box<str>> for String`,
7401 `From<Box<[T]>> for Vec<T>`,
7402 `From<Box<CStr>> for CString`,
7403 `From<Box<OsStr>> for OsString`,
7404 `From<Box<Path>> for PathBuf`,
7405 `Into<Box<str>> for String`,
7406 `Into<Box<[T]>> for Vec<T>`,
7407 `Into<Box<CStr>> for CString`,
7408 `Into<Box<OsStr>> for OsString`,
7409 `Into<Box<Path>> for PathBuf`,
7410 `Default for Box<str>`,
7411 `Default for Box<CStr>`,
7412 `Default for Box<OsStr>`,
7413 `From<&CStr> for Box<CStr>`,
7414 `From<&OsStr> for Box<OsStr>`,
7415 `From<&Path> for Box<Path>`
7416 * [`ffi::FromBytesWithNulError` implements `Error` and `Display`][39960]
7417 * [Specialize `PartialOrd<A> for [A] where A: Ord`][39642]
7418 * [Slightly optimize `slice::sort`][39538]
7419 * [Add `ToString` trait specialization for `Cow<'a, str>` and `String`][39440]
7420 * [`Box<[T]>` implements `From<&[T]> where T: Copy`,
7421 `Box<str>` implements `From<&str>`][39438]
7422 * [`IpAddr` implements `From` for various arrays. `SocketAddr` implements
7423 `From<(I, u16)> where I: Into<IpAddr>`][39372]
7424 * [`format!` estimates the needed capacity before writing a string][39356]
7425 * [Support unprivileged symlink creation in Windows][38921]
7426 * [`PathBuf` implements `Default`][38764]
7427 * [Implement `PartialEq<[A]>` for `VecDeque<A>`][38661]
7428 * [`HashMap` resizes adaptively][38368] to guard against DOS attacks
7429 and poor hash functions.
7430
7431 Cargo
7432 -----
7433
7434 * [Add `cargo check --all`][cargo/3731]
7435 * [Add an option to ignore SSL revocation checking][cargo/3699]
7436 * [Add `cargo run --package`][cargo/3691]
7437 * [Add `required_features`][cargo/3667]
7438 * [Assume `build.rs` is a build script][cargo/3664]
7439 * [Find workspace via `workspace_root` link in containing member][cargo/3562]
7440
7441 Misc
7442 ----
7443
7444 * [Documentation is rendered with mdbook instead of the obsolete, in-tree
7445 `rustbook`][39633]
7446 * [The "Unstable Book" documents nightly-only features][ubook]
7447 * [Improve the style of the sidebar in rustdoc output][40265]
7448 * [Configure build correctly on 64-bit CPU's with the armhf ABI][40261]
7449 * [Fix MSP430 breakage due to `i128`][40257]
7450 * [Preliminary Solaris/SPARCv9 support][39903]
7451 * [`rustc` is linked statically on Windows MSVC targets][39837], allowing it to
7452 run without installing the MSVC runtime.
7453 * [`rustdoc --test` includes file names in test names][39788]
7454 * This release includes builds of `std` for `sparc64-unknown-linux-gnu`,
7455 `aarch64-unknown-linux-fuchsia`, and `x86_64-unknown-linux-fuchsia`.
7456 * [Initial support for `aarch64-unknown-freebsd`][39491]
7457 * [Initial support for `i686-unknown-netbsd`][39426]
7458 * [This release no longer includes the old makefile build system][39431]. Rust
7459 is built with a custom build system, written in Rust, and with Cargo.
7460 * [Add Debug implementations for libcollection structs][39002]
7461 * [`TypeId` implements `PartialOrd` and `Ord`][38981]
7462 * [`--test-threads=0` produces an error][38945]
7463 * [`rustup` installs documentation by default][40526]
7464 * [The Rust source includes NatVis visualizations][39843]. These can be used by
7465 WinDbg and Visual Studio to improve the debugging experience.
7466
7467 Compatibility Notes
7468 -------------------
7469
7470 * [Rust 1.17 does not correctly detect the MSVC 2017 linker][38584]. As a
7471 workaround, either use MSVC 2015 or run vcvars.bat.
7472 * [When coercing to an unsized type lifetimes must be equal][40319]. That is,
7473 disallow subtyping between `T` and `U` when `T: Unsize<U>`, e.g. coercing
7474 `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to `'b`. Soundness
7475 fix.
7476 * [`format!` and `Display::to_string` panic if an underlying formatting
7477 implementation returns an error][40117]. Previously the error was silently
7478 ignored. It is incorrect for `write_fmt` to return an error when writing
7479 to a string.
7480 * [In-tree crates are verified to be unstable][39851]. Previously, some minor
7481 crates were marked stable and could be accessed from the stable toolchain.
7482 * [Rust git source no longer includes vendored crates][39728]. Those that need
7483 to build with vendored crates should build from release tarballs.
7484 * [Fix inert attributes from `proc_macro_derives`][39572]
7485 * [During crate resolution, rustc prefers a crate in the sysroot if two crates
7486 are otherwise identical][39518]. Unlikely to be encountered outside the Rust
7487 build system.
7488 * [Fixed bugs around how type inference interacts with dead-code][39485]. The
7489 existing code generally ignores the type of dead-code unless a type-hint is
7490 provided; this can cause surprising inference interactions particularly around
7491 defaulting. The new code uniformly ignores the result type of dead-code.
7492 * [Tuple-struct constructors with private fields are no longer visible][38932]
7493 * [Lifetime parameters that do not appear in the arguments are now considered
7494 early-bound][38897], resolving a soundness bug (#[32330]). The
7495 `hr_lifetime_in_assoc_type` future-compatibility lint has been in effect since
7496 April of 2016.
7497 * [rustdoc: fix doctests with non-feature crate attributes][38161]
7498 * [Make transmuting from fn item types to pointer-sized types a hard
7499 error][34198]
7500
7501 [27787]: https://github.com/rust-lang/rust/issues/27787
7502 [32330]: https://github.com/rust-lang/rust/issues/32330
7503 [34198]: https://github.com/rust-lang/rust/pull/34198
7504 [38161]: https://github.com/rust-lang/rust/pull/38161
7505 [38368]: https://github.com/rust-lang/rust/pull/38368
7506 [38584]: https://github.com/rust-lang/rust/issues/38584
7507 [38661]: https://github.com/rust-lang/rust/pull/38661
7508 [38764]: https://github.com/rust-lang/rust/pull/38764
7509 [38864]: https://github.com/rust-lang/rust/issues/38864
7510 [38897]: https://github.com/rust-lang/rust/pull/38897
7511 [38921]: https://github.com/rust-lang/rust/pull/38921
7512 [38932]: https://github.com/rust-lang/rust/pull/38932
7513 [38945]: https://github.com/rust-lang/rust/pull/38945
7514 [38981]: https://github.com/rust-lang/rust/pull/38981
7515 [39002]: https://github.com/rust-lang/rust/pull/39002
7516 [39116]: https://github.com/rust-lang/rust/pull/39116
7517 [39193]: https://github.com/rust-lang/rust/pull/39193
7518 [39265]: https://github.com/rust-lang/rust/pull/39265
7519 [39356]: https://github.com/rust-lang/rust/pull/39356
7520 [39372]: https://github.com/rust-lang/rust/pull/39372
7521 [39426]: https://github.com/rust-lang/rust/pull/39426
7522 [39431]: https://github.com/rust-lang/rust/pull/39431
7523 [39438]: https://github.com/rust-lang/rust/pull/39438
7524 [39440]: https://github.com/rust-lang/rust/pull/39440
7525 [39485]: https://github.com/rust-lang/rust/pull/39485
7526 [39491]: https://github.com/rust-lang/rust/pull/39491
7527 [39518]: https://github.com/rust-lang/rust/pull/39518
7528 [39538]: https://github.com/rust-lang/rust/pull/39538
7529 [39572]: https://github.com/rust-lang/rust/pull/39572
7530 [39633]: https://github.com/rust-lang/rust/pull/39633
7531 [39642]: https://github.com/rust-lang/rust/pull/39642
7532 [39728]: https://github.com/rust-lang/rust/pull/39728
7533 [39761]: https://github.com/rust-lang/rust/pull/39761
7534 [39788]: https://github.com/rust-lang/rust/pull/39788
7535 [39793]: https://github.com/rust-lang/rust/pull/39793
7536 [39837]: https://github.com/rust-lang/rust/pull/39837
7537 [39843]: https://github.com/rust-lang/rust/pull/39843
7538 [39851]: https://github.com/rust-lang/rust/pull/39851
7539 [39903]: https://github.com/rust-lang/rust/pull/39903
7540 [39939]: https://github.com/rust-lang/rust/pull/39939
7541 [39953]: https://github.com/rust-lang/rust/pull/39953
7542 [39960]: https://github.com/rust-lang/rust/pull/39960
7543 [39990]: https://github.com/rust-lang/rust/pull/39990
7544 [39995]: https://github.com/rust-lang/rust/pull/39995
7545 [40008]: https://github.com/rust-lang/rust/pull/40008
7546 [40009]: https://github.com/rust-lang/rust/pull/40009
7547 [40027]: https://github.com/rust-lang/rust/pull/40027
7548 [40028]: https://github.com/rust-lang/rust/pull/40028
7549 [40037]: https://github.com/rust-lang/rust/pull/40037
7550 [40117]: https://github.com/rust-lang/rust/pull/40117
7551 [40166]: https://github.com/rust-lang/rust/pull/40166
7552 [40245]: https://github.com/rust-lang/rust/pull/40245
7553 [40257]: https://github.com/rust-lang/rust/pull/40257
7554 [40261]: https://github.com/rust-lang/rust/pull/40261
7555 [40265]: https://github.com/rust-lang/rust/pull/40265
7556 [40319]: https://github.com/rust-lang/rust/pull/40319
7557 [40336]: https://github.com/rust-lang/rust/pull/40336
7558 [40526]: https://github.com/rust-lang/rust/pull/40526
7559 [RFC 1623]: https://github.com/rust-lang/rfcs/blob/master/text/1623-static.md
7560 [RFC 1647]: https://github.com/rust-lang/rfcs/blob/master/text/1647-allow-self-in-where-clauses.md
7561 [RFC 1651]: https://github.com/rust-lang/rfcs/blob/master/text/1651-movecell.md
7562 [RFC 1682]: https://github.com/rust-lang/rfcs/blob/master/text/1682-field-init-shorthand.md
7563 [`Arc::from_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.from_raw
7564 [`Arc::into_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.into_raw
7565 [`Arc::ptr_eq`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.ptr_eq
7566 [`BTreeMap::range_mut`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range_mut
7567 [`BTreeMap::range`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range
7568 [`Cell::into_inner`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.into_inner
7569 [`Cell::replace`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.replace
7570 [`Cell::swap`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.swap
7571 [`Cell::take`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.take
7572 [`Ordering::then_with`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then_with
7573 [`Ordering::then`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then
7574 [`Rc::from_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.from_raw
7575 [`Rc::into_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.into_raw
7576 [`Rc::ptr_eq`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.ptr_eq
7577 [`Result::expect_err`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.expect_err
7578 [`collections::Bound`]: https://doc.rust-lang.org/std/collections/enum.Bound.html
7579 [`process::abort`]: https://doc.rust-lang.org/std/process/fn.abort.html
7580 [`ptr::read_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html
7581 [`ptr::write_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.write_unaligned.html
7582 [cargo/3562]: https://github.com/rust-lang/cargo/pull/3562
7583 [cargo/3664]: https://github.com/rust-lang/cargo/pull/3664
7584 [cargo/3667]: https://github.com/rust-lang/cargo/pull/3667
7585 [cargo/3691]: https://github.com/rust-lang/cargo/pull/3691
7586 [cargo/3699]: https://github.com/rust-lang/cargo/pull/3699
7587 [cargo/3731]: https://github.com/rust-lang/cargo/pull/3731
7588 [ubook]: https://doc.rust-lang.org/unstable-book/
7589
7590
7591 Version 1.16.0 (2017-03-16)
7592 ===========================
7593
7594 Language
7595 --------
7596
7597 * [The compiler's `dead_code` lint now accounts for type aliases][38051].
7598 * [Uninhabitable enums (those without any variants) no longer permit wildcard
7599 match patterns][38069]
7600 * [Clean up semantics of `self` in an import list][38313]
7601 * [`Self` may appear in `impl` headers][38920]
7602 * [`Self` may appear in struct expressions][39282]
7603
7604 Compiler
7605 --------
7606
7607 * [`rustc` now supports `--emit=metadata`, which causes rustc to emit
7608 a `.rmeta` file containing only crate metadata][38571]. This can be
7609 used by tools like the Rust Language Service to perform
7610 metadata-only builds.
7611 * [Levenshtein based typo suggestions now work in most places, while
7612 previously they worked only for fields and sometimes for local
7613 variables][38927]. Together with the overhaul of "no
7614 resolution"/"unexpected resolution" errors (#[38154]) they result in
7615 large and systematic improvement in resolution diagnostics.
7616 * [Fix `transmute::<T, U>` where `T` requires a bigger alignment than
7617 `U`][38670]
7618 * [rustc: use -Xlinker when specifying an rpath with ',' in it][38798]
7619 * [`rustc` no longer attempts to provide "consider using an explicit
7620 lifetime" suggestions][37057]. They were inaccurate.
7621
7622 Stabilized APIs
7623 ---------------
7624
7625 * [`VecDeque::truncate`]
7626 * [`VecDeque::resize`]
7627 * [`String::insert_str`]
7628 * [`Duration::checked_add`]
7629 * [`Duration::checked_sub`]
7630 * [`Duration::checked_div`]
7631 * [`Duration::checked_mul`]
7632 * [`str::replacen`]
7633 * [`str::repeat`]
7634 * [`SocketAddr::is_ipv4`]
7635 * [`SocketAddr::is_ipv6`]
7636 * [`IpAddr::is_ipv4`]
7637 * [`IpAddr::is_ipv6`]
7638 * [`Vec::dedup_by`]
7639 * [`Vec::dedup_by_key`]
7640 * [`Result::unwrap_or_default`]
7641 * [`<*const T>::wrapping_offset`]
7642 * [`<*mut T>::wrapping_offset`]
7643 * `CommandExt::creation_flags`
7644 * [`File::set_permissions`]
7645 * [`String::split_off`]
7646
7647 Libraries
7648 ---------
7649
7650 * [`[T]::binary_search` and `[T]::binary_search_by_key` now take
7651 their argument by `Borrow` parameter][37761]
7652 * [All public types in std implement `Debug`][38006]
7653 * [`IpAddr` implements `From<Ipv4Addr>` and `From<Ipv6Addr>`][38327]
7654 * [`Ipv6Addr` implements `From<[u16; 8]>`][38131]
7655 * [Ctrl-Z returns from `Stdin.read()` when reading from the console on
7656 Windows][38274]
7657 * [std: Fix partial writes in `LineWriter`][38062]
7658 * [std: Clamp max read/write sizes on Unix][38622]
7659 * [Use more specific panic message for `&str` slicing errors][38066]
7660 * [`TcpListener::set_only_v6` is deprecated][38304]. This
7661 functionality cannot be achieved in std currently.
7662 * [`writeln!`, like `println!`, now accepts a form with no string
7663 or formatting arguments, to just print a newline][38469]
7664 * [Implement `iter::Sum` and `iter::Product` for `Result`][38580]
7665 * [Reduce the size of static data in `std_unicode::tables`][38781]
7666 * [`char::EscapeDebug`, `EscapeDefault`, `EscapeUnicode`,
7667 `CaseMappingIter`, `ToLowercase`, `ToUppercase`, implement
7668 `Display`][38909]
7669 * [`Duration` implements `Sum`][38712]
7670 * [`String` implements `ToSocketAddrs`][39048]
7671
7672 Cargo
7673 -----
7674
7675 * [The `cargo check` command does a type check of a project without
7676 building it][cargo/3296]
7677 * [crates.io will display CI badges from Travis and AppVeyor, if
7678 specified in Cargo.toml][cargo/3546]
7679 * [crates.io will display categories listed in Cargo.toml][cargo/3301]
7680 * [Compilation profiles accept integer values for `debug`, in addition
7681 to `true` and `false`. These are passed to `rustc` as the value to
7682 `-C debuginfo`][cargo/3534]
7683 * [Implement `cargo --version --verbose`][cargo/3604]
7684 * [All builds now output 'dep-info' build dependencies compatible with
7685 make and ninja][cargo/3557]
7686 * [Build all workspace members with `build --all`][cargo/3511]
7687 * [Document all workspace members with `doc --all`][cargo/3515]
7688 * [Path deps outside workspace are not members][cargo/3443]
7689
7690 Misc
7691 ----
7692
7693 * [`rustdoc` has a `--sysroot` argument that, like `rustc`, specifies
7694 the path to the Rust implementation][38589]
7695 * [The `armv7-linux-androideabi` target no longer enables NEON
7696 extensions, per Google's ABI guide][38413]
7697 * [The stock standard library can be compiled for Redox OS][38401]
7698 * [Rust has initial SPARC support][38726]. Tier 3. No builds
7699 available.
7700 * [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No
7701 builds available.
7702 * [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379]
7703
7704 Compatibility Notes
7705 -------------------
7706
7707 * [Uninhabitable enums (those without any variants) no longer permit wildcard
7708 match patterns][38069]
7709 * In this release, references to uninhabited types can not be
7710 pattern-matched. This was accidentally allowed in 1.15.
7711 * [The compiler's `dead_code` lint now accounts for type aliases][38051].
7712 * [Ctrl-Z returns from `Stdin.read()` when reading from the console on
7713 Windows][38274]
7714 * [Clean up semantics of `self` in an import list][38313]
7715 * Reimplemented lifetime elision. This change was almost entirely compatible
7716 with existing code, but it did close a number of small bugs and loopholes,
7717 as well as being more accepting in some other [cases][41105].
7718
7719 [37057]: https://github.com/rust-lang/rust/pull/37057
7720 [37761]: https://github.com/rust-lang/rust/pull/37761
7721 [38006]: https://github.com/rust-lang/rust/pull/38006
7722 [38051]: https://github.com/rust-lang/rust/pull/38051
7723 [38062]: https://github.com/rust-lang/rust/pull/38062
7724 [38622]: https://github.com/rust-lang/rust/pull/38622
7725 [38066]: https://github.com/rust-lang/rust/pull/38066
7726 [38069]: https://github.com/rust-lang/rust/pull/38069
7727 [38131]: https://github.com/rust-lang/rust/pull/38131
7728 [38154]: https://github.com/rust-lang/rust/pull/38154
7729 [38274]: https://github.com/rust-lang/rust/pull/38274
7730 [38304]: https://github.com/rust-lang/rust/pull/38304
7731 [38313]: https://github.com/rust-lang/rust/pull/38313
7732 [38327]: https://github.com/rust-lang/rust/pull/38327
7733 [38401]: https://github.com/rust-lang/rust/pull/38401
7734 [38413]: https://github.com/rust-lang/rust/pull/38413
7735 [38469]: https://github.com/rust-lang/rust/pull/38469
7736 [38559]: https://github.com/rust-lang/rust/pull/38559
7737 [38571]: https://github.com/rust-lang/rust/pull/38571
7738 [38580]: https://github.com/rust-lang/rust/pull/38580
7739 [38589]: https://github.com/rust-lang/rust/pull/38589
7740 [38670]: https://github.com/rust-lang/rust/pull/38670
7741 [38712]: https://github.com/rust-lang/rust/pull/38712
7742 [38726]: https://github.com/rust-lang/rust/pull/38726
7743 [38781]: https://github.com/rust-lang/rust/pull/38781
7744 [38798]: https://github.com/rust-lang/rust/pull/38798
7745 [38909]: https://github.com/rust-lang/rust/pull/38909
7746 [38920]: https://github.com/rust-lang/rust/pull/38920
7747 [38927]: https://github.com/rust-lang/rust/pull/38927
7748 [39048]: https://github.com/rust-lang/rust/pull/39048
7749 [39282]: https://github.com/rust-lang/rust/pull/39282
7750 [39379]: https://github.com/rust-lang/rust/pull/39379
7751 [41105]: https://github.com/rust-lang/rust/issues/41105
7752 [`<*const T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
7753 [`<*mut T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
7754 [`Duration::checked_add`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_add
7755 [`Duration::checked_div`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_div
7756 [`Duration::checked_mul`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_mul
7757 [`Duration::checked_sub`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_sub
7758 [`File::set_permissions`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.set_permissions
7759 [`IpAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv4
7760 [`IpAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv6
7761 [`Result::unwrap_or_default`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_default
7762 [`SocketAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv4
7763 [`SocketAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv6
7764 [`String::insert_str`]: https://doc.rust-lang.org/std/string/struct.String.html#method.insert_str
7765 [`String::split_off`]: https://doc.rust-lang.org/std/string/struct.String.html#method.split_off
7766 [`Vec::dedup_by_key`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by_key
7767 [`Vec::dedup_by`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by
7768 [`VecDeque::resize`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.resize
7769 [`VecDeque::truncate`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.truncate
7770 [`str::repeat`]: https://doc.rust-lang.org/std/primitive.str.html#method.repeat
7771 [`str::replacen`]: https://doc.rust-lang.org/std/primitive.str.html#method.replacen
7772 [cargo/3296]: https://github.com/rust-lang/cargo/pull/3296
7773 [cargo/3301]: https://github.com/rust-lang/cargo/pull/3301
7774 [cargo/3443]: https://github.com/rust-lang/cargo/pull/3443
7775 [cargo/3511]: https://github.com/rust-lang/cargo/pull/3511
7776 [cargo/3515]: https://github.com/rust-lang/cargo/pull/3515
7777 [cargo/3534]: https://github.com/rust-lang/cargo/pull/3534
7778 [cargo/3546]: https://github.com/rust-lang/cargo/pull/3546
7779 [cargo/3557]: https://github.com/rust-lang/cargo/pull/3557
7780 [cargo/3604]: https://github.com/rust-lang/cargo/pull/3604
7781
7782
7783 Version 1.15.1 (2017-02-09)
7784 ===========================
7785
7786 * [Fix IntoIter::as_mut_slice's signature][39466]
7787 * [Compile compiler builtins with `-fPIC` on 32-bit platforms][39523]
7788
7789 [39466]: https://github.com/rust-lang/rust/pull/39466
7790 [39523]: https://github.com/rust-lang/rust/pull/39523
7791
7792
7793 Version 1.15.0 (2017-02-02)
7794 ===========================
7795
7796 Language
7797 --------
7798
7799 * Basic procedural macros allowing custom `#[derive]`, aka "macros 1.1", are
7800 stable. This allows popular code-generating crates like Serde and Diesel to
7801 work ergonomically. [RFC 1681].
7802 * [Tuple structs may be empty. Unary and empty tuple structs may be instantiated
7803 with curly braces][36868]. Part of [RFC 1506].
7804 * [A number of minor changes to name resolution have been activated][37127].
7805 They add up to more consistent semantics, allowing for future evolution of
7806 Rust macros. Specified in [RFC 1560], see its section on ["changes"] for
7807 details of what is different. The breaking changes here have been transitioned
7808 through the [`legacy_imports`] lint since 1.14, with no known regressions.
7809 * [In `macro_rules`, `path` fragments can now be parsed as type parameter
7810 bounds][38279]
7811 * [`?Sized` can be used in `where` clauses][37791]
7812 * [There is now a limit on the size of monomorphized types and it can be
7813 modified with the `#![type_size_limit]` crate attribute, similarly to
7814 the `#![recursion_limit]` attribute][37789]
7815
7816 Compiler
7817 --------
7818
7819 * [On Windows, the compiler will apply dllimport attributes when linking to
7820 extern functions][37973]. Additional attributes and flags can control which
7821 library kind is linked and its name. [RFC 1717].
7822 * [Rust-ABI symbols are no longer exported from cdylibs][38117]
7823 * [The `--test` flag works with procedural macro crates][38107]
7824 * [Fix `extern "aapcs" fn` ABI][37814]
7825 * [The `-C no-stack-check` flag is deprecated][37636]. It does nothing.
7826 * [The `format!` expander recognizes incorrect `printf` and shell-style
7827 formatting directives and suggests the correct format][37613].
7828 * [Only report one error for all unused imports in an import list][37456]
7829
7830 Compiler Performance
7831 --------------------
7832
7833 * [Avoid unnecessary `mk_ty` calls in `Ty::super_fold_with`][37705]
7834 * [Avoid more unnecessary `mk_ty` calls in `Ty::super_fold_with`][37979]
7835 * [Don't clone in `UnificationTable::probe`][37848]
7836 * [Remove `scope_auxiliary` to cut RSS by 10%][37764]
7837 * [Use small vectors in type walker][37760]
7838 * [Macro expansion performance was improved][37701]
7839 * [Change `HirVec<P<T>>` to `HirVec<T>` in `hir::Expr`][37642]
7840 * [Replace FNV with a faster hash function][37229]
7841
7842 Stabilized APIs
7843 ---------------
7844
7845 * [`std::iter::Iterator::min_by`]
7846 * [`std::iter::Iterator::max_by`]
7847 * [`std::os::*::fs::FileExt`]
7848 * [`std::sync::atomic::Atomic*::get_mut`]
7849 * [`std::sync::atomic::Atomic*::into_inner`]
7850 * [`std::vec::IntoIter::as_slice`]
7851 * [`std::vec::IntoIter::as_mut_slice`]
7852 * [`std::sync::mpsc::Receiver::try_iter`]
7853 * [`std::os::unix::process::CommandExt::before_exec`]
7854 * [`std::rc::Rc::strong_count`]
7855 * [`std::rc::Rc::weak_count`]
7856 * [`std::sync::Arc::strong_count`]
7857 * [`std::sync::Arc::weak_count`]
7858 * [`std::char::encode_utf8`]
7859 * [`std::char::encode_utf16`]
7860 * [`std::cell::Ref::clone`]
7861 * [`std::io::Take::into_inner`]
7862
7863 Libraries
7864 ---------
7865
7866 * [The standard sorting algorithm has been rewritten for dramatic performance
7867 improvements][38192]. It is a hybrid merge sort, drawing influences from
7868 Timsort. Previously it was a naive merge sort.
7869 * [`Iterator::nth` no longer has a `Sized` bound][38134]
7870 * [`Extend<&T>` is specialized for `Vec` where `T: Copy`][38182] to improve
7871 performance.
7872 * [`chars().count()` is much faster][37888] and so are [`chars().last()`
7873 and `char_indices().last()`][37882]
7874 * [Fix ARM Objective-C ABI in `std::env::args`][38146]
7875 * [Chinese characters display correctly in `fmt::Debug`][37855]
7876 * [Derive `Default` for `Duration`][37699]
7877 * [Support creation of anonymous pipes on WinXP/2k][37677]
7878 * [`mpsc::RecvTimeoutError` implements `Error`][37527]
7879 * [Don't pass overlapped handles to processes][38835]
7880
7881 Cargo
7882 -----
7883
7884 * [In this release, Cargo build scripts no longer have access to the `OUT_DIR`
7885 environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They
7886 should instead check the variable at runtime with `std::env`. That the value
7887 was set at build time was a bug, and incorrect when cross-compiling. This
7888 change is known to cause breakage.
7889 * [Add `--all` flag to `cargo test`][cargo/3221]
7890 * [Compile statically against the MSVC CRT][cargo/3363]
7891 * [Mix feature flags into fingerprint/metadata shorthash][cargo/3102]
7892 * [Link OpenSSL statically on OSX][cargo/3311]
7893 * [Apply new fingerprinting to build dir outputs][cargo/3310]
7894 * [Test for bad path overrides with summaries][cargo/3336]
7895 * [Require `cargo install --vers` to take a semver version][cargo/3338]
7896 * [Fix retrying crate downloads for network errors][cargo/3348]
7897 * [Implement string lookup for `build.rustflags` config key][cargo/3356]
7898 * [Emit more info on --message-format=json][cargo/3319]
7899 * [Assume `build.rs` in the same directory as `Cargo.toml` is a build script][cargo/3361]
7900 * [Don't ignore errors in workspace manifest][cargo/3409]
7901 * [Fix `--message-format JSON` when rustc emits non-JSON warnings][cargo/3410]
7902
7903 Tooling
7904 -------
7905
7906 * [Test runners (binaries built with `--test`) now support a `--list` argument
7907 that lists the tests it contains][38185]
7908 * [Test runners now support a `--exact` argument that makes the test filter
7909 match exactly, instead of matching only a substring of the test name][38181]
7910 * [rustdoc supports a `--playground-url` flag][37763]
7911 * [rustdoc provides more details about `#[should_panic]` errors][37749]
7912
7913 Misc
7914 ----
7915
7916 * [The Rust build system is now written in Rust][37817]. The Makefiles may
7917 continue to be used in this release by passing `--disable-rustbuild` to the
7918 configure script, but they will be deleted soon. Note that the new build
7919 system uses a different on-disk layout that will likely affect any scripts
7920 building Rust.
7921 * [Rust supports i686-unknown-openbsd][38086]. Tier 3 support. No testing or
7922 releases.
7923 * [Rust supports the MSP430][37627]. Tier 3 support. No testing or releases.
7924 * [Rust supports the ARMv5TE architecture][37615]. Tier 3 support. No testing or
7925 releases.
7926
7927 Compatibility Notes
7928 -------------------
7929
7930 * [A number of minor changes to name resolution have been activated][37127].
7931 They add up to more consistent semantics, allowing for future evolution of
7932 Rust macros. Specified in [RFC 1560], see its section on ["changes"] for
7933 details of what is different. The breaking changes here have been transitioned
7934 through the [`legacy_imports`] lint since 1.14, with no known regressions.
7935 * [In this release, Cargo build scripts no longer have access to the `OUT_DIR`
7936 environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They
7937 should instead check the variable at runtime with `std::env`. That the value
7938 was set at build time was a bug, and incorrect when cross-compiling. This
7939 change is known to cause breakage.
7940 * [Higher-ranked lifetimes are no longer allowed to appear _only_ in associated
7941 types][33685]. The [`hr_lifetime_in_assoc_type` lint] has been a warning since
7942 1.10 and is now an error by default. It will become a hard error in the near
7943 future.
7944 * [The semantics relating modules to file system directories are changing in
7945 minor ways][37602]. This is captured in the new `legacy_directory_ownership`
7946 lint, which is a warning in this release, and will become a hard error in the
7947 future.
7948 * [Rust-ABI symbols are no longer exported from cdylibs][38117]
7949 * [Once `Peekable` peeks a `None` it will return that `None` without re-querying
7950 the underlying iterator][37834]
7951
7952 ["changes"]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md#changes-to-name-resolution-rules
7953 [33685]: https://github.com/rust-lang/rust/issues/33685
7954 [36868]: https://github.com/rust-lang/rust/pull/36868
7955 [37127]: https://github.com/rust-lang/rust/pull/37127
7956 [37229]: https://github.com/rust-lang/rust/pull/37229
7957 [37456]: https://github.com/rust-lang/rust/pull/37456
7958 [37527]: https://github.com/rust-lang/rust/pull/37527
7959 [37602]: https://github.com/rust-lang/rust/pull/37602
7960 [37613]: https://github.com/rust-lang/rust/pull/37613
7961 [37615]: https://github.com/rust-lang/rust/pull/37615
7962 [37636]: https://github.com/rust-lang/rust/pull/37636
7963 [37627]: https://github.com/rust-lang/rust/pull/37627
7964 [37642]: https://github.com/rust-lang/rust/pull/37642
7965 [37677]: https://github.com/rust-lang/rust/pull/37677
7966 [37699]: https://github.com/rust-lang/rust/pull/37699
7967 [37701]: https://github.com/rust-lang/rust/pull/37701
7968 [37705]: https://github.com/rust-lang/rust/pull/37705
7969 [37749]: https://github.com/rust-lang/rust/pull/37749
7970 [37760]: https://github.com/rust-lang/rust/pull/37760
7971 [37763]: https://github.com/rust-lang/rust/pull/37763
7972 [37764]: https://github.com/rust-lang/rust/pull/37764
7973 [37789]: https://github.com/rust-lang/rust/pull/37789
7974 [37791]: https://github.com/rust-lang/rust/pull/37791
7975 [37814]: https://github.com/rust-lang/rust/pull/37814
7976 [37817]: https://github.com/rust-lang/rust/pull/37817
7977 [37834]: https://github.com/rust-lang/rust/pull/37834
7978 [37848]: https://github.com/rust-lang/rust/pull/37848
7979 [37855]: https://github.com/rust-lang/rust/pull/37855
7980 [37882]: https://github.com/rust-lang/rust/pull/37882
7981 [37888]: https://github.com/rust-lang/rust/pull/37888
7982 [37973]: https://github.com/rust-lang/rust/pull/37973
7983 [37979]: https://github.com/rust-lang/rust/pull/37979
7984 [38086]: https://github.com/rust-lang/rust/pull/38086
7985 [38107]: https://github.com/rust-lang/rust/pull/38107
7986 [38117]: https://github.com/rust-lang/rust/pull/38117
7987 [38134]: https://github.com/rust-lang/rust/pull/38134
7988 [38146]: https://github.com/rust-lang/rust/pull/38146
7989 [38181]: https://github.com/rust-lang/rust/pull/38181
7990 [38182]: https://github.com/rust-lang/rust/pull/38182
7991 [38185]: https://github.com/rust-lang/rust/pull/38185
7992 [38192]: https://github.com/rust-lang/rust/pull/38192
7993 [38279]: https://github.com/rust-lang/rust/pull/38279
7994 [38835]: https://github.com/rust-lang/rust/pull/38835
7995 [RFC 1506]: https://github.com/rust-lang/rfcs/blob/master/text/1506-adt-kinds.md
7996 [RFC 1560]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md
7997 [RFC 1681]: https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md
7998 [RFC 1717]: https://github.com/rust-lang/rfcs/blob/master/text/1717-dllimport.md
7999 [`hr_lifetime_in_assoc_type` lint]: https://github.com/rust-lang/rust/issues/33685
8000 [`legacy_imports`]: https://github.com/rust-lang/rust/pull/38271
8001 [cargo/3102]: https://github.com/rust-lang/cargo/pull/3102
8002 [cargo/3221]: https://github.com/rust-lang/cargo/pull/3221
8003 [cargo/3310]: https://github.com/rust-lang/cargo/pull/3310
8004 [cargo/3311]: https://github.com/rust-lang/cargo/pull/3311
8005 [cargo/3319]: https://github.com/rust-lang/cargo/pull/3319
8006 [cargo/3336]: https://github.com/rust-lang/cargo/pull/3336
8007 [cargo/3338]: https://github.com/rust-lang/cargo/pull/3338
8008 [cargo/3348]: https://github.com/rust-lang/cargo/pull/3348
8009 [cargo/3356]: https://github.com/rust-lang/cargo/pull/3356
8010 [cargo/3361]: https://github.com/rust-lang/cargo/pull/3361
8011 [cargo/3363]: https://github.com/rust-lang/cargo/pull/3363
8012 [cargo/3368]: https://github.com/rust-lang/cargo/issues/3368
8013 [cargo/3409]: https://github.com/rust-lang/cargo/pull/3409
8014 [cargo/3410]: https://github.com/rust-lang/cargo/pull/3410
8015 [`std::iter::Iterator::min_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.min_by
8016 [`std::iter::Iterator::max_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.max_by
8017 [`std::os::*::fs::FileExt`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html
8018 [`std::sync::atomic::Atomic*::get_mut`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.get_mut
8019 [`std::sync::atomic::Atomic*::into_inner`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.into_inner
8020 [`std::vec::IntoIter::as_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_slice
8021 [`std::vec::IntoIter::as_mut_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_mut_slice
8022 [`std::sync::mpsc::Receiver::try_iter`]: https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver.html#method.try_iter
8023 [`std::os::unix::process::CommandExt::before_exec`]: https://doc.rust-lang.org/std/os/unix/process/trait.CommandExt.html#tymethod.before_exec
8024 [`std::rc::Rc::strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.strong_count
8025 [`std::rc::Rc::weak_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.weak_count
8026 [`std::sync::Arc::strong_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.strong_count
8027 [`std::sync::Arc::weak_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.weak_count
8028 [`std::char::encode_utf8`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf8
8029 [`std::char::encode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf16
8030 [`std::cell::Ref::clone`]: https://doc.rust-lang.org/std/cell/struct.Ref.html#method.clone
8031 [`std::io::Take::into_inner`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.into_inner
8032
8033
8034 Version 1.14.0 (2016-12-22)
8035 ===========================
8036
8037 Language
8038 --------
8039
8040 * [`..` matches multiple tuple fields in enum variants, structs
8041 and tuples][36843]. [RFC 1492].
8042 * [Safe `fn` items can be coerced to `unsafe fn` pointers][37389]
8043 * [`use *` and `use ::*` both glob-import from the crate root][37367]
8044 * [It's now possible to call a `Vec<Box<Fn()>>` without explicit
8045 dereferencing][36822]
8046
8047 Compiler
8048 --------
8049
8050 * [Mark enums with non-zero discriminant as non-zero][37224]
8051 * [Lower-case `static mut` names are linted like other
8052 statics and consts][37162]
8053 * [Fix ICE on some macros in const integer positions
8054 (e.g. `[u8; m!()]`)][36819]
8055 * [Improve error message and snippet for "did you mean `x`"][36798]
8056 * [Add a panic-strategy field to the target specification][36794]
8057 * [Include LLVM version in `--version --verbose`][37200]
8058
8059 Compile-time Optimizations
8060 --------------------------
8061
8062 * [Improve macro expansion performance][37569]
8063 * [Shrink `Expr_::ExprInlineAsm`][37445]
8064 * [Replace all uses of SHA-256 with BLAKE2b][37439]
8065 * [Reduce the number of bytes hashed by `IchHasher`][37427]
8066 * [Avoid more allocations when compiling html5ever][37373]
8067 * [Use `SmallVector` in `CombineFields::instantiate`][37322]
8068 * [Avoid some allocations in the macro parser][37318]
8069 * [Use a faster deflate setting][37298]
8070 * [Add `ArrayVec` and `AccumulateVec` to reduce heap allocations
8071 during interning of slices][37270]
8072 * [Optimize `write_metadata`][37267]
8073 * [Don't process obligation forest cycles when stalled][37231]
8074 * [Avoid many `CrateConfig` clones][37161]
8075 * [Optimize `Substs::super_fold_with`][37108]
8076 * [Optimize `ObligationForest`'s `NodeState` handling][36993]
8077 * [Speed up `plug_leaks`][36917]
8078
8079 Libraries
8080 ---------
8081
8082 * [`println!()`, with no arguments, prints newline][36825].
8083 Previously, an empty string was required to achieve the same.
8084 * [`Wrapping` impls standard binary and unary operators, as well as
8085 the `Sum` and `Product` iterators][37356]
8086 * [Implement `From<Cow<str>> for String` and `From<Cow<[T]>> for
8087 Vec<T>`][37326]
8088 * [Improve `fold` performance for `chain`, `cloned`, `map`, and
8089 `VecDeque` iterators][37315]
8090 * [Improve `SipHasher` performance on small values][37312]
8091 * [Add Iterator trait TrustedLen to enable better FromIterator /
8092 Extend][37306]
8093 * [Expand `.zip()` specialization to `.map()` and `.cloned()`][37230]
8094 * [`ReadDir` implements `Debug`][37221]
8095 * [Implement `RefUnwindSafe` for atomic types][37178]
8096 * [Specialize `Vec::extend` to `Vec::extend_from_slice`][37094]
8097 * [Avoid allocations in `Decoder::read_str`][37064]
8098 * [`io::Error` implements `From<io::ErrorKind>`][37037]
8099 * [Impl `Debug` for raw pointers to unsized data][36880]
8100 * [Don't reuse `HashMap` random seeds][37470]
8101 * [The internal memory layout of `HashMap` is more cache-friendly, for
8102 significant improvements in some operations][36692]
8103 * [`HashMap` uses less memory on 32-bit architectures][36595]
8104 * [Impl `Add<{str, Cow<str>}>` for `Cow<str>`][36430]
8105
8106 Cargo
8107 -----
8108
8109 * [Expose rustc cfg values to build scripts][cargo/3243]
8110 * [Allow cargo to work with read-only `CARGO_HOME`][cargo/3259]
8111 * [Fix passing --features when testing multiple packages][cargo/3280]
8112 * [Use a single profile set per workspace][cargo/3249]
8113 * [Load `replace` sections from lock files][cargo/3220]
8114 * [Ignore `panic` configuration for test/bench profiles][cargo/3175]
8115
8116 Tooling
8117 -------
8118
8119 * [rustup is the recommended Rust installation method][1.14rustup]
8120 * This release includes host (rustc) builds for Linux on MIPS, PowerPC, and
8121 S390x. These are [tier 2] platforms and may have major defects. Follow the
8122 instructions on the website to install, or add the targets to an existing
8123 installation with `rustup target add`. The new target triples are:
8124 - `mips-unknown-linux-gnu`
8125 - `mipsel-unknown-linux-gnu`
8126 - `mips64-unknown-linux-gnuabi64`
8127 - `mips64el-unknown-linux-gnuabi64 `
8128 - `powerpc-unknown-linux-gnu`
8129 - `powerpc64-unknown-linux-gnu`
8130 - `powerpc64le-unknown-linux-gnu`
8131 - `s390x-unknown-linux-gnu `
8132 * This release includes target (std) builds for ARM Linux running MUSL
8133 libc. These are [tier 2] platforms and may have major defects. Add the
8134 following triples to an existing rustup installation with `rustup target add`:
8135 - `arm-unknown-linux-musleabi`
8136 - `arm-unknown-linux-musleabihf`
8137 - `armv7-unknown-linux-musleabihf`
8138 * This release includes [experimental support for WebAssembly][1.14wasm], via
8139 the `wasm32-unknown-emscripten` target. This target is known to have major
8140 defects. Please test, report, and fix.
8141 * rustup no longer installs documentation by default. Run `rustup
8142 component add rust-docs` to install.
8143 * [Fix line stepping in debugger][37310]
8144 * [Enable line number debuginfo in releases][37280]
8145
8146 Misc
8147 ----
8148
8149 * [Disable jemalloc on aarch64/powerpc/mips][37392]
8150 * [Add support for Fuchsia OS][37313]
8151 * [Detect local-rebuild by only MAJOR.MINOR version][37273]
8152
8153 Compatibility Notes
8154 -------------------
8155
8156 * [A number of forward-compatibility lints used by the compiler
8157 to gradually introduce language changes have been converted
8158 to deny by default][36894]:
8159 - ["use of inaccessible extern crate erroneously allowed"][36886]
8160 - ["type parameter default erroneously allowed in invalid location"][36887]
8161 - ["detects super or self keywords at the beginning of global path"][36888]
8162 - ["two overlapping inherent impls define an item with the same name
8163 were erroneously allowed"][36889]
8164 - ["floating-point constants cannot be used in patterns"][36890]
8165 - ["constants of struct or enum type can only be used in a pattern if
8166 the struct or enum has `#[derive(PartialEq, Eq)]`"][36891]
8167 - ["lifetimes or labels named `'_` were erroneously allowed"][36892]
8168 * [Prohibit patterns in trait methods without bodies][37378]
8169 * [The atomic `Ordering` enum may not be matched exhaustively][37351]
8170 * [Future-proofing `#[no_link]` breaks some obscure cases][37247]
8171 * [The `$crate` macro variable is accepted in fewer locations][37213]
8172 * [Impls specifying extra region requirements beyond the trait
8173 they implement are rejected][37167]
8174 * [Enums may not be unsized][37111]. Unsized enums are intended to
8175 work but never have. For now they are forbidden.
8176 * [Enforce the shadowing restrictions from RFC 1560 for today's macros][36767]
8177
8178 [tier 2]: https://forge.rust-lang.org/platform-support.html
8179 [1.14rustup]: https://internals.rust-lang.org/t/beta-testing-rustup-rs/3316/204
8180 [1.14wasm]: https://users.rust-lang.org/t/compiling-to-the-web-with-rust-and-emscripten/7627
8181 [36430]: https://github.com/rust-lang/rust/pull/36430
8182 [36595]: https://github.com/rust-lang/rust/pull/36595
8183 [36692]: https://github.com/rust-lang/rust/pull/36692
8184 [36767]: https://github.com/rust-lang/rust/pull/36767
8185 [36794]: https://github.com/rust-lang/rust/pull/36794
8186 [36798]: https://github.com/rust-lang/rust/pull/36798
8187 [36819]: https://github.com/rust-lang/rust/pull/36819
8188 [36822]: https://github.com/rust-lang/rust/pull/36822
8189 [36825]: https://github.com/rust-lang/rust/pull/36825
8190 [36843]: https://github.com/rust-lang/rust/pull/36843
8191 [36880]: https://github.com/rust-lang/rust/pull/36880
8192 [36886]: https://github.com/rust-lang/rust/issues/36886
8193 [36887]: https://github.com/rust-lang/rust/issues/36887
8194 [36888]: https://github.com/rust-lang/rust/issues/36888
8195 [36889]: https://github.com/rust-lang/rust/issues/36889
8196 [36890]: https://github.com/rust-lang/rust/issues/36890
8197 [36891]: https://github.com/rust-lang/rust/issues/36891
8198 [36892]: https://github.com/rust-lang/rust/issues/36892
8199 [36894]: https://github.com/rust-lang/rust/pull/36894
8200 [36917]: https://github.com/rust-lang/rust/pull/36917
8201 [36993]: https://github.com/rust-lang/rust/pull/36993
8202 [37037]: https://github.com/rust-lang/rust/pull/37037
8203 [37064]: https://github.com/rust-lang/rust/pull/37064
8204 [37094]: https://github.com/rust-lang/rust/pull/37094
8205 [37108]: https://github.com/rust-lang/rust/pull/37108
8206 [37111]: https://github.com/rust-lang/rust/pull/37111
8207 [37161]: https://github.com/rust-lang/rust/pull/37161
8208 [37162]: https://github.com/rust-lang/rust/pull/37162
8209 [37167]: https://github.com/rust-lang/rust/pull/37167
8210 [37178]: https://github.com/rust-lang/rust/pull/37178
8211 [37200]: https://github.com/rust-lang/rust/pull/37200
8212 [37213]: https://github.com/rust-lang/rust/pull/37213
8213 [37221]: https://github.com/rust-lang/rust/pull/37221
8214 [37224]: https://github.com/rust-lang/rust/pull/37224
8215 [37230]: https://github.com/rust-lang/rust/pull/37230
8216 [37231]: https://github.com/rust-lang/rust/pull/37231
8217 [37247]: https://github.com/rust-lang/rust/pull/37247
8218 [37267]: https://github.com/rust-lang/rust/pull/37267
8219 [37270]: https://github.com/rust-lang/rust/pull/37270
8220 [37273]: https://github.com/rust-lang/rust/pull/37273
8221 [37280]: https://github.com/rust-lang/rust/pull/37280
8222 [37298]: https://github.com/rust-lang/rust/pull/37298
8223 [37306]: https://github.com/rust-lang/rust/pull/37306
8224 [37310]: https://github.com/rust-lang/rust/pull/37310
8225 [37312]: https://github.com/rust-lang/rust/pull/37312
8226 [37313]: https://github.com/rust-lang/rust/pull/37313
8227 [37315]: https://github.com/rust-lang/rust/pull/37315
8228 [37318]: https://github.com/rust-lang/rust/pull/37318
8229 [37322]: https://github.com/rust-lang/rust/pull/37322
8230 [37326]: https://github.com/rust-lang/rust/pull/37326
8231 [37351]: https://github.com/rust-lang/rust/pull/37351
8232 [37356]: https://github.com/rust-lang/rust/pull/37356
8233 [37367]: https://github.com/rust-lang/rust/pull/37367
8234 [37373]: https://github.com/rust-lang/rust/pull/37373
8235 [37378]: https://github.com/rust-lang/rust/pull/37378
8236 [37389]: https://github.com/rust-lang/rust/pull/37389
8237 [37392]: https://github.com/rust-lang/rust/pull/37392
8238 [37427]: https://github.com/rust-lang/rust/pull/37427
8239 [37439]: https://github.com/rust-lang/rust/pull/37439
8240 [37445]: https://github.com/rust-lang/rust/pull/37445
8241 [37470]: https://github.com/rust-lang/rust/pull/37470
8242 [37569]: https://github.com/rust-lang/rust/pull/37569
8243 [RFC 1492]: https://github.com/rust-lang/rfcs/blob/master/text/1492-dotdot-in-patterns.md
8244 [cargo/3175]: https://github.com/rust-lang/cargo/pull/3175
8245 [cargo/3220]: https://github.com/rust-lang/cargo/pull/3220
8246 [cargo/3243]: https://github.com/rust-lang/cargo/pull/3243
8247 [cargo/3249]: https://github.com/rust-lang/cargo/pull/3249
8248 [cargo/3259]: https://github.com/rust-lang/cargo/pull/3259
8249 [cargo/3280]: https://github.com/rust-lang/cargo/pull/3280
8250
8251
8252 Version 1.13.0 (2016-11-10)
8253 ===========================
8254
8255 Language
8256 --------
8257
8258 * [Stabilize the `?` operator][36995]. `?` is a simple way to propagate
8259 errors, like the `try!` macro, described in [RFC 0243].
8260 * [Stabilize macros in type position][36014]. Described in [RFC 873].
8261 * [Stabilize attributes on statements][36995]. Described in [RFC 0016].
8262 * [Fix `#[derive]` for empty tuple structs/variants][35728]
8263 * [Fix lifetime rules for 'if' conditions][36029]
8264 * [Avoid loading and parsing unconfigured non-inline modules][36482]
8265
8266 Compiler
8267 --------
8268
8269 * [Add the `-C link-arg` argument][36574]
8270 * [Remove the old AST-based backend from rustc_trans][35764]
8271 * [Don't enable NEON by default on armv7 Linux][35814]
8272 * [Fix debug line number info for macro expansions][35238]
8273 * [Do not emit "class method" debuginfo for types that are not
8274 DICompositeType][36008]
8275 * [Warn about multiple conflicting #[repr] hints][34623]
8276 * [When sizing DST, don't double-count nested struct prefixes][36351]
8277 * [Default RUST_MIN_STACK to 16MiB for now][36505]
8278 * [Improve rlib metadata format][36551]. Reduces rlib size significantly.
8279 * [Reject macros with empty repetitions to avoid infinite loop][36721]
8280 * [Expand macros without recursing to avoid stack overflows][36214]
8281
8282 Diagnostics
8283 -----------
8284
8285 * [Replace macro backtraces with labeled local uses][35702]
8286 * [Improve error message for misplaced doc comments][33922]
8287 * [Buffer unix and lock windows to prevent message interleaving][35975]
8288 * [Update lifetime errors to specifically note temporaries][36171]
8289 * [Special case a few colors for Windows][36178]
8290 * [Suggest `use self` when such an import resolves][36289]
8291 * [Be more specific when type parameter shadows primitive type][36338]
8292 * Many minor improvements
8293
8294 Compile-time Optimizations
8295 --------------------------
8296
8297 * [Compute and cache HIR hashes at beginning][35854]
8298 * [Don't hash types in loan paths][36004]
8299 * [Cache projections in trans][35761]
8300 * [Optimize the parser's last token handling][36527]
8301 * [Only instantiate #[inline] functions in codegen units referencing
8302 them][36524]. This leads to big improvements in cases where crates export
8303 define many inline functions without using them directly.
8304 * [Lazily allocate TypedArena's first chunk][36592]
8305 * [Don't allocate during default HashSet creation][36734]
8306
8307 Stabilized APIs
8308 ---------------
8309
8310 * [`checked_abs`]
8311 * [`wrapping_abs`]
8312 * [`overflowing_abs`]
8313 * [`RefCell::try_borrow`]
8314 * [`RefCell::try_borrow_mut`]
8315
8316 Libraries
8317 ---------
8318
8319 * [Add `assert_ne!` and `debug_assert_ne!`][35074]
8320 * [Make `vec_deque::Drain`, `hash_map::Drain`, and `hash_set::Drain`
8321 covariant][35354]
8322 * [Implement `AsRef<[T]>` for `std::slice::Iter`][35559]
8323 * [Implement `Debug` for `std::vec::IntoIter`][35707]
8324 * [`CString`: avoid excessive growth just to 0-terminate][35871]
8325 * [Implement `CoerceUnsized` for `{Cell, RefCell, UnsafeCell}`][35627]
8326 * [Use arc4rand on FreeBSD][35884]
8327 * [memrchr: Correct aligned offset computation][35969]
8328 * [Improve Demangling of Rust Symbols][36059]
8329 * [Use monotonic time in condition variables][35048]
8330 * [Implement `Debug` for `std::path::{Components,Iter}`][36101]
8331 * [Implement conversion traits for `char`][35755]
8332 * [Fix illegal instruction caused by overflow in channel cloning][36104]
8333 * [Zero first byte of CString on drop][36264]
8334 * [Inherit overflow checks for sum and product][36372]
8335 * [Add missing Eq implementations][36423]
8336 * [Implement `Debug` for `DirEntry`][36631]
8337 * [When `getaddrinfo` returns `EAI_SYSTEM` retrieve actual error from
8338 `errno`][36754]
8339 * [`SipHasher`] is deprecated. Use [`DefaultHasher`].
8340 * [Implement more traits for `std::io::ErrorKind`][35911]
8341 * [Optimize BinaryHeap bounds checking][36072]
8342 * [Work around pointer aliasing issue in `Vec::extend_from_slice`,
8343 `extend_with_element`][36355]
8344 * [Fix overflow checking in unsigned pow()][34942]
8345
8346 Cargo
8347 -----
8348
8349 * This release includes security fixes to both curl and OpenSSL.
8350 * [Fix transitive doctests when panic=abort][cargo/3021]
8351 * [Add --all-features flag to cargo][cargo/3038]
8352 * [Reject path-based dependencies in `cargo package`][cargo/3060]
8353 * [Don't parse the home directory more than once][cargo/3078]
8354 * [Don't try to generate Cargo.lock on empty workspaces][cargo/3092]
8355 * [Update OpenSSL to 1.0.2j][cargo/3121]
8356 * [Add license and license_file to cargo metadata output][cargo/3110]
8357 * [Make crates-io registry URL optional in config; ignore all changes to
8358 source.crates-io][cargo/3089]
8359 * [Don't download dependencies from other platforms][cargo/3123]
8360 * [Build transitive dev-dependencies when needed][cargo/3125]
8361 * [Add support for per-target rustflags in .cargo/config][cargo/3157]
8362 * [Avoid updating registry when adding existing deps][cargo/3144]
8363 * [Warn about path overrides that won't work][cargo/3136]
8364 * [Use workspaces during `cargo install`][cargo/3146]
8365 * [Leak mspdbsrv.exe processes on Windows][cargo/3162]
8366 * [Add --message-format flag][cargo/3000]
8367 * [Pass target environment for rustdoc][cargo/3205]
8368 * [Use `CommandExt::exec` for `cargo run` on Unix][cargo/2818]
8369 * [Update curl and curl-sys][cargo/3241]
8370 * [Call rustdoc test with the correct cfg flags of a package][cargo/3242]
8371
8372 Tooling
8373 -------
8374
8375 * [rustdoc: Add the `--sysroot` argument][36586]
8376 * [rustdoc: Fix a couple of issues with the search results][35655]
8377 * [rustdoc: remove the `!` from macro URLs and titles][35234]
8378 * [gdb: Fix pretty-printing special-cased Rust types][35585]
8379 * [rustdoc: Filter more incorrect methods inherited through Deref][36266]
8380
8381 Misc
8382 ----
8383
8384 * [Remove unmaintained style guide][35124]
8385 * [Add s390x support][36369]
8386 * [Initial work at Haiku OS support][36727]
8387 * [Add mips-uclibc targets][35734]
8388 * [Crate-ify compiler-rt into compiler-builtins][35021]
8389 * [Add rustc version info (git hash + date) to dist tarball][36213]
8390 * Many documentation improvements
8391
8392 Compatibility Notes
8393 -------------------
8394
8395 * [`SipHasher`] is deprecated. Use [`DefaultHasher`].
8396 * [Deny (by default) transmuting from fn item types to pointer-sized
8397 types][34923]. Continuing the long transition to zero-sized fn items,
8398 per [RFC 401].
8399 * [Fix `#[derive]` for empty tuple structs/variants][35728].
8400 Part of [RFC 1506].
8401 * [Issue deprecation warnings for safe accesses to extern statics][36173]
8402 * [Fix lifetime rules for 'if' conditions][36029].
8403 * [Inherit overflow checks for sum and product][36372].
8404 * [Forbid user-defined macros named "macro_rules"][36730].
8405
8406 [33922]: https://github.com/rust-lang/rust/pull/33922
8407 [34623]: https://github.com/rust-lang/rust/pull/34623
8408 [34923]: https://github.com/rust-lang/rust/pull/34923
8409 [34942]: https://github.com/rust-lang/rust/pull/34942
8410 [35021]: https://github.com/rust-lang/rust/pull/35021
8411 [35048]: https://github.com/rust-lang/rust/pull/35048
8412 [35074]: https://github.com/rust-lang/rust/pull/35074
8413 [35124]: https://github.com/rust-lang/rust/pull/35124
8414 [35234]: https://github.com/rust-lang/rust/pull/35234
8415 [35238]: https://github.com/rust-lang/rust/pull/35238
8416 [35354]: https://github.com/rust-lang/rust/pull/35354
8417 [35559]: https://github.com/rust-lang/rust/pull/35559
8418 [35585]: https://github.com/rust-lang/rust/pull/35585
8419 [35627]: https://github.com/rust-lang/rust/pull/35627
8420 [35655]: https://github.com/rust-lang/rust/pull/35655
8421 [35702]: https://github.com/rust-lang/rust/pull/35702
8422 [35707]: https://github.com/rust-lang/rust/pull/35707
8423 [35728]: https://github.com/rust-lang/rust/pull/35728
8424 [35734]: https://github.com/rust-lang/rust/pull/35734
8425 [35755]: https://github.com/rust-lang/rust/pull/35755
8426 [35761]: https://github.com/rust-lang/rust/pull/35761
8427 [35764]: https://github.com/rust-lang/rust/pull/35764
8428 [35814]: https://github.com/rust-lang/rust/pull/35814
8429 [35854]: https://github.com/rust-lang/rust/pull/35854
8430 [35871]: https://github.com/rust-lang/rust/pull/35871
8431 [35884]: https://github.com/rust-lang/rust/pull/35884
8432 [35911]: https://github.com/rust-lang/rust/pull/35911
8433 [35969]: https://github.com/rust-lang/rust/pull/35969
8434 [35975]: https://github.com/rust-lang/rust/pull/35975
8435 [36004]: https://github.com/rust-lang/rust/pull/36004
8436 [36008]: https://github.com/rust-lang/rust/pull/36008
8437 [36014]: https://github.com/rust-lang/rust/pull/36014
8438 [36029]: https://github.com/rust-lang/rust/pull/36029
8439 [36059]: https://github.com/rust-lang/rust/pull/36059
8440 [36072]: https://github.com/rust-lang/rust/pull/36072
8441 [36101]: https://github.com/rust-lang/rust/pull/36101
8442 [36104]: https://github.com/rust-lang/rust/pull/36104
8443 [36171]: https://github.com/rust-lang/rust/pull/36171
8444 [36173]: https://github.com/rust-lang/rust/pull/36173
8445 [36178]: https://github.com/rust-lang/rust/pull/36178
8446 [36213]: https://github.com/rust-lang/rust/pull/36213
8447 [36214]: https://github.com/rust-lang/rust/pull/36214
8448 [36264]: https://github.com/rust-lang/rust/pull/36264
8449 [36266]: https://github.com/rust-lang/rust/pull/36266
8450 [36289]: https://github.com/rust-lang/rust/pull/36289
8451 [36338]: https://github.com/rust-lang/rust/pull/36338
8452 [36351]: https://github.com/rust-lang/rust/pull/36351
8453 [36355]: https://github.com/rust-lang/rust/pull/36355
8454 [36369]: https://github.com/rust-lang/rust/pull/36369
8455 [36372]: https://github.com/rust-lang/rust/pull/36372
8456 [36423]: https://github.com/rust-lang/rust/pull/36423
8457 [36482]: https://github.com/rust-lang/rust/pull/36482
8458 [36505]: https://github.com/rust-lang/rust/pull/36505
8459 [36524]: https://github.com/rust-lang/rust/pull/36524
8460 [36527]: https://github.com/rust-lang/rust/pull/36527
8461 [36551]: https://github.com/rust-lang/rust/pull/36551
8462 [36574]: https://github.com/rust-lang/rust/pull/36574
8463 [36586]: https://github.com/rust-lang/rust/pull/36586
8464 [36592]: https://github.com/rust-lang/rust/pull/36592
8465 [36631]: https://github.com/rust-lang/rust/pull/36631
8466 [36721]: https://github.com/rust-lang/rust/pull/36721
8467 [36727]: https://github.com/rust-lang/rust/pull/36727
8468 [36730]: https://github.com/rust-lang/rust/pull/36730
8469 [36734]: https://github.com/rust-lang/rust/pull/36734
8470 [36754]: https://github.com/rust-lang/rust/pull/36754
8471 [36995]: https://github.com/rust-lang/rust/pull/36995
8472 [RFC 0016]: https://github.com/rust-lang/rfcs/blob/master/text/0016-more-attributes.md
8473 [RFC 0243]: https://github.com/rust-lang/rfcs/blob/master/text/0243-trait-based-exception-handling.md
8474 [RFC 1506]: https://github.com/rust-lang/rfcs/blob/master/text/1506-adt-kinds.md
8475 [RFC 401]: https://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.md
8476 [RFC 873]: https://github.com/rust-lang/rfcs/blob/master/text/0873-type-macros.md
8477 [cargo/2818]: https://github.com/rust-lang/cargo/pull/2818
8478 [cargo/3000]: https://github.com/rust-lang/cargo/pull/3000
8479 [cargo/3021]: https://github.com/rust-lang/cargo/pull/3021
8480 [cargo/3038]: https://github.com/rust-lang/cargo/pull/3038
8481 [cargo/3060]: https://github.com/rust-lang/cargo/pull/3060
8482 [cargo/3078]: https://github.com/rust-lang/cargo/pull/3078
8483 [cargo/3089]: https://github.com/rust-lang/cargo/pull/3089
8484 [cargo/3092]: https://github.com/rust-lang/cargo/pull/3092
8485 [cargo/3110]: https://github.com/rust-lang/cargo/pull/3110
8486 [cargo/3121]: https://github.com/rust-lang/cargo/pull/3121
8487 [cargo/3123]: https://github.com/rust-lang/cargo/pull/3123
8488 [cargo/3125]: https://github.com/rust-lang/cargo/pull/3125
8489 [cargo/3136]: https://github.com/rust-lang/cargo/pull/3136
8490 [cargo/3144]: https://github.com/rust-lang/cargo/pull/3144
8491 [cargo/3146]: https://github.com/rust-lang/cargo/pull/3146
8492 [cargo/3157]: https://github.com/rust-lang/cargo/pull/3157
8493 [cargo/3162]: https://github.com/rust-lang/cargo/pull/3162
8494 [cargo/3205]: https://github.com/rust-lang/cargo/pull/3205
8495 [cargo/3241]: https://github.com/rust-lang/cargo/pull/3241
8496 [cargo/3242]: https://github.com/rust-lang/cargo/pull/3242
8497 [`checked_abs`]: https://doc.rust-lang.org/std/primitive.i32.html#method.checked_abs
8498 [`wrapping_abs`]: https://doc.rust-lang.org/std/primitive.i32.html#method.wrapping_abs
8499 [`overflowing_abs`]: https://doc.rust-lang.org/std/primitive.i32.html#method.overflowing_abs
8500 [`RefCell::try_borrow`]: https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.try_borrow
8501 [`RefCell::try_borrow_mut`]: https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.try_borrow_mut
8502 [`SipHasher`]: https://doc.rust-lang.org/std/hash/struct.SipHasher.html
8503 [`DefaultHasher`]: https://doc.rust-lang.org/std/collections/hash_map/struct.DefaultHasher.html
8504
8505
8506 Version 1.12.1 (2016-10-20)
8507 ===========================
8508
8509 Regression Fixes
8510 ----------------
8511
8512 * [ICE: 'rustc' panicked at 'assertion failed: concrete_substs.is_normalized_for_trans()' #36381][36381]
8513 * [Confusion with double negation and booleans][36856]
8514 * [rustc 1.12.0 fails with SIGSEGV in release mode (syn crate 0.8.0)][36875]
8515 * [Rustc 1.12.0 Windows build of `ethcore` crate fails with LLVM error][36924]
8516 * [1.12.0: High memory usage when linking in release mode with debug info][36926]
8517 * [Corrupted memory after updated to 1.12][36936]
8518 * ["Let NullaryConstructor = something;" causes internal compiler error: "tried to overwrite interned AdtDef"][37026]
8519 * [Fix ICE: inject bitcast if types mismatch for invokes/calls/stores][37112]
8520 * [debuginfo: Handle spread_arg case in MIR-trans in a more stable way.][37153]
8521
8522 [36381]: https://github.com/rust-lang/rust/issues/36381
8523 [36856]: https://github.com/rust-lang/rust/issues/36856
8524 [36875]: https://github.com/rust-lang/rust/issues/36875
8525 [36924]: https://github.com/rust-lang/rust/issues/36924
8526 [36926]: https://github.com/rust-lang/rust/issues/36926
8527 [36936]: https://github.com/rust-lang/rust/issues/36936
8528 [37026]: https://github.com/rust-lang/rust/issues/37026
8529 [37112]: https://github.com/rust-lang/rust/issues/37112
8530 [37153]: https://github.com/rust-lang/rust/issues/37153
8531
8532
8533 Version 1.12.0 (2016-09-29)
8534 ===========================
8535
8536 Highlights
8537 ----------
8538
8539 * [`rustc` translates code to LLVM IR via its own "middle" IR (MIR)](https://github.com/rust-lang/rust/pull/34096).
8540 This translation pass is far simpler than the previous AST->LLVM pass, and
8541 creates opportunities to perform new optimizations directly on the MIR. It
8542 was previously described [on the Rust blog](https://blog.rust-lang.org/2016/04/19/MIR.html).
8543 * [`rustc` presents a new, more readable error format, along with
8544 machine-readable JSON error output for use by IDEs](https://github.com/rust-lang/rust/pull/35401).
8545 Most common editors supporting Rust have been updated to work with it. It was
8546 previously described [on the Rust blog](https://blog.rust-lang.org/2016/08/10/Shape-of-errors-to-come.html).
8547
8548 Compiler
8549 --------
8550
8551 * [`rustc` translates code to LLVM IR via its own "middle" IR (MIR)](https://github.com/rust-lang/rust/pull/34096).
8552 This translation pass is far simpler than the previous AST->LLVM pass, and
8553 creates opportunities to perform new optimizations directly on the MIR. It
8554 was previously described [on the Rust blog](https://blog.rust-lang.org/2016/04/19/MIR.html).
8555 * [Print the Rust target name, not the LLVM target name, with
8556 `--print target-list`](https://github.com/rust-lang/rust/pull/35489)
8557 * [The computation of `TypeId` is correct in some cases where it was previously
8558 producing inconsistent results](https://github.com/rust-lang/rust/pull/35267)
8559 * [The `mips-unknown-linux-gnu` target uses hardware floating point by default](https://github.com/rust-lang/rust/pull/34910)
8560 * [The `rustc` arguments, `--print target-cpus`, `--print target-features`,
8561 `--print relocation-models`, and `--print code-models` print the available
8562 options to the `-C target-cpu`, `-C target-feature`, `-C relocation-model` and
8563 `-C code-model` code generation arguments](https://github.com/rust-lang/rust/pull/34845)
8564 * [`rustc` supports three new MUSL targets on ARM: `arm-unknown-linux-musleabi`,
8565 `arm-unknown-linux-musleabihf`, and `armv7-unknown-linux-musleabihf`](https://github.com/rust-lang/rust/pull/35060).
8566 These targets produce statically-linked binaries. There are no binary release
8567 builds yet though.
8568
8569 Diagnostics
8570 -----------
8571
8572 * [`rustc` presents a new, more readable error format, along with
8573 machine-readable JSON error output for use by IDEs](https://github.com/rust-lang/rust/pull/35401).
8574 Most common editors supporting Rust have been updated to work with it. It was
8575 previously described [on the Rust blog](https://blog.rust-lang.org/2016/08/10/Shape-of-errors-to-come.html).
8576 * [In error descriptions, references are now described in plain English,
8577 instead of as "&-ptr"](https://github.com/rust-lang/rust/pull/35611)
8578 * [In error type descriptions, unknown numeric types are named `{integer}` or
8579 `{float}` instead of `_`](https://github.com/rust-lang/rust/pull/35080)
8580 * [`rustc` emits a clearer error when inner attributes follow a doc comment](https://github.com/rust-lang/rust/pull/34676)
8581
8582 Language
8583 --------
8584
8585 * [`macro_rules!` invocations can be made within `macro_rules!` invocations](https://github.com/rust-lang/rust/pull/34925)
8586 * [`macro_rules!` meta-variables are hygienic](https://github.com/rust-lang/rust/pull/35453)
8587 * [`macro_rules!` `tt` matchers can be reparsed correctly, making them much more
8588 useful](https://github.com/rust-lang/rust/pull/34908)
8589 * [`macro_rules!` `stmt` matchers correctly consume the entire contents when
8590 inside non-braces invocations](https://github.com/rust-lang/rust/pull/34886)
8591 * [Semicolons are properly required as statement delimiters inside
8592 `macro_rules!` invocations](https://github.com/rust-lang/rust/pull/34660)
8593 * [`cfg_attr` works on `path` attributes](https://github.com/rust-lang/rust/pull/34546)
8594
8595 Stabilized APIs
8596 ---------------
8597
8598 * [`Cell::as_ptr`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.as_ptr)
8599 * [`RefCell::as_ptr`](https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.as_ptr)
8600 * [`IpAddr::is_unspecified`](https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_unspecified)
8601 * [`IpAddr::is_loopback`](https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_loopback)
8602 * [`IpAddr::is_multicast`](https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_multicast)
8603 * [`Ipv4Addr::is_unspecified`](https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html#method.is_unspecified)
8604 * [`Ipv6Addr::octets`](https://doc.rust-lang.org/std/net/struct.Ipv6Addr.html#method.octets)
8605 * [`LinkedList::contains`](https://doc.rust-lang.org/std/collections/linked_list/struct.LinkedList.html#method.contains)
8606 * [`VecDeque::contains`](https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.contains)
8607 * [`ExitStatusExt::from_raw`](https://doc.rust-lang.org/std/os/unix/process/trait.ExitStatusExt.html#tymethod.from_raw).
8608 Both on Unix and Windows.
8609 * [`Receiver::recv_timeout`](https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver.html#method.recv_timeout)
8610 * [`RecvTimeoutError`](https://doc.rust-lang.org/std/sync/mpsc/enum.RecvTimeoutError.html)
8611 * [`BinaryHeap::peek_mut`](https://doc.rust-lang.org/std/collections/binary_heap/struct.BinaryHeap.html#method.peek_mut)
8612 * [`PeekMut`](https://doc.rust-lang.org/std/collections/binary_heap/struct.PeekMut.html)
8613 * [`iter::Product`](https://doc.rust-lang.org/std/iter/trait.Product.html)
8614 * [`iter::Sum`](https://doc.rust-lang.org/std/iter/trait.Sum.html)
8615 * [`OccupiedEntry::remove_entry`](https://doc.rust-lang.org/std/collections/btree_map/struct.OccupiedEntry.html#method.remove_entry)
8616 * [`VacantEntry::into_key`](https://doc.rust-lang.org/std/collections/btree_map/struct.VacantEntry.html#method.into_key)
8617
8618 Libraries
8619 ---------
8620
8621 * [The `format!` macro and friends now allow a single argument to be formatted
8622 in multiple styles](https://github.com/rust-lang/rust/pull/33642)
8623 * [The lifetime bounds on `[T]::binary_search_by` and
8624 `[T]::binary_search_by_key` have been adjusted to be more flexible](https://github.com/rust-lang/rust/pull/34762)
8625 * [`Option` implements `From` for its contained type](https://github.com/rust-lang/rust/pull/34828)
8626 * [`Cell`, `RefCell` and `UnsafeCell` implement `From` for their contained type](https://github.com/rust-lang/rust/pull/35392)
8627 * [`RwLock` panics if the reader count overflows](https://github.com/rust-lang/rust/pull/35378)
8628 * [`vec_deque::Drain`, `hash_map::Drain` and `hash_set::Drain` are covariant](https://github.com/rust-lang/rust/pull/35354)
8629 * [`vec::Drain` and `binary_heap::Drain` are covariant](https://github.com/rust-lang/rust/pull/34951)
8630 * [`Cow<str>` implements `FromIterator` for `char`, `&str` and `String`](https://github.com/rust-lang/rust/pull/35064)
8631 * [Sockets on Linux are correctly closed in subprocesses via `SOCK_CLOEXEC`](https://github.com/rust-lang/rust/pull/34946)
8632 * [`hash_map::Entry`, `hash_map::VacantEntry` and `hash_map::OccupiedEntry`
8633 implement `Debug`](https://github.com/rust-lang/rust/pull/34937)
8634 * [`btree_map::Entry`, `btree_map::VacantEntry` and `btree_map::OccupiedEntry`
8635 implement `Debug`](https://github.com/rust-lang/rust/pull/34885)
8636 * [`String` implements `AddAssign`](https://github.com/rust-lang/rust/pull/34890)
8637 * [Variadic `extern fn` pointers implement the `Clone`, `PartialEq`, `Eq`,
8638 `PartialOrd`, `Ord`, `Hash`, `fmt::Pointer`, and `fmt::Debug` traits](https://github.com/rust-lang/rust/pull/34879)
8639 * [`FileType` implements `Debug`](https://github.com/rust-lang/rust/pull/34757)
8640 * [References to `Mutex` and `RwLock` are unwind-safe](https://github.com/rust-lang/rust/pull/34756)
8641 * [`mpsc::sync_channel` `Receiver`s return any available message before
8642 reporting a disconnect](https://github.com/rust-lang/rust/pull/34731)
8643 * [Unicode definitions have been updated to 9.0](https://github.com/rust-lang/rust/pull/34599)
8644 * [`env` iterators implement `DoubleEndedIterator`](https://github.com/rust-lang/rust/pull/33312)
8645
8646 Cargo
8647 -----
8648
8649 * [Support local mirrors of registries](https://github.com/rust-lang/cargo/pull/2857)
8650 * [Add support for command aliases](https://github.com/rust-lang/cargo/pull/2679)
8651 * [Allow `opt-level="s"` / `opt-level="z"` in profile overrides](https://github.com/rust-lang/cargo/pull/3007)
8652 * [Make `cargo doc --open --target` work as expected](https://github.com/rust-lang/cargo/pull/2988)
8653 * [Speed up noop registry updates](https://github.com/rust-lang/cargo/pull/2974)
8654 * [Update OpenSSL](https://github.com/rust-lang/cargo/pull/2971)
8655 * [Fix `--panic=abort` with plugins](https://github.com/rust-lang/cargo/pull/2954)
8656 * [Always pass `-C metadata` to the compiler](https://github.com/rust-lang/cargo/pull/2946)
8657 * [Fix depending on git repos with workspaces](https://github.com/rust-lang/cargo/pull/2938)
8658 * [Add a `--lib` flag to `cargo new`](https://github.com/rust-lang/cargo/pull/2921)
8659 * [Add `http.cainfo` for custom certs](https://github.com/rust-lang/cargo/pull/2917)
8660 * [Indicate the compilation profile after compiling](https://github.com/rust-lang/cargo/pull/2909)
8661 * [Allow enabling features for dependencies with `--features`](https://github.com/rust-lang/cargo/pull/2876)
8662 * [Add `--jobs` flag to `cargo package`](https://github.com/rust-lang/cargo/pull/2867)
8663 * [Add `--dry-run` to `cargo publish`](https://github.com/rust-lang/cargo/pull/2849)
8664 * [Add support for `RUSTDOCFLAGS`](https://github.com/rust-lang/cargo/pull/2794)
8665
8666 Performance
8667 -----------
8668
8669 * [`panic::catch_unwind` is more optimized](https://github.com/rust-lang/rust/pull/35444)
8670 * [`panic::catch_unwind` no longer accesses thread-local storage on entry](https://github.com/rust-lang/rust/pull/34866)
8671
8672 Tooling
8673 -------
8674
8675 * [Test binaries now support a `--test-threads` argument to specify the number
8676 of threads used to run tests, and which acts the same as the
8677 `RUST_TEST_THREADS` environment variable](https://github.com/rust-lang/rust/pull/35414)
8678 * [The test runner now emits a warning when tests run over 60 seconds](https://github.com/rust-lang/rust/pull/35405)
8679 * [rustdoc: Fix methods in search results](https://github.com/rust-lang/rust/pull/34752)
8680 * [`rust-lldb` warns about unsupported versions of LLDB](https://github.com/rust-lang/rust/pull/34646)
8681 * [Rust releases now come with source packages that can be installed by rustup
8682 via `rustup component add rust-src`](https://github.com/rust-lang/rust/pull/34366).
8683 The resulting source code can be used by tools and IDES, located in the
8684 sysroot under `lib/rustlib/src`.
8685
8686 Misc
8687 ----
8688
8689 * [The compiler can now be built against LLVM 3.9](https://github.com/rust-lang/rust/pull/35594)
8690 * Many minor improvements to the documentation.
8691 * [The Rust exception handling "personality" routine is now written in Rust](https://github.com/rust-lang/rust/pull/34832)
8692
8693 Compatibility Notes
8694 -------------------
8695
8696 * [When printing Windows `OsStr`s, unpaired surrogate codepoints are escaped
8697 with the lowercase format instead of the uppercase](https://github.com/rust-lang/rust/pull/35084)
8698 * [When formatting strings, if "precision" is specified, the "fill",
8699 "align" and "width" specifiers are no longer ignored](https://github.com/rust-lang/rust/pull/34544)
8700 * [The `Debug` impl for strings no longer escapes all non-ASCII characters](https://github.com/rust-lang/rust/pull/34485)
8701
8702
8703 Version 1.11.0 (2016-08-18)
8704 ===========================
8705
8706 Language
8707 --------
8708
8709 * [Support nested `cfg_attr` attributes](https://github.com/rust-lang/rust/pull/34216)
8710 * [Allow statement-generating braced macro invocations at the end of blocks](https://github.com/rust-lang/rust/pull/34436)
8711 * [Macros can be expanded inside of trait definitions](https://github.com/rust-lang/rust/pull/34213)
8712 * [`#[macro_use]` works properly when it is itself expanded from a macro](https://github.com/rust-lang/rust/pull/34032)
8713
8714 Stabilized APIs
8715 ---------------
8716
8717 * [`BinaryHeap::append`](https://doc.rust-lang.org/std/collections/binary_heap/struct.BinaryHeap.html#method.append)
8718 * [`BTreeMap::append`](https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.append)
8719 * [`BTreeMap::split_off`](https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.split_off)
8720 * [`BTreeSet::append`](https://doc.rust-lang.org/std/collections/btree_set/struct.BTreeSet.html#method.append)
8721 * [`BTreeSet::split_off`](https://doc.rust-lang.org/std/collections/btree_set/struct.BTreeSet.html#method.split_off)
8722 * [`f32::to_degrees`](https://doc.rust-lang.org/std/primitive.f32.html#method.to_degrees)
8723 (in libcore - previously stabilized in libstd)
8724 * [`f32::to_radians`](https://doc.rust-lang.org/std/primitive.f32.html#method.to_radians)
8725 (in libcore - previously stabilized in libstd)
8726 * [`f64::to_degrees`](https://doc.rust-lang.org/std/primitive.f64.html#method.to_degrees)
8727 (in libcore - previously stabilized in libstd)
8728 * [`f64::to_radians`](https://doc.rust-lang.org/std/primitive.f64.html#method.to_radians)
8729 (in libcore - previously stabilized in libstd)
8730 * [`Iterator::sum`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
8731 * [`Iterator::product`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
8732 * [`Cell::get_mut`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut)
8733 * [`RefCell::get_mut`](https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.get_mut)
8734
8735 Libraries
8736 ---------
8737
8738 * [The `thread_local!` macro supports multiple definitions in a single
8739 invocation, and can apply attributes](https://github.com/rust-lang/rust/pull/34077)
8740 * [`Cow` implements `Default`](https://github.com/rust-lang/rust/pull/34305)
8741 * [`Wrapping` implements binary, octal, lower-hex and upper-hex
8742 `Display` formatting](https://github.com/rust-lang/rust/pull/34190)
8743 * [The range types implement `Hash`](https://github.com/rust-lang/rust/pull/34180)
8744 * [`lookup_host` ignores unknown address types](https://github.com/rust-lang/rust/pull/34067)
8745 * [`assert_eq!` accepts a custom error message, like `assert!` does](https://github.com/rust-lang/rust/pull/33976)
8746 * [The main thread is now called "main" instead of "&lt;main&gt;"](https://github.com/rust-lang/rust/pull/33803)
8747
8748 Cargo
8749 -----
8750
8751 * [Disallow specifying features of transitive deps](https://github.com/rust-lang/cargo/pull/2821)
8752 * [Add color support for Windows consoles](https://github.com/rust-lang/cargo/pull/2804)
8753 * [Fix `harness = false` on `[lib]` sections](https://github.com/rust-lang/cargo/pull/2795)
8754 * [Don't panic when `links` contains a '.'](https://github.com/rust-lang/cargo/pull/2787)
8755 * [Build scripts can emit warnings](https://github.com/rust-lang/cargo/pull/2630),
8756 and `-vv` prints warnings for all crates.
8757 * [Ignore file locks on OS X NFS mounts](https://github.com/rust-lang/cargo/pull/2720)
8758 * [Don't warn about `package.metadata` keys](https://github.com/rust-lang/cargo/pull/2668).
8759 This provides room for expansion by arbitrary tools.
8760 * [Add support for cdylib crate types](https://github.com/rust-lang/cargo/pull/2741)
8761 * [Prevent publishing crates when files are dirty](https://github.com/rust-lang/cargo/pull/2781)
8762 * [Don't fetch all crates on clean](https://github.com/rust-lang/cargo/pull/2704)
8763 * [Propagate --color option to rustc](https://github.com/rust-lang/cargo/pull/2779)
8764 * [Fix `cargo doc --open` on Windows](https://github.com/rust-lang/cargo/pull/2780)
8765 * [Improve autocompletion](https://github.com/rust-lang/cargo/pull/2772)
8766 * [Configure colors of stderr as well as stdout](https://github.com/rust-lang/cargo/pull/2739)
8767
8768 Performance
8769 -----------
8770
8771 * [Caching projections speeds up type check dramatically for some
8772 workloads](https://github.com/rust-lang/rust/pull/33816)
8773 * [The default `HashMap` hasher is SipHash 1-3 instead of SipHash 2-4](https://github.com/rust-lang/rust/pull/33940)
8774 This hasher is faster, but is believed to provide sufficient
8775 protection from collision attacks.
8776 * [Comparison of `Ipv4Addr` is 10x faster](https://github.com/rust-lang/rust/pull/33891)
8777
8778 Rustdoc
8779 -------
8780
8781 * [Fix empty implementation section on some module pages](https://github.com/rust-lang/rust/pull/34536)
8782 * [Fix inlined renamed re-exports in import lists](https://github.com/rust-lang/rust/pull/34479)
8783 * [Fix search result layout for enum variants and struct fields](https://github.com/rust-lang/rust/pull/34477)
8784 * [Fix issues with source links to external crates](https://github.com/rust-lang/rust/pull/34387)
8785 * [Fix redirect pages for renamed re-exports](https://github.com/rust-lang/rust/pull/34245)
8786
8787 Tooling
8788 -------
8789
8790 * [rustc is better at finding the MSVC toolchain](https://github.com/rust-lang/rust/pull/34492)
8791 * [When emitting debug info, rustc emits frame pointers for closures,
8792 shims and glue, as it does for all other functions](https://github.com/rust-lang/rust/pull/33909)
8793 * [rust-lldb warns about unsupported versions of LLDB](https://github.com/rust-lang/rust/pull/34646)
8794 * Many more errors have been given error codes and extended
8795 explanations
8796 * API documentation continues to be improved, with many new examples
8797
8798 Misc
8799 ----
8800
8801 * [rustc no longer hangs when dependencies recursively re-export
8802 submodules](https://github.com/rust-lang/rust/pull/34542)
8803 * [rustc requires LLVM 3.7+](https://github.com/rust-lang/rust/pull/34104)
8804 * [The 'How Safe and Unsafe Interact' chapter of The Rustonomicon was
8805 rewritten](https://github.com/rust-lang/rust/pull/33895)
8806 * [rustc support 16-bit pointer sizes](https://github.com/rust-lang/rust/pull/33460).
8807 No targets use this yet, but it works toward AVR support.
8808
8809 Compatibility Notes
8810 -------------------
8811
8812 * [`const`s and `static`s may not have unsized types](https://github.com/rust-lang/rust/pull/34443)
8813 * [The new follow-set rules that place restrictions on `macro_rules!`
8814 in order to ensure syntax forward-compatibility have been enabled](https://github.com/rust-lang/rust/pull/33982)
8815 This was an [amendment to RFC 550](https://github.com/rust-lang/rfcs/pull/1384),
8816 and has been a warning since 1.10.
8817 * [`cfg` attribute process has been refactored to fix various bugs](https://github.com/rust-lang/rust/pull/33706).
8818 This causes breakage in some corner cases.
8819
8820
8821 Version 1.10.0 (2016-07-07)
8822 ===========================
8823
8824 Language
8825 --------
8826
8827 * [`Copy` types are required to have a trivial implementation of `Clone`](https://github.com/rust-lang/rust/pull/33420).
8828 [RFC 1521](https://github.com/rust-lang/rfcs/blob/master/text/1521-copy-clone-semantics.md).
8829 * [Single-variant enums support the `#[repr(..)]` attribute](https://github.com/rust-lang/rust/pull/33355).
8830 * [Fix `#[derive(RustcEncodable)]` in the presence of other `encode` methods](https://github.com/rust-lang/rust/pull/32908).
8831 * [`panic!` can be converted to a runtime abort with the
8832 `-C panic=abort` flag](https://github.com/rust-lang/rust/pull/32900).
8833 [RFC 1513](https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md).
8834 * [Add a new crate type, 'cdylib'](https://github.com/rust-lang/rust/pull/33553).
8835 cdylibs are dynamic libraries suitable for loading by non-Rust hosts.
8836 [RFC 1510](https://github.com/rust-lang/rfcs/blob/master/text/1510-cdylib.md).
8837 Note that Cargo does not yet directly support cdylibs.
8838
8839 Stabilized APIs
8840 ---------------
8841
8842 * `os::windows::fs::OpenOptionsExt::access_mode`
8843 * `os::windows::fs::OpenOptionsExt::share_mode`
8844 * `os::windows::fs::OpenOptionsExt::custom_flags`
8845 * `os::windows::fs::OpenOptionsExt::attributes`
8846 * `os::windows::fs::OpenOptionsExt::security_qos_flags`
8847 * `os::unix::fs::OpenOptionsExt::custom_flags`
8848 * [`sync::Weak::new`](http://doc.rust-lang.org/alloc/arc/struct.Weak.html#method.new)
8849 * `Default for sync::Weak`
8850 * [`panic::set_hook`](http://doc.rust-lang.org/std/panic/fn.set_hook.html)
8851 * [`panic::take_hook`](http://doc.rust-lang.org/std/panic/fn.take_hook.html)
8852 * [`panic::PanicInfo`](http://doc.rust-lang.org/std/panic/struct.PanicInfo.html)
8853 * [`panic::PanicInfo::payload`](http://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.payload)
8854 * [`panic::PanicInfo::location`](http://doc.rust-lang.org/std/panic/struct.PanicInfo.html#method.location)
8855 * [`panic::Location`](http://doc.rust-lang.org/std/panic/struct.Location.html)
8856 * [`panic::Location::file`](http://doc.rust-lang.org/std/panic/struct.Location.html#method.file)
8857 * [`panic::Location::line`](http://doc.rust-lang.org/std/panic/struct.Location.html#method.line)
8858 * [`ffi::CStr::from_bytes_with_nul`](http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul)
8859 * [`ffi::CStr::from_bytes_with_nul_unchecked`](http://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul_unchecked)
8860 * [`ffi::FromBytesWithNulError`](http://doc.rust-lang.org/std/ffi/struct.FromBytesWithNulError.html)
8861 * [`fs::Metadata::modified`](http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.modified)
8862 * [`fs::Metadata::accessed`](http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.accessed)
8863 * [`fs::Metadata::created`](http://doc.rust-lang.org/std/fs/struct.Metadata.html#method.created)
8864 * `sync::atomic::Atomic{Usize,Isize,Bool,Ptr}::compare_exchange`
8865 * `sync::atomic::Atomic{Usize,Isize,Bool,Ptr}::compare_exchange_weak`
8866 * `collections::{btree,hash}_map::{Occupied,Vacant,}Entry::key`
8867 * `os::unix::net::{UnixStream, UnixListener, UnixDatagram, SocketAddr}`
8868 * [`SocketAddr::is_unnamed`](http://doc.rust-lang.org/std/os/unix/net/struct.SocketAddr.html#method.is_unnamed)
8869 * [`SocketAddr::as_pathname`](http://doc.rust-lang.org/std/os/unix/net/struct.SocketAddr.html#method.as_pathname)
8870 * [`UnixStream::connect`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.connect)
8871 * [`UnixStream::pair`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.pair)
8872 * [`UnixStream::try_clone`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.try_clone)
8873 * [`UnixStream::local_addr`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.local_addr)
8874 * [`UnixStream::peer_addr`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.peer_addr)
8875 * [`UnixStream::set_read_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.read_timeout)
8876 * [`UnixStream::set_write_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.write_timeout)
8877 * [`UnixStream::read_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.read_timeout)
8878 * [`UnixStream::write_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.write_timeout)
8879 * [`UnixStream::set_nonblocking`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.set_nonblocking)
8880 * [`UnixStream::take_error`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.take_error)
8881 * [`UnixStream::shutdown`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixStream.html#method.shutdown)
8882 * Read/Write/RawFd impls for `UnixStream`
8883 * [`UnixListener::bind`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.bind)
8884 * [`UnixListener::accept`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.accept)
8885 * [`UnixListener::try_clone`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.try_clone)
8886 * [`UnixListener::local_addr`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.local_addr)
8887 * [`UnixListener::set_nonblocking`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.set_nonblocking)
8888 * [`UnixListener::take_error`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.take_error)
8889 * [`UnixListener::incoming`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixListener.html#method.incoming)
8890 * RawFd impls for `UnixListener`
8891 * [`UnixDatagram::bind`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.bind)
8892 * [`UnixDatagram::unbound`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.unbound)
8893 * [`UnixDatagram::pair`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.pair)
8894 * [`UnixDatagram::connect`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.connect)
8895 * [`UnixDatagram::try_clone`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.try_clone)
8896 * [`UnixDatagram::local_addr`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.local_addr)
8897 * [`UnixDatagram::peer_addr`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.peer_addr)
8898 * [`UnixDatagram::recv_from`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.recv_from)
8899 * [`UnixDatagram::recv`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.recv)
8900 * [`UnixDatagram::send_to`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.send_to)
8901 * [`UnixDatagram::send`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.send)
8902 * [`UnixDatagram::set_read_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_read_timeout)
8903 * [`UnixDatagram::set_write_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_write_timeout)
8904 * [`UnixDatagram::read_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.read_timeout)
8905 * [`UnixDatagram::write_timeout`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.write_timeout)
8906 * [`UnixDatagram::set_nonblocking`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.set_nonblocking)
8907 * [`UnixDatagram::take_error`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.take_error)
8908 * [`UnixDatagram::shutdown`](http://doc.rust-lang.org/std/os/unix/net/struct.UnixDatagram.html#method.shutdown)
8909 * RawFd impls for `UnixDatagram`
8910 * `{BTree,Hash}Map::values_mut`
8911 * [`<[_]>::binary_search_by_key`](http://doc.rust-lang.org/std/primitive.slice.html#method.binary_search_by_key)
8912
8913 Libraries
8914 ---------
8915
8916 * [The `abs_sub` method of floats is deprecated](https://github.com/rust-lang/rust/pull/33664).
8917 The semantics of this minor method are subtle and probably not what
8918 most people want.
8919 * [Add implementation of Ord for Cell<T> and RefCell<T> where T: Ord](https://github.com/rust-lang/rust/pull/33306).
8920 * [On Linux, if `HashMap`s can't be initialized with `getrandom` they
8921 will fall back to `/dev/urandom` temporarily to avoid blocking
8922 during early boot](https://github.com/rust-lang/rust/pull/33086).
8923 * [Implemented negation for wrapping numerals](https://github.com/rust-lang/rust/pull/33067).
8924 * [Implement `Clone` for `binary_heap::IntoIter`](https://github.com/rust-lang/rust/pull/33050).
8925 * [Implement `Display` and `Hash` for `std::num::Wrapping`](https://github.com/rust-lang/rust/pull/33023).
8926 * [Add `Default` implementation for `&CStr`, `CString`](https://github.com/rust-lang/rust/pull/32990).
8927 * [Implement `From<Vec<T>>` and `Into<Vec<T>>` for `VecDeque<T>`](https://github.com/rust-lang/rust/pull/32866).
8928 * [Implement `Default` for `UnsafeCell`, `fmt::Error`, `Condvar`,
8929 `Mutex`, `RwLock`](https://github.com/rust-lang/rust/pull/32785).
8930
8931 Cargo
8932 -----
8933 * [Cargo.toml supports the `profile.*.panic` option](https://github.com/rust-lang/cargo/pull/2687).
8934 This controls the runtime behavior of the `panic!` macro
8935 and can be either "unwind" (the default), or "abort".
8936 [RFC 1513](https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md).
8937 * [Don't throw away errors with `-p` arguments](https://github.com/rust-lang/cargo/pull/2723).
8938 * [Report status to stderr instead of stdout](https://github.com/rust-lang/cargo/pull/2693).
8939 * [Build scripts are passed a `CARGO_MANIFEST_LINKS` environment
8940 variable that corresponds to the `links` field of the manifest](https://github.com/rust-lang/cargo/pull/2710).
8941 * [Ban keywords from crate names](https://github.com/rust-lang/cargo/pull/2707).
8942 * [Canonicalize `CARGO_HOME` on Windows](https://github.com/rust-lang/cargo/pull/2604).
8943 * [Retry network requests](https://github.com/rust-lang/cargo/pull/2396).
8944 By default they are retried twice, which can be customized with the
8945 `net.retry` value in `.cargo/config`.
8946 * [Don't print extra error info for failing subcommands](https://github.com/rust-lang/cargo/pull/2674).
8947 * [Add `--force` flag to `cargo install`](https://github.com/rust-lang/cargo/pull/2405).
8948 * [Don't use `flock` on NFS mounts](https://github.com/rust-lang/cargo/pull/2623).
8949 * [Prefer building `cargo install` artifacts in temporary directories](https://github.com/rust-lang/cargo/pull/2610).
8950 Makes it possible to install multiple crates in parallel.
8951 * [Add `cargo test --doc`](https://github.com/rust-lang/cargo/pull/2578).
8952 * [Add `cargo --explain`](https://github.com/rust-lang/cargo/pull/2551).
8953 * [Don't print warnings when `-q` is passed](https://github.com/rust-lang/cargo/pull/2576).
8954 * [Add `cargo doc --lib` and `--bin`](https://github.com/rust-lang/cargo/pull/2577).
8955 * [Don't require build script output to be UTF-8](https://github.com/rust-lang/cargo/pull/2560).
8956 * [Correctly attempt multiple git usernames](https://github.com/rust-lang/cargo/pull/2584).
8957
8958 Performance
8959 -----------
8960
8961 * [rustc memory usage was reduced by refactoring the context used for
8962 type checking](https://github.com/rust-lang/rust/pull/33425).
8963 * [Speed up creation of `HashMap`s by caching the random keys used
8964 to initialize the hash state](https://github.com/rust-lang/rust/pull/33318).
8965 * [The `find` implementation for `Chain` iterators is 2x faster](https://github.com/rust-lang/rust/pull/33289).
8966 * [Trait selection optimizations speed up type checking by 15%](https://github.com/rust-lang/rust/pull/33138).
8967 * [Efficient trie lookup for boolean Unicode properties](https://github.com/rust-lang/rust/pull/33098).
8968 10x faster than the previous lookup tables.
8969 * [Special case `#[derive(Copy, Clone)]` to avoid bloat](https://github.com/rust-lang/rust/pull/31414).
8970
8971 Usability
8972 ---------
8973
8974 * Many incremental improvements to documentation and rustdoc.
8975 * [rustdoc: List blanket trait impls](https://github.com/rust-lang/rust/pull/33514).
8976 * [rustdoc: Clean up ABI rendering](https://github.com/rust-lang/rust/pull/33151).
8977 * [Indexing with the wrong type produces a more informative error](https://github.com/rust-lang/rust/pull/33401).
8978 * [Improve diagnostics for constants being used in irrefutable patterns](https://github.com/rust-lang/rust/pull/33406).
8979 * [When many method candidates are in scope limit the suggestions to 10](https://github.com/rust-lang/rust/pull/33338).
8980 * [Remove confusing suggestion when calling a `fn` type](https://github.com/rust-lang/rust/pull/33325).
8981 * [Do not suggest changing `&mut self` to `&mut mut self`](https://github.com/rust-lang/rust/pull/33319).
8982
8983 Misc
8984 ----
8985
8986 * [Update i686-linux-android features to match Android ABI](https://github.com/rust-lang/rust/pull/33651).
8987 * [Update aarch64-linux-android features to match Android ABI](https://github.com/rust-lang/rust/pull/33500).
8988 * [`std` no longer prints backtraces on platforms where the running
8989 module must be loaded with `env::current_exe`, which can't be relied
8990 on](https://github.com/rust-lang/rust/pull/33554).
8991 * This release includes std binaries for the i586-unknown-linux-gnu,
8992 i686-unknown-linux-musl, and armv7-linux-androideabi targets. The
8993 i586 target is for old x86 hardware without SSE2, and the armv7
8994 target is for Android running on modern ARM architectures.
8995 * [The `rust-gdb` and `rust-lldb` scripts are distributed on all
8996 Unix platforms](https://github.com/rust-lang/rust/pull/32835).
8997 * [On Unix the runtime aborts by calling `libc::abort` instead of
8998 generating an illegal instruction](https://github.com/rust-lang/rust/pull/31457).
8999 * [Rust is now bootstrapped from the previous release of Rust,
9000 instead of a snapshot from an arbitrary commit](https://github.com/rust-lang/rust/pull/32942).
9001
9002 Compatibility Notes
9003 -------------------
9004
9005 * [`AtomicBool` is now bool-sized, not word-sized](https://github.com/rust-lang/rust/pull/33579).
9006 * [`target_env` for Linux ARM targets is just `gnu`, not
9007 `gnueabihf`, `gnueabi`, etc](https://github.com/rust-lang/rust/pull/33403).
9008 * [Consistently panic on overflow in `Duration::new`](https://github.com/rust-lang/rust/pull/33072).
9009 * [Change `String::truncate` to panic less](https://github.com/rust-lang/rust/pull/32977).
9010 * [Add `:block` to the follow set for `:ty` and `:path`](https://github.com/rust-lang/rust/pull/32945).
9011 Affects how macros are parsed.
9012 * [Fix macro hygiene bug](https://github.com/rust-lang/rust/pull/32923).
9013 * [Feature-gated attributes on macro-generated macro invocations are
9014 now rejected](https://github.com/rust-lang/rust/pull/32791).
9015 * [Suppress fallback and ambiguity errors during type inference](https://github.com/rust-lang/rust/pull/32258).
9016 This caused some minor changes to type inference.
9017
9018
9019 Version 1.9.0 (2016-05-26)
9020 ==========================
9021
9022 Language
9023 --------
9024
9025 * The `#[deprecated]` attribute when applied to an API will generate
9026 warnings when used. The warnings may be suppressed with
9027 `#[allow(deprecated)]`. [RFC 1270].
9028 * [`fn` item types are zero sized, and each `fn` names a unique
9029 type][1.9fn]. This will break code that transmutes `fn`s, so calling
9030 `transmute` on a `fn` type will generate a warning for a few cycles,
9031 then will be converted to an error.
9032 * [Field and method resolution understand visibility, so private
9033 fields and methods cannot prevent the proper use of public fields
9034 and methods][1.9fv].
9035 * [The parser considers unicode codepoints in the
9036 `PATTERN_WHITE_SPACE` category to be whitespace][1.9ws].
9037
9038 Stabilized APIs
9039 ---------------
9040
9041 * [`std::panic`]
9042 * [`std::panic::catch_unwind`] (renamed from `recover`)
9043 * [`std::panic::resume_unwind`] (renamed from `propagate`)
9044 * [`std::panic::AssertUnwindSafe`] (renamed from `AssertRecoverSafe`)
9045 * [`std::panic::UnwindSafe`] (renamed from `RecoverSafe`)
9046 * [`str::is_char_boundary`]
9047 * [`<*const T>::as_ref`]
9048 * [`<*mut T>::as_ref`]
9049 * [`<*mut T>::as_mut`]
9050 * [`AsciiExt::make_ascii_uppercase`]
9051 * [`AsciiExt::make_ascii_lowercase`]
9052 * [`char::decode_utf16`]
9053 * [`char::DecodeUtf16`]
9054 * [`char::DecodeUtf16Error`]
9055 * [`char::DecodeUtf16Error::unpaired_surrogate`]
9056 * [`BTreeSet::take`]
9057 * [`BTreeSet::replace`]
9058 * [`BTreeSet::get`]
9059 * [`HashSet::take`]
9060 * [`HashSet::replace`]
9061 * [`HashSet::get`]
9062 * [`OsString::with_capacity`]
9063 * [`OsString::clear`]
9064 * [`OsString::capacity`]
9065 * [`OsString::reserve`]
9066 * [`OsString::reserve_exact`]
9067 * [`OsStr::is_empty`]
9068 * [`OsStr::len`]
9069 * [`std::os::unix::thread`]
9070 * [`RawPthread`]
9071 * [`JoinHandleExt`]
9072 * [`JoinHandleExt::as_pthread_t`]
9073 * [`JoinHandleExt::into_pthread_t`]
9074 * [`HashSet::hasher`]
9075 * [`HashMap::hasher`]
9076 * [`CommandExt::exec`]
9077 * [`File::try_clone`]
9078 * [`SocketAddr::set_ip`]
9079 * [`SocketAddr::set_port`]
9080 * [`SocketAddrV4::set_ip`]
9081 * [`SocketAddrV4::set_port`]
9082 * [`SocketAddrV6::set_ip`]
9083 * [`SocketAddrV6::set_port`]
9084 * [`SocketAddrV6::set_flowinfo`]
9085 * [`SocketAddrV6::set_scope_id`]
9086 * [`slice::copy_from_slice`]
9087 * [`ptr::read_volatile`]
9088 * [`ptr::write_volatile`]
9089 * [`OpenOptions::create_new`]
9090 * [`TcpStream::set_nodelay`]
9091 * [`TcpStream::nodelay`]
9092 * [`TcpStream::set_ttl`]
9093 * [`TcpStream::ttl`]
9094 * [`TcpStream::set_only_v6`]
9095 * [`TcpStream::only_v6`]
9096 * [`TcpStream::take_error`]
9097 * [`TcpStream::set_nonblocking`]
9098 * [`TcpListener::set_ttl`]
9099 * [`TcpListener::ttl`]
9100 * [`TcpListener::set_only_v6`]
9101 * [`TcpListener::only_v6`]
9102 * [`TcpListener::take_error`]
9103 * [`TcpListener::set_nonblocking`]
9104 * [`UdpSocket::set_broadcast`]
9105 * [`UdpSocket::broadcast`]
9106 * [`UdpSocket::set_multicast_loop_v4`]
9107 * [`UdpSocket::multicast_loop_v4`]
9108 * [`UdpSocket::set_multicast_ttl_v4`]
9109 * [`UdpSocket::multicast_ttl_v4`]
9110 * [`UdpSocket::set_multicast_loop_v6`]
9111 * [`UdpSocket::multicast_loop_v6`]
9112 * [`UdpSocket::set_multicast_ttl_v6`]
9113 * [`UdpSocket::multicast_ttl_v6`]
9114 * [`UdpSocket::set_ttl`]
9115 * [`UdpSocket::ttl`]
9116 * [`UdpSocket::set_only_v6`]
9117 * [`UdpSocket::only_v6`]
9118 * [`UdpSocket::join_multicast_v4`]
9119 * [`UdpSocket::join_multicast_v6`]
9120 * [`UdpSocket::leave_multicast_v4`]
9121 * [`UdpSocket::leave_multicast_v6`]
9122 * [`UdpSocket::take_error`]
9123 * [`UdpSocket::connect`]
9124 * [`UdpSocket::send`]
9125 * [`UdpSocket::recv`]
9126 * [`UdpSocket::set_nonblocking`]
9127
9128 Libraries
9129 ---------
9130
9131 * [`std::sync::Once` is poisoned if its initialization function
9132 fails][1.9o].
9133 * [`cell::Ref` and `cell::RefMut` can contain unsized types][1.9cu].
9134 * [Most types implement `fmt::Debug`][1.9db].
9135 * [The default buffer size used by `BufReader` and `BufWriter` was
9136 reduced to 8K, from 64K][1.9bf]. This is in line with the buffer size
9137 used by other languages.
9138 * [`Instant`, `SystemTime` and `Duration` implement `+=` and `-=`.
9139 `Duration` additionally implements `*=` and `/=`][1.9ta].
9140 * [`Skip` is a `DoubleEndedIterator`][1.9sk].
9141 * [`From<[u8; 4]>` is implemented for `Ipv4Addr`][1.9fi].
9142 * [`Chain` implements `BufRead`][1.9ch].
9143 * [`HashMap`, `HashSet` and iterators are covariant][1.9hc].
9144
9145 Cargo
9146 -----
9147
9148 * [Cargo can now run concurrently][1.9cc].
9149 * [Top-level overrides allow specific revisions of crates to be
9150 overridden through the entire crate graph][1.9ct]. This is intended
9151 to make upgrades easier for large projects, by allowing crates to be
9152 forked temporarily until they've been upgraded and republished.
9153 * [Cargo exports a `CARGO_PKG_AUTHORS` environment variable][1.9cp].
9154 * [Cargo will pass the contents of the `RUSTFLAGS` variable to `rustc`
9155 on the commandline][1.9cf]. `rustc` arguments can also be specified
9156 in the `build.rustflags` configuration key.
9157
9158 Performance
9159 -----------
9160
9161 * [The time complexity of comparing variables for equivalence during type
9162 unification is reduced from _O_(_n_!) to _O_(_n_)][1.9tu]. This leads
9163 to major compilation time improvement in some scenarios.
9164 * [`ToString` is specialized for `str`, giving it the same performance
9165 as `to_owned`][1.9ts].
9166 * [Spawning processes with `Command::output` no longer creates extra
9167 threads][1.9sp].
9168 * [`#[derive(PartialEq)]` and `#[derive(PartialOrd)]` emit less code
9169 for C-like enums][1.9cl].
9170
9171 Misc
9172 ----
9173
9174 * [Passing the `--quiet` flag to a test runner will produce
9175 much-abbreviated output][1.9q].
9176 * The Rust Project now publishes std binaries for the
9177 `mips-unknown-linux-musl`, `mipsel-unknown-linux-musl`, and
9178 `i586-pc-windows-msvc` targets.
9179
9180 Compatibility Notes
9181 -------------------
9182
9183 * [`std::sync::Once` is poisoned if its initialization function
9184 fails][1.9o].
9185 * [It is illegal to define methods with the same name in overlapping
9186 inherent `impl` blocks][1.9sn].
9187 * [`fn` item types are zero sized, and each `fn` names a unique
9188 type][1.9fn]. This will break code that transmutes `fn`s, so calling
9189 `transmute` on a `fn` type will generate a warning for a few cycles,
9190 then will be converted to an error.
9191 * [Improvements to const evaluation may trigger new errors when integer
9192 literals are out of range][1.9ce].
9193
9194
9195 [1.9bf]: https://github.com/rust-lang/rust/pull/32695
9196 [1.9cc]: https://github.com/rust-lang/cargo/pull/2486
9197 [1.9ce]: https://github.com/rust-lang/rust/pull/30587
9198 [1.9cf]: https://github.com/rust-lang/cargo/pull/2241
9199 [1.9ch]: https://github.com/rust-lang/rust/pull/32541
9200 [1.9cl]: https://github.com/rust-lang/rust/pull/31977
9201 [1.9cp]: https://github.com/rust-lang/cargo/pull/2465
9202 [1.9ct]: https://github.com/rust-lang/cargo/pull/2385
9203 [1.9cu]: https://github.com/rust-lang/rust/pull/32652
9204 [1.9db]: https://github.com/rust-lang/rust/pull/32054
9205 [1.9fi]: https://github.com/rust-lang/rust/pull/32050
9206 [1.9fn]: https://github.com/rust-lang/rust/pull/31710
9207 [1.9fv]: https://github.com/rust-lang/rust/pull/31938
9208 [1.9hc]: https://github.com/rust-lang/rust/pull/32635
9209 [1.9o]: https://github.com/rust-lang/rust/pull/32325
9210 [1.9q]: https://github.com/rust-lang/rust/pull/31887
9211 [1.9sk]: https://github.com/rust-lang/rust/pull/31700
9212 [1.9sn]: https://github.com/rust-lang/rust/pull/31925
9213 [1.9sp]: https://github.com/rust-lang/rust/pull/31618
9214 [1.9ta]: https://github.com/rust-lang/rust/pull/32448
9215 [1.9ts]: https://github.com/rust-lang/rust/pull/32586
9216 [1.9tu]: https://github.com/rust-lang/rust/pull/32062
9217 [1.9ws]: https://github.com/rust-lang/rust/pull/29734
9218 [RFC 1270]: https://github.com/rust-lang/rfcs/blob/master/text/1270-deprecation.md
9219 [`<*const T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
9220 [`<*mut T>::as_mut`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_mut
9221 [`<*mut T>::as_ref`]: http://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.as_ref
9222 [`slice::copy_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.copy_from_slice
9223 [`AsciiExt::make_ascii_lowercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_lowercase
9224 [`AsciiExt::make_ascii_uppercase`]: http://doc.rust-lang.org/nightly/std/ascii/trait.AsciiExt.html#tymethod.make_ascii_uppercase
9225 [`BTreeSet::get`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.get
9226 [`BTreeSet::replace`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.replace
9227 [`BTreeSet::take`]: http://doc.rust-lang.org/nightly/collections/btree/set/struct.BTreeSet.html#method.take
9228 [`CommandExt::exec`]: http://doc.rust-lang.org/nightly/std/os/unix/process/trait.CommandExt.html#tymethod.exec
9229 [`File::try_clone`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html#method.try_clone
9230 [`HashMap::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.hasher
9231 [`HashSet::get`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.get
9232 [`HashSet::hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.hasher
9233 [`HashSet::replace`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.replace
9234 [`HashSet::take`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.take
9235 [`JoinHandleExt::as_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.as_pthread_t
9236 [`JoinHandleExt::into_pthread_t`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.into_pthread_t
9237 [`JoinHandleExt`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/trait.JoinHandleExt.html
9238 [`OpenOptions::create_new`]: http://doc.rust-lang.org/nightly/std/fs/struct.OpenOptions.html#method.create_new
9239 [`OsStr::is_empty`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.is_empty
9240 [`OsStr::len`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsStr.html#method.len
9241 [`OsString::capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.capacity
9242 [`OsString::clear`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.clear
9243 [`OsString::reserve_exact`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve_exact
9244 [`OsString::reserve`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.reserve
9245 [`OsString::with_capacity`]: http://doc.rust-lang.org/nightly/std/ffi/struct.OsString.html#method.with_capacity
9246 [`RawPthread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/type.RawPthread.html
9247 [`SocketAddr::set_ip`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_ip
9248 [`SocketAddr::set_port`]: http://doc.rust-lang.org/nightly/std/net/enum.SocketAddr.html#method.set_port
9249 [`SocketAddrV4::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_ip
9250 [`SocketAddrV4::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV4.html#method.set_port
9251 [`SocketAddrV6::set_flowinfo`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_flowinfo
9252 [`SocketAddrV6::set_ip`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_ip
9253 [`SocketAddrV6::set_port`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_port
9254 [`SocketAddrV6::set_scope_id`]: http://doc.rust-lang.org/nightly/std/net/struct.SocketAddrV6.html#method.set_scope_id
9255 [`TcpListener::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
9256 [`TcpListener::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
9257 [`TcpListener::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
9258 [`TcpListener::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
9259 [`TcpListener::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
9260 [`TcpListener::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
9261 [`TcpStream::nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.nodelay
9262 [`TcpStream::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.only_v6
9263 [`TcpStream::set_nodelay`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nodelay
9264 [`TcpStream::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_nonblocking
9265 [`TcpStream::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_only_v6
9266 [`TcpStream::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_ttl
9267 [`TcpStream::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.take_error
9268 [`TcpStream::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.ttl
9269 [`UdpSocket::broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.broadcast
9270 [`UdpSocket::connect`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.connect
9271 [`UdpSocket::join_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v4
9272 [`UdpSocket::join_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.join_multicast_v6
9273 [`UdpSocket::leave_multicast_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v4
9274 [`UdpSocket::leave_multicast_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.leave_multicast_v6
9275 [`UdpSocket::multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v4
9276 [`UdpSocket::multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_loop_v6
9277 [`UdpSocket::multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v4
9278 [`UdpSocket::multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.multicast_ttl_v6
9279 [`UdpSocket::only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.only_v6
9280 [`UdpSocket::recv`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.recv
9281 [`UdpSocket::send`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.send
9282 [`UdpSocket::set_broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_broadcast
9283 [`UdpSocket::set_multicast_loop_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v4
9284 [`UdpSocket::set_multicast_loop_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_loop_v6
9285 [`UdpSocket::set_multicast_ttl_v4`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v4
9286 [`UdpSocket::set_multicast_ttl_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_multicast_ttl_v6
9287 [`UdpSocket::set_nonblocking`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_nonblocking
9288 [`UdpSocket::set_only_v6`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_only_v6
9289 [`UdpSocket::set_ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.set_ttl
9290 [`UdpSocket::take_error`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.take_error
9291 [`UdpSocket::ttl`]: http://doc.rust-lang.org/nightly/std/net/struct.UdpSocket.html#method.ttl
9292 [`char::DecodeUtf16Error::unpaired_surrogate`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html#method.unpaired_surrogate
9293 [`char::DecodeUtf16Error`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16Error.html
9294 [`char::DecodeUtf16`]: http://doc.rust-lang.org/nightly/std/char/struct.DecodeUtf16.html
9295 [`char::decode_utf16`]: http://doc.rust-lang.org/nightly/std/char/fn.decode_utf16.html
9296 [`ptr::read_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.read_volatile.html
9297 [`ptr::write_volatile`]: http://doc.rust-lang.org/nightly/std/ptr/fn.write_volatile.html
9298 [`std::os::unix::thread`]: http://doc.rust-lang.org/nightly/std/os/unix/thread/index.html
9299 [`std::panic::AssertUnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/struct.AssertUnwindSafe.html
9300 [`std::panic::UnwindSafe`]: http://doc.rust-lang.org/nightly/std/panic/trait.UnwindSafe.html
9301 [`std::panic::catch_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.catch_unwind.html
9302 [`std::panic::resume_unwind`]: http://doc.rust-lang.org/nightly/std/panic/fn.resume_unwind.html
9303 [`std::panic`]: http://doc.rust-lang.org/nightly/std/panic/index.html
9304 [`str::is_char_boundary`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.is_char_boundary
9305
9306
9307 Version 1.8.0 (2016-04-14)
9308 ==========================
9309
9310 Language
9311 --------
9312
9313 * Rust supports overloading of compound assignment statements like
9314 `+=` by implementing the [`AddAssign`], [`SubAssign`],
9315 [`MulAssign`], [`DivAssign`], [`RemAssign`], [`BitAndAssign`],
9316 [`BitOrAssign`], [`BitXorAssign`], [`ShlAssign`], or [`ShrAssign`]
9317 traits. [RFC 953].
9318 * Empty structs can be defined with braces, as in `struct Foo { }`, in
9319 addition to the non-braced form, `struct Foo;`. [RFC 218].
9320
9321 Libraries
9322 ---------
9323
9324 * Stabilized APIs:
9325 * [`str::encode_utf16`] (renamed from `utf16_units`)
9326 * [`str::EncodeUtf16`] (renamed from `Utf16Units`)
9327 * [`Ref::map`]
9328 * [`RefMut::map`]
9329 * [`ptr::drop_in_place`]
9330 * [`time::Instant`]
9331 * [`time::SystemTime`]
9332 * [`Instant::now`]
9333 * [`Instant::duration_since`] (renamed from `duration_from_earlier`)
9334 * [`Instant::elapsed`]
9335 * [`SystemTime::now`]
9336 * [`SystemTime::duration_since`] (renamed from `duration_from_earlier`)
9337 * [`SystemTime::elapsed`]
9338 * Various `Add`/`Sub` impls for `Time` and `SystemTime`
9339 * [`SystemTimeError`]
9340 * [`SystemTimeError::duration`]
9341 * Various impls for `SystemTimeError`
9342 * [`UNIX_EPOCH`]
9343 * [`AddAssign`], [`SubAssign`], [`MulAssign`], [`DivAssign`],
9344 [`RemAssign`], [`BitAndAssign`], [`BitOrAssign`],
9345 [`BitXorAssign`], [`ShlAssign`], [`ShrAssign`].
9346 * [The `write!` and `writeln!` macros correctly emit errors if any of
9347 their arguments can't be formatted][1.8w].
9348 * [Various I/O functions support large files on 32-bit Linux][1.8l].
9349 * [The Unix-specific `raw` modules, which contain a number of
9350 redefined C types are deprecated][1.8r], including `os::raw::unix`,
9351 `os::raw::macos`, and `os::raw::linux`. These modules defined types
9352 such as `ino_t` and `dev_t`. The inconsistency of these definitions
9353 across platforms was making it difficult to implement `std`
9354 correctly. Those that need these definitions should use the `libc`
9355 crate. [RFC 1415].
9356 * The Unix-specific `MetadataExt` traits, including
9357 `os::unix::fs::MetadataExt`, which expose values such as inode
9358 numbers [no longer return platform-specific types][1.8r], but
9359 instead return widened integers. [RFC 1415].
9360 * [`btree_set::{IntoIter, Iter, Range}` are covariant][1.8cv].
9361 * [Atomic loads and stores are not volatile][1.8a].
9362 * [All types in `sync::mpsc` implement `fmt::Debug`][1.8mp].
9363
9364 Performance
9365 -----------
9366
9367 * [Inlining hash functions lead to a 3% compile-time improvement in
9368 some workloads][1.8h].
9369 * When using jemalloc, its symbols are [unprefixed so that it
9370 overrides the libc malloc implementation][1.8h]. This means that for
9371 rustc, LLVM is now using jemalloc, which results in a 6%
9372 compile-time improvement on a specific workload.
9373 * [Avoid quadratic growth in function size due to cleanups][1.8cu].
9374
9375 Misc
9376 ----
9377
9378 * [32-bit MSVC builds finally implement unwinding][1.8ms].
9379 i686-pc-windows-msvc is now considered a tier-1 platform.
9380 * [The `--print targets` flag prints a list of supported targets][1.8t].
9381 * [The `--print cfg` flag prints the `cfg`s defined for the current
9382 target][1.8cf].
9383 * [`rustc` can be built with an new Cargo-based build system, written
9384 in Rust][1.8b]. It will eventually replace Rust's Makefile-based
9385 build system. To enable it configure with `configure --rustbuild`.
9386 * [Errors for non-exhaustive `match` patterns now list up to 3 missing
9387 variants while also indicating the total number of missing variants
9388 if more than 3][1.8m].
9389 * [Executable stacks are disabled on Linux and BSD][1.8nx].
9390 * The Rust Project now publishes binary releases of the standard
9391 library for a number of tier-2 targets:
9392 `armv7-unknown-linux-gnueabihf`, `powerpc-unknown-linux-gnu`,
9393 `powerpc64-unknown-linux-gnu`, `powerpc64le-unknown-linux-gnu`
9394 `x86_64-rumprun-netbsd`. These can be installed with
9395 tools such as [multirust][1.8mr].
9396
9397 Cargo
9398 -----
9399
9400 * [`cargo init` creates a new Cargo project in the current
9401 directory][1.8ci]. It is otherwise like `cargo new`.
9402 * [Cargo has configuration keys for `-v` and
9403 `--color`][1.8cc]. `verbose` and `color`, respectively, go in the
9404 `[term]` section of `.cargo/config`.
9405 * [Configuration keys that evaluate to strings or integers can be set
9406 via environment variables][1.8ce]. For example the `build.jobs` key
9407 can be set via `CARGO_BUILD_JOBS`. Environment variables take
9408 precedence over config files.
9409 * [Target-specific dependencies support Rust `cfg` syntax for
9410 describing targets][1.8cfg] so that dependencies for multiple
9411 targets can be specified together. [RFC 1361].
9412 * [The environment variables `CARGO_TARGET_ROOT`, `RUSTC`, and
9413 `RUSTDOC` take precedence over the `build.target-dir`,
9414 `build.rustc`, and `build.rustdoc` configuration values][1.8cfv].
9415 * [The child process tree is killed on Windows when Cargo is
9416 killed][1.8ck].
9417 * [The `build.target` configuration value sets the target platform,
9418 like `--target`][1.8ct].
9419
9420 Compatibility Notes
9421 -------------------
9422
9423 * [Unstable compiler flags have been further restricted][1.8u]. Since
9424 1.0 `-Z` flags have been considered unstable, and other flags that
9425 were considered unstable additionally required passing `-Z
9426 unstable-options` to access. Unlike unstable language and library
9427 features though, these options have been accessible on the stable
9428 release channel. Going forward, *new unstable flags will not be
9429 available on the stable release channel*, and old unstable flags
9430 will warn about their usage. In the future, all unstable flags will
9431 be unavailable on the stable release channel.
9432 * [It is no longer possible to `match` on empty enum variants using
9433 the `Variant(..)` syntax][1.8v]. This has been a warning since 1.6.
9434 * The Unix-specific `MetadataExt` traits, including
9435 `os::unix::fs::MetadataExt`, which expose values such as inode
9436 numbers [no longer return platform-specific types][1.8r], but
9437 instead return widened integers. [RFC 1415].
9438 * [Modules sourced from the filesystem cannot appear within arbitrary
9439 blocks, but only within other modules][1.8mf].
9440 * [`--cfg` compiler flags are parsed strictly as identifiers][1.8c].
9441 * On Unix, [stack overflow triggers a runtime abort instead of a
9442 SIGSEGV][1.8so].
9443 * [`Command::spawn` and its equivalents return an error if any of
9444 its command-line arguments contain interior `NUL`s][1.8n].
9445 * [Tuple and unit enum variants from other crates are in the type
9446 namespace][1.8tn].
9447 * [On Windows `rustc` emits `.lib` files for the `staticlib` library
9448 type instead of `.a` files][1.8st]. Additionally, for the MSVC
9449 toolchain, `rustc` emits import libraries named `foo.dll.lib`
9450 instead of `foo.lib`.
9451
9452
9453 [1.8a]: https://github.com/rust-lang/rust/pull/30962
9454 [1.8b]: https://github.com/rust-lang/rust/pull/31123
9455 [1.8c]: https://github.com/rust-lang/rust/pull/31530
9456 [1.8cc]: https://github.com/rust-lang/cargo/pull/2397
9457 [1.8ce]: https://github.com/rust-lang/cargo/pull/2398
9458 [1.8cf]: https://github.com/rust-lang/rust/pull/31278
9459 [1.8cfg]: https://github.com/rust-lang/cargo/pull/2328
9460 [1.8ci]: https://github.com/rust-lang/cargo/pull/2081
9461 [1.8ck]: https://github.com/rust-lang/cargo/pull/2370
9462 [1.8ct]: https://github.com/rust-lang/cargo/pull/2335
9463 [1.8cu]: https://github.com/rust-lang/rust/pull/31390
9464 [1.8cfv]: https://github.com/rust-lang/cargo/issues/2365
9465 [1.8cv]: https://github.com/rust-lang/rust/pull/30998
9466 [1.8h]: https://github.com/rust-lang/rust/pull/31460
9467 [1.8l]: https://github.com/rust-lang/rust/pull/31668
9468 [1.8m]: https://github.com/rust-lang/rust/pull/31020
9469 [1.8mf]: https://github.com/rust-lang/rust/pull/31534
9470 [1.8mp]: https://github.com/rust-lang/rust/pull/30894
9471 [1.8mr]: https://users.rust-lang.org/t/multirust-0-8-with-cross-std-installation/4901
9472 [1.8ms]: https://github.com/rust-lang/rust/pull/30448
9473 [1.8n]: https://github.com/rust-lang/rust/pull/31056
9474 [1.8nx]: https://github.com/rust-lang/rust/pull/30859
9475 [1.8r]: https://github.com/rust-lang/rust/pull/31551
9476 [1.8so]: https://github.com/rust-lang/rust/pull/31333
9477 [1.8st]: https://github.com/rust-lang/rust/pull/29520
9478 [1.8t]: https://github.com/rust-lang/rust/pull/31358
9479 [1.8tn]: https://github.com/rust-lang/rust/pull/30882
9480 [1.8u]: https://github.com/rust-lang/rust/pull/31793
9481 [1.8v]: https://github.com/rust-lang/rust/pull/31757
9482 [1.8w]: https://github.com/rust-lang/rust/pull/31904
9483 [RFC 1361]: https://github.com/rust-lang/rfcs/blob/master/text/1361-cargo-cfg-dependencies.md
9484 [RFC 1415]: https://github.com/rust-lang/rfcs/blob/master/text/1415-trim-std-os.md
9485 [RFC 218]: https://github.com/rust-lang/rfcs/blob/master/text/0218-empty-struct-with-braces.md
9486 [RFC 953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md
9487 [`AddAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.AddAssign.html
9488 [`BitAndAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitAndAssign.html
9489 [`BitOrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitOrAssign.html
9490 [`BitXorAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitXorAssign.html
9491 [`DivAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.DivAssign.html
9492 [`Instant::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.duration_since
9493 [`Instant::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.elapsed
9494 [`Instant::now`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.now
9495 [`MulAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.MulAssign.html
9496 [`Ref::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.Ref.html#method.map
9497 [`RefMut::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefMut.html#method.map
9498 [`RemAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.RemAssign.html
9499 [`ShlAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShlAssign.html
9500 [`ShrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShrAssign.html
9501 [`SubAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.SubAssign.html
9502 [`SystemTime::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.duration_since
9503 [`SystemTime::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.elapsed
9504 [`SystemTime::now`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.now
9505 [`SystemTimeError::duration`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html#method.duration
9506 [`SystemTimeError`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html
9507 [`UNIX_EPOCH`]: http://doc.rust-lang.org/nightly/std/time/constant.UNIX_EPOCH.html
9508 [`ptr::drop_in_place`]: http://doc.rust-lang.org/nightly/std/ptr/fn.drop_in_place.html
9509 [`str::EncodeUtf16`]: http://doc.rust-lang.org/nightly/std/str/struct.EncodeUtf16.html
9510 [`str::encode_utf16`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.encode_utf16
9511 [`time::Instant`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html
9512 [`time::SystemTime`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html
9513
9514
9515 Version 1.7.0 (2016-03-03)
9516 ==========================
9517
9518 Libraries
9519 ---------
9520
9521 * Stabilized APIs
9522 * `Path`
9523 * [`Path::strip_prefix`] (renamed from relative_from)
9524 * [`path::StripPrefixError`] (new error type returned from strip_prefix)
9525 * `Ipv4Addr`
9526 * [`Ipv4Addr::is_loopback`]
9527 * [`Ipv4Addr::is_private`]
9528 * [`Ipv4Addr::is_link_local`]
9529 * [`Ipv4Addr::is_multicast`]
9530 * [`Ipv4Addr::is_broadcast`]
9531 * [`Ipv4Addr::is_documentation`]
9532 * `Ipv6Addr`
9533 * [`Ipv6Addr::is_unspecified`]
9534 * [`Ipv6Addr::is_loopback`]
9535 * [`Ipv6Addr::is_multicast`]
9536 * `Vec`
9537 * [`Vec::as_slice`]
9538 * [`Vec::as_mut_slice`]
9539 * `String`
9540 * [`String::as_str`]
9541 * [`String::as_mut_str`]
9542 * Slices
9543 * `<[T]>::`[`clone_from_slice`], which now requires the two slices to
9544 be the same length
9545 * `<[T]>::`[`sort_by_key`]
9546 * checked, saturated, and overflowing operations
9547 * [`i32::checked_rem`], [`i32::checked_neg`], [`i32::checked_shl`], [`i32::checked_shr`]
9548 * [`i32::saturating_mul`]
9549 * [`i32::overflowing_add`], [`i32::overflowing_sub`], [`i32::overflowing_mul`], [`i32::overflowing_div`]
9550 * [`i32::overflowing_rem`], [`i32::overflowing_neg`], [`i32::overflowing_shl`], [`i32::overflowing_shr`]
9551 * [`u32::checked_rem`], [`u32::checked_neg`], [`u32::checked_shl`], [`u32::checked_shl`]
9552 * [`u32::saturating_mul`]
9553 * [`u32::overflowing_add`], [`u32::overflowing_sub`], [`u32::overflowing_mul`], [`u32::overflowing_div`]
9554 * [`u32::overflowing_rem`], [`u32::overflowing_neg`], [`u32::overflowing_shl`], [`u32::overflowing_shr`]
9555 * and checked, saturated, and overflowing operations for other primitive types
9556 * FFI
9557 * [`ffi::IntoStringError`]
9558 * [`CString::into_string`]
9559 * [`CString::into_bytes`]
9560 * [`CString::into_bytes_with_nul`]
9561 * `From<CString> for Vec<u8>`
9562 * `IntoStringError`
9563 * [`IntoStringError::into_cstring`]
9564 * [`IntoStringError::utf8_error`]
9565 * `Error for IntoStringError`
9566 * Hashing
9567 * [`std::hash::BuildHasher`]
9568 * [`BuildHasher::Hasher`]
9569 * [`BuildHasher::build_hasher`]
9570 * [`std::hash::BuildHasherDefault`]
9571 * [`HashMap::with_hasher`]
9572 * [`HashMap::with_capacity_and_hasher`]
9573 * [`HashSet::with_hasher`]
9574 * [`HashSet::with_capacity_and_hasher`]
9575 * [`std::collections::hash_map::RandomState`]
9576 * [`RandomState::new`]
9577 * [Validating UTF-8 is faster by a factor of between 7 and 14x for
9578 ASCII input][1.7utf8]. This means that creating `String`s and `str`s
9579 from bytes is faster.
9580 * [The performance of `LineWriter` (and thus `io::stdout`) was
9581 improved by using `memchr` to search for newlines][1.7m].
9582 * [`f32::to_degrees` and `f32::to_radians` are stable][1.7f]. The
9583 `f64` variants were stabilized previously.
9584 * [`BTreeMap` was rewritten to use less memory and improve the performance
9585 of insertion and iteration, the latter by as much as 5x][1.7bm].
9586 * [`BTreeSet` and its iterators, `Iter`, `IntoIter`, and `Range` are
9587 covariant over their contained type][1.7bt].
9588 * [`LinkedList` and its iterators, `Iter` and `IntoIter` are covariant
9589 over their contained type][1.7ll].
9590 * [`str::replace` now accepts a `Pattern`][1.7rp], like other string
9591 searching methods.
9592 * [`Any` is implemented for unsized types][1.7a].
9593 * [`Hash` is implemented for `Duration`][1.7h].
9594
9595 Misc
9596 ----
9597
9598 * [When running tests with `--test`, rustdoc will pass `--cfg`
9599 arguments to the compiler][1.7dt].
9600 * [The compiler is built with RPATH information by default][1.7rpa].
9601 This means that it will be possible to run `rustc` when installed in
9602 unusual configurations without configuring the dynamic linker search
9603 path explicitly.
9604 * [`rustc` passes `--enable-new-dtags` to GNU ld][1.7dta]. This makes
9605 any RPATH entries (emitted with `-C rpath`) *not* take precedence
9606 over `LD_LIBRARY_PATH`.
9607
9608 Cargo
9609 -----
9610
9611 * [`cargo rustc` accepts a `--profile` flag that runs `rustc` under
9612 any of the compilation profiles, 'dev', 'bench', or 'test'][1.7cp].
9613 * [The `rerun-if-changed` build script directive no longer causes the
9614 build script to incorrectly run twice in certain scenarios][1.7rr].
9615
9616 Compatibility Notes
9617 -------------------
9618
9619 * Soundness fixes to the interactions between associated types and
9620 lifetimes, specified in [RFC 1214], [now generate errors][1.7sf] for
9621 code that violates the new rules. This is a significant change that
9622 is known to break existing code, so it has emitted warnings for the
9623 new error cases since 1.4 to give crate authors time to adapt. The
9624 details of what is changing are subtle; read the RFC for more.
9625 * [Several bugs in the compiler's visibility calculations were
9626 fixed][1.7v]. Since this was found to break significant amounts of
9627 code, the new errors will be emitted as warnings for several release
9628 cycles, under the `private_in_public` lint.
9629 * Defaulted type parameters were accidentally accepted in positions
9630 that were not intended. In this release, [defaulted type parameters
9631 appearing outside of type definitions will generate a
9632 warning][1.7d], which will become an error in future releases.
9633 * [Parsing "." as a float results in an error instead of 0][1.7p].
9634 That is, `".".parse::<f32>()` returns `Err`, not `Ok(0.0)`.
9635 * [Borrows of closure parameters may not outlive the closure][1.7bc].
9636
9637 [1.7a]: https://github.com/rust-lang/rust/pull/30928
9638 [1.7bc]: https://github.com/rust-lang/rust/pull/30341
9639 [1.7bm]: https://github.com/rust-lang/rust/pull/30426
9640 [1.7bt]: https://github.com/rust-lang/rust/pull/30998
9641 [1.7cp]: https://github.com/rust-lang/cargo/pull/2224
9642 [1.7d]: https://github.com/rust-lang/rust/pull/30724
9643 [1.7dt]: https://github.com/rust-lang/rust/pull/30372
9644 [1.7dta]: https://github.com/rust-lang/rust/pull/30394
9645 [1.7f]: https://github.com/rust-lang/rust/pull/30672
9646 [1.7h]: https://github.com/rust-lang/rust/pull/30818
9647 [1.7ll]: https://github.com/rust-lang/rust/pull/30663
9648 [1.7m]: https://github.com/rust-lang/rust/pull/30381
9649 [1.7p]: https://github.com/rust-lang/rust/pull/30681
9650 [1.7rp]: https://github.com/rust-lang/rust/pull/29498
9651 [1.7rpa]: https://github.com/rust-lang/rust/pull/30353
9652 [1.7rr]: https://github.com/rust-lang/cargo/pull/2279
9653 [1.7sf]: https://github.com/rust-lang/rust/pull/30389
9654 [1.7utf8]: https://github.com/rust-lang/rust/pull/30740
9655 [1.7v]: https://github.com/rust-lang/rust/pull/29973
9656 [RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
9657 [`BuildHasher::Hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hasher.html
9658 [`BuildHasher::build_hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html#tymethod.build_hasher
9659 [`CString::into_bytes_with_nul`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes_with_nul
9660 [`CString::into_bytes`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_bytes
9661 [`CString::into_string`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_string
9662 [`HashMap::with_capacity_and_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_capacity_and_hasher
9663 [`HashMap::with_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashMap.html#method.with_hasher
9664 [`HashSet::with_capacity_and_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_capacity_and_hasher
9665 [`HashSet::with_hasher`]: http://doc.rust-lang.org/nightly/std/collections/struct.HashSet.html#method.with_hasher
9666 [`IntoStringError::into_cstring`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.into_cstring
9667 [`IntoStringError::utf8_error`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html#method.utf8_error
9668 [`Ipv4Addr::is_broadcast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_broadcast
9669 [`Ipv4Addr::is_documentation`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_documentation
9670 [`Ipv4Addr::is_link_local`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_link_local
9671 [`Ipv4Addr::is_loopback`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_loopback
9672 [`Ipv4Addr::is_multicast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_multicast
9673 [`Ipv4Addr::is_private`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv4Addr.html#method.is_private
9674 [`Ipv6Addr::is_loopback`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_loopback
9675 [`Ipv6Addr::is_multicast`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_multicast
9676 [`Ipv6Addr::is_unspecified`]: http://doc.rust-lang.org/nightly/std/net/struct.Ipv6Addr.html#method.is_unspecified
9677 [`Path::strip_prefix`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.strip_prefix
9678 [`RandomState::new`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html#method.new
9679 [`String::as_mut_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_mut_str
9680 [`String::as_str`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.as_str
9681 [`Vec::as_mut_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_mut_slice
9682 [`Vec::as_slice`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.as_slice
9683 [`clone_from_slice`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
9684 [`ffi::IntoStringError`]: http://doc.rust-lang.org/nightly/std/ffi/struct.IntoStringError.html
9685 [`i32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_neg
9686 [`i32::checked_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_rem
9687 [`i32::checked_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shl
9688 [`i32::checked_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.checked_shr
9689 [`i32::overflowing_add`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_add
9690 [`i32::overflowing_div`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_div
9691 [`i32::overflowing_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_mul
9692 [`i32::overflowing_neg`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_neg
9693 [`i32::overflowing_rem`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_rem
9694 [`i32::overflowing_shl`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shl
9695 [`i32::overflowing_shr`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_shr
9696 [`i32::overflowing_sub`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.overflowing_sub
9697 [`i32::saturating_mul`]: http://doc.rust-lang.org/nightly/std/primitive.i32.html#method.saturating_mul
9698 [`path::StripPrefixError`]: http://doc.rust-lang.org/nightly/std/path/struct.StripPrefixError.html
9699 [`sort_by_key`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key
9700 [`std::collections::hash_map::RandomState`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.RandomState.html
9701 [`std::hash::BuildHasherDefault`]: http://doc.rust-lang.org/nightly/std/hash/struct.BuildHasherDefault.html
9702 [`std::hash::BuildHasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.BuildHasher.html
9703 [`u32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
9704 [`u32::checked_rem`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_rem
9705 [`u32::checked_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_neg
9706 [`u32::checked_shl`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.checked_shl
9707 [`u32::overflowing_add`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_add
9708 [`u32::overflowing_div`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_div
9709 [`u32::overflowing_mul`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_mul
9710 [`u32::overflowing_neg`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_neg
9711 [`u32::overflowing_rem`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_rem
9712 [`u32::overflowing_shl`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shl
9713 [`u32::overflowing_shr`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_shr
9714 [`u32::overflowing_sub`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.overflowing_sub
9715 [`u32::saturating_mul`]: http://doc.rust-lang.org/nightly/std/primitive.u32.html#method.saturating_mul
9716
9717
9718 Version 1.6.0 (2016-01-21)
9719 ==========================
9720
9721 Language
9722 --------
9723
9724 * The `#![no_std]` attribute causes a crate to not be linked to the
9725 standard library, but only the [core library][1.6co], as described
9726 in [RFC 1184]. The core library defines common types and traits but
9727 has no platform dependencies whatsoever, and is the basis for Rust
9728 software in environments that cannot support a full port of the
9729 standard library, such as operating systems. Most of the core
9730 library is now stable.
9731
9732 Libraries
9733 ---------
9734
9735 * Stabilized APIs:
9736 [`Read::read_exact`],
9737 [`ErrorKind::UnexpectedEof`] (renamed from `UnexpectedEOF`),
9738 [`fs::DirBuilder`], [`fs::DirBuilder::new`],
9739 [`fs::DirBuilder::recursive`], [`fs::DirBuilder::create`],
9740 [`os::unix::fs::DirBuilderExt`],
9741 [`os::unix::fs::DirBuilderExt::mode`], [`vec::Drain`],
9742 [`vec::Vec::drain`], [`string::Drain`], [`string::String::drain`],
9743 [`vec_deque::Drain`], [`vec_deque::VecDeque::drain`],
9744 [`collections::hash_map::Drain`],
9745 [`collections::hash_map::HashMap::drain`],
9746 [`collections::hash_set::Drain`],
9747 [`collections::hash_set::HashSet::drain`],
9748 [`collections::binary_heap::Drain`],
9749 [`collections::binary_heap::BinaryHeap::drain`],
9750 [`Vec::extend_from_slice`] (renamed from `push_all`),
9751 [`Mutex::get_mut`], [`Mutex::into_inner`], [`RwLock::get_mut`],
9752 [`RwLock::into_inner`],
9753 [`Iterator::min_by_key`] (renamed from `min_by`),
9754 [`Iterator::max_by_key`] (renamed from `max_by`).
9755 * The [core library][1.6co] is stable, as are most of its APIs.
9756 * [The `assert_eq!` macro supports arguments that don't implement
9757 `Sized`][1.6ae], such as arrays. In this way it behaves more like
9758 `assert!`.
9759 * Several timer functions that take duration in milliseconds [are
9760 deprecated in favor of those that take `Duration`][1.6ms]. These
9761 include `Condvar::wait_timeout_ms`, `thread::sleep_ms`, and
9762 `thread::park_timeout_ms`.
9763 * The algorithm by which `Vec` reserves additional elements was
9764 [tweaked to not allocate excessive space][1.6a] while still growing
9765 exponentially.
9766 * `From` conversions are [implemented from integers to floats][1.6f]
9767 in cases where the conversion is lossless. Thus they are not
9768 implemented for 32-bit ints to `f32`, nor for 64-bit ints to `f32`
9769 or `f64`. They are also not implemented for `isize` and `usize`
9770 because the implementations would be platform-specific. `From` is
9771 also implemented from `f32` to `f64`.
9772 * `From<&Path>` and `From<PathBuf>` are implemented for `Cow<Path>`.
9773 * `From<T>` is implemented for `Box<T>`, `Rc<T>` and `Arc<T>`.
9774 * `IntoIterator` is implemented for `&PathBuf` and `&Path`.
9775 * [`BinaryHeap` was refactored][1.6bh] for modest performance
9776 improvements.
9777 * Sorting slices that are already sorted [is 50% faster in some
9778 cases][1.6s].
9779
9780 Cargo
9781 -----
9782
9783 * Cargo will look in `$CARGO_HOME/bin` for subcommands [by default][1.6c].
9784 * Cargo build scripts can specify their dependencies by emitting the
9785 [`rerun-if-changed`][1.6rr] key.
9786 * crates.io will reject publication of crates with dependencies that
9787 have a wildcard version constraint. Crates with wildcard
9788 dependencies were seen to cause a variety of problems, as described
9789 in [RFC 1241]. Since 1.5 publication of such crates has emitted a
9790 warning.
9791 * `cargo clean` [accepts a `--release` flag][1.6cc] to clean the
9792 release folder. A variety of artifacts that Cargo failed to clean
9793 are now correctly deleted.
9794
9795 Misc
9796 ----
9797
9798 * The `unreachable_code` lint [warns when a function call's argument
9799 diverges][1.6dv].
9800 * The parser indicates [failures that may be caused by
9801 confusingly-similar Unicode characters][1.6uc]
9802 * Certain macro errors [are reported at definition time][1.6m], not
9803 expansion.
9804
9805 Compatibility Notes
9806 -------------------
9807
9808 * The compiler no longer makes use of the [`RUST_PATH`][1.6rp]
9809 environment variable when locating crates. This was a pre-cargo
9810 feature for integrating with the package manager that was
9811 accidentally never removed.
9812 * [A number of bugs were fixed in the privacy checker][1.6p] that
9813 could cause previously-accepted code to break.
9814 * [Modules and unit/tuple structs may not share the same name][1.6ts].
9815 * [Bugs in pattern matching unit structs were fixed][1.6us]. The tuple
9816 struct pattern syntax (`Foo(..)`) can no longer be used to match
9817 unit structs. This is a warning now, but will become an error in
9818 future releases. Patterns that share the same name as a const are
9819 now an error.
9820 * A bug was fixed that causes [rustc not to apply default type
9821 parameters][1.6xc] when resolving certain method implementations of
9822 traits defined in other crates.
9823
9824 [1.6a]: https://github.com/rust-lang/rust/pull/29454
9825 [1.6ae]: https://github.com/rust-lang/rust/pull/29770
9826 [1.6bh]: https://github.com/rust-lang/rust/pull/29811
9827 [1.6c]: https://github.com/rust-lang/cargo/pull/2192
9828 [1.6cc]: https://github.com/rust-lang/cargo/pull/2131
9829 [1.6co]: http://doc.rust-lang.org/core/index.html
9830 [1.6dv]: https://github.com/rust-lang/rust/pull/30000
9831 [1.6f]: https://github.com/rust-lang/rust/pull/29129
9832 [1.6m]: https://github.com/rust-lang/rust/pull/29828
9833 [1.6ms]: https://github.com/rust-lang/rust/pull/29604
9834 [1.6p]: https://github.com/rust-lang/rust/pull/29726
9835 [1.6rp]: https://github.com/rust-lang/rust/pull/30034
9836 [1.6rr]: https://github.com/rust-lang/cargo/pull/2134
9837 [1.6s]: https://github.com/rust-lang/rust/pull/29675
9838 [1.6ts]: https://github.com/rust-lang/rust/issues/21546
9839 [1.6uc]: https://github.com/rust-lang/rust/pull/29837
9840 [1.6us]: https://github.com/rust-lang/rust/pull/29383
9841 [1.6xc]: https://github.com/rust-lang/rust/issues/30123
9842 [RFC 1184]: https://github.com/rust-lang/rfcs/blob/master/text/1184-stabilize-no_std.md
9843 [RFC 1241]: https://github.com/rust-lang/rfcs/blob/master/text/1241-no-wildcard-deps.md
9844 [`ErrorKind::UnexpectedEof`]: http://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html#variant.UnexpectedEof
9845 [`Iterator::max_by_key`]: http://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.max_by_key
9846 [`Iterator::min_by_key`]: http://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.min_by_key
9847 [`Mutex::get_mut`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html#method.get_mut
9848 [`Mutex::into_inner`]: http://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html#method.into_inner
9849 [`Read::read_exact`]: http://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_exact
9850 [`RwLock::get_mut`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html#method.get_mut
9851 [`RwLock::into_inner`]: http://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html#method.into_inner
9852 [`Vec::extend_from_slice`]: http://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html#method.extend_from_slice
9853 [`collections::binary_heap::BinaryHeap::drain`]: http://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.BinaryHeap.html#method.drain
9854 [`collections::binary_heap::Drain`]: http://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Drain.html
9855 [`collections::hash_map::Drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.Drain.html
9856 [`collections::hash_map::HashMap::drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_map/struct.HashMap.html#method.drain
9857 [`collections::hash_set::Drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_set/struct.Drain.html
9858 [`collections::hash_set::HashSet::drain`]: http://doc.rust-lang.org/nightly/std/collections/hash_set/struct.HashSet.html#method.drain
9859 [`fs::DirBuilder::create`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.create
9860 [`fs::DirBuilder::new`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.new
9861 [`fs::DirBuilder::recursive`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html#method.recursive
9862 [`fs::DirBuilder`]: http://doc.rust-lang.org/nightly/std/fs/struct.DirBuilder.html
9863 [`os::unix::fs::DirBuilderExt::mode`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html#tymethod.mode
9864 [`os::unix::fs::DirBuilderExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.DirBuilderExt.html
9865 [`string::Drain`]: http://doc.rust-lang.org/nightly/std/string/struct.Drain.html
9866 [`string::String::drain`]: http://doc.rust-lang.org/nightly/std/string/struct.String.html#method.drain
9867 [`vec::Drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Drain.html
9868 [`vec::Vec::drain`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.drain
9869 [`vec_deque::Drain`]: http://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Drain.html
9870 [`vec_deque::VecDeque::drain`]: http://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.VecDeque.html#method.drain
9871
9872
9873 Version 1.5.0 (2015-12-10)
9874 ==========================
9875
9876 * ~700 changes, numerous bugfixes
9877
9878 Highlights
9879 ----------
9880
9881 * Stabilized APIs:
9882 [`BinaryHeap::from`], [`BinaryHeap::into_sorted_vec`],
9883 [`BinaryHeap::into_vec`], [`Condvar::wait_timeout`],
9884 [`FileTypeExt::is_block_device`], [`FileTypeExt::is_char_device`],
9885 [`FileTypeExt::is_fifo`], [`FileTypeExt::is_socket`],
9886 [`FileTypeExt`], [`Formatter::alternate`], [`Formatter::fill`],
9887 [`Formatter::precision`], [`Formatter::sign_aware_zero_pad`],
9888 [`Formatter::sign_minus`], [`Formatter::sign_plus`],
9889 [`Formatter::width`], [`Iterator::cmp`], [`Iterator::eq`],
9890 [`Iterator::ge`], [`Iterator::gt`], [`Iterator::le`],
9891 [`Iterator::lt`], [`Iterator::ne`], [`Iterator::partial_cmp`],
9892 [`Path::canonicalize`], [`Path::exists`], [`Path::is_dir`],
9893 [`Path::is_file`], [`Path::metadata`], [`Path::read_dir`],
9894 [`Path::read_link`], [`Path::symlink_metadata`],
9895 [`Utf8Error::valid_up_to`], [`Vec::resize`],
9896 [`VecDeque::as_mut_slices`], [`VecDeque::as_slices`],
9897 [`VecDeque::insert`], [`VecDeque::shrink_to_fit`],
9898 [`VecDeque::swap_remove_back`], [`VecDeque::swap_remove_front`],
9899 [`slice::split_first_mut`], [`slice::split_first`],
9900 [`slice::split_last_mut`], [`slice::split_last`],
9901 [`char::from_u32_unchecked`], [`fs::canonicalize`],
9902 [`str::MatchIndices`], [`str::RMatchIndices`],
9903 [`str::match_indices`], [`str::rmatch_indices`],
9904 [`str::slice_mut_unchecked`], [`string::ParseError`].
9905 * Rust applications hosted on crates.io can be installed locally to
9906 `~/.cargo/bin` with the [`cargo install`] command. Among other
9907 things this makes it easier to augment Cargo with new subcommands:
9908 when a binary named e.g. `cargo-foo` is found in `$PATH` it can be
9909 invoked as `cargo foo`.
9910 * Crates with wildcard (`*`) dependencies will [emit warnings when
9911 published][1.5w]. In 1.6 it will no longer be possible to publish
9912 crates with wildcard dependencies.
9913
9914 Breaking Changes
9915 ----------------
9916
9917 * The rules determining when a particular lifetime must outlive
9918 a particular value (known as '[dropck]') have been [modified
9919 to not rely on parametricity][1.5p].
9920 * [Implementations of `AsRef` and `AsMut` were added to `Box`, `Rc`,
9921 and `Arc`][1.5a]. Because these smart pointer types implement
9922 `Deref`, this causes breakage in cases where the interior type
9923 contains methods of the same name.
9924 * [Correct a bug in Rc/Arc][1.5c] that caused [dropck] to be unaware
9925 that they could drop their content. Soundness fix.
9926 * All method invocations are [properly checked][1.5wf1] for
9927 [well-formedness][1.5wf2]. Soundness fix.
9928 * Traits whose supertraits contain `Self` are [not object
9929 safe][1.5o]. Soundness fix.
9930 * Target specifications support a [`no_default_libraries`][1.5nd]
9931 setting that controls whether `-nodefaultlibs` is passed to the
9932 linker, and in turn the `is_like_windows` setting no longer affects
9933 the `-nodefaultlibs` flag.
9934 * `#[derive(Show)]`, long-deprecated, [has been removed][1.5ds].
9935 * The `#[inline]` and `#[repr]` attributes [can only appear
9936 in valid locations][1.5at].
9937 * Native libraries linked from the local crate are [passed to
9938 the linker before native libraries from upstream crates][1.5nl].
9939 * Two rarely-used attributes, `#[no_debug]` and
9940 `#[omit_gdb_pretty_printer_section]` [are feature gated][1.5fg].
9941 * Negation of unsigned integers, which has been a warning for
9942 several releases, [is now behind a feature gate and will
9943 generate errors][1.5nu].
9944 * The parser accidentally accepted visibility modifiers on
9945 enum variants, a bug [which has been fixed][1.5ev].
9946 * [A bug was fixed that allowed `use` statements to import unstable
9947 features][1.5use].
9948
9949 Language
9950 --------
9951
9952 * When evaluating expressions at compile-time that are not
9953 compile-time constants (const-evaluating expressions in non-const
9954 contexts), incorrect code such as overlong bitshifts and arithmetic
9955 overflow will [generate a warning instead of an error][1.5ce],
9956 delaying the error until runtime. This will allow the
9957 const-evaluator to be expanded in the future backwards-compatibly.
9958 * The `improper_ctypes` lint [no longer warns about using `isize` and
9959 `usize` in FFI][1.5ict].
9960
9961 Libraries
9962 ---------
9963
9964 * `Arc<T>` and `Rc<T>` are [covariant with respect to `T` instead of
9965 invariant][1.5c].
9966 * `Default` is [implemented for mutable slices][1.5d].
9967 * `FromStr` is [implemented for `SockAddrV4` and `SockAddrV6`][1.5s].
9968 * There are now `From` conversions [between floating point
9969 types][1.5f] where the conversions are lossless.
9970 * There are now `From` conversions [between integer types][1.5i] where
9971 the conversions are lossless.
9972 * [`fs::Metadata` implements `Clone`][1.5fs].
9973 * The `parse` method [accepts a leading "+" when parsing
9974 integers][1.5pi].
9975 * [`AsMut` is implemented for `Vec`][1.5am].
9976 * The `clone_from` implementations for `String` and `BinaryHeap` [have
9977 been optimized][1.5cf] and no longer rely on the default impl.
9978 * The `extern "Rust"`, `extern "C"`, `unsafe extern "Rust"` and
9979 `unsafe extern "C"` function types now [implement `Clone`,
9980 `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Hash`, `fmt::Pointer`, and
9981 `fmt::Debug` for up to 12 arguments][1.5fp].
9982 * [Dropping `Vec`s is much faster in unoptimized builds when the
9983 element types don't implement `Drop`][1.5dv].
9984 * A bug that caused in incorrect behavior when [combining `VecDeque`
9985 with zero-sized types][1.5vdz] was resolved.
9986 * [`PartialOrd` for slices is faster][1.5po].
9987
9988 Miscellaneous
9989 -------------
9990
9991 * [Crate metadata size was reduced by 20%][1.5md].
9992 * [Improvements to code generation reduced the size of libcore by 3.3
9993 MB and rustc's memory usage by 18MB][1.5m].
9994 * [Improvements to deref translation increased performance in
9995 unoptimized builds][1.5dr].
9996 * Various errors in trait resolution [are deduplicated to only be
9997 reported once][1.5te].
9998 * Rust has preliminary [support for rumprun kernels][1.5rr].
9999 * Rust has preliminary [support for NetBSD on amd64][1.5na].
10000
10001 [1.5use]: https://github.com/rust-lang/rust/pull/28364
10002 [1.5po]: https://github.com/rust-lang/rust/pull/28436
10003 [1.5ev]: https://github.com/rust-lang/rust/pull/28442
10004 [1.5nu]: https://github.com/rust-lang/rust/pull/28468
10005 [1.5dr]: https://github.com/rust-lang/rust/pull/28491
10006 [1.5vdz]: https://github.com/rust-lang/rust/pull/28494
10007 [1.5md]: https://github.com/rust-lang/rust/pull/28521
10008 [1.5fg]: https://github.com/rust-lang/rust/pull/28522
10009 [1.5dv]: https://github.com/rust-lang/rust/pull/28531
10010 [1.5na]: https://github.com/rust-lang/rust/pull/28543
10011 [1.5fp]: https://github.com/rust-lang/rust/pull/28560
10012 [1.5rr]: https://github.com/rust-lang/rust/pull/28593
10013 [1.5cf]: https://github.com/rust-lang/rust/pull/28602
10014 [1.5nl]: https://github.com/rust-lang/rust/pull/28605
10015 [1.5te]: https://github.com/rust-lang/rust/pull/28645
10016 [1.5at]: https://github.com/rust-lang/rust/pull/28650
10017 [1.5am]: https://github.com/rust-lang/rust/pull/28663
10018 [1.5m]: https://github.com/rust-lang/rust/pull/28778
10019 [1.5ict]: https://github.com/rust-lang/rust/pull/28779
10020 [1.5a]: https://github.com/rust-lang/rust/pull/28811
10021 [1.5pi]: https://github.com/rust-lang/rust/pull/28826
10022 [1.5ce]: https://github.com/rust-lang/rfcs/blob/master/text/1229-compile-time-asserts.md
10023 [1.5p]: https://github.com/rust-lang/rfcs/blob/master/text/1238-nonparametric-dropck.md
10024 [1.5i]: https://github.com/rust-lang/rust/pull/28921
10025 [1.5fs]: https://github.com/rust-lang/rust/pull/29021
10026 [1.5f]: https://github.com/rust-lang/rust/pull/29129
10027 [1.5ds]: https://github.com/rust-lang/rust/pull/29148
10028 [1.5s]: https://github.com/rust-lang/rust/pull/29190
10029 [1.5d]: https://github.com/rust-lang/rust/pull/29245
10030 [1.5o]: https://github.com/rust-lang/rust/pull/29259
10031 [1.5nd]: https://github.com/rust-lang/rust/pull/28578
10032 [1.5wf2]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
10033 [1.5wf1]: https://github.com/rust-lang/rust/pull/28669
10034 [dropck]: https://doc.rust-lang.org/nightly/nomicon/dropck.html
10035 [1.5c]: https://github.com/rust-lang/rust/pull/29110
10036 [1.5w]: https://github.com/rust-lang/rfcs/blob/master/text/1241-no-wildcard-deps.md
10037 [`cargo install`]: https://github.com/rust-lang/rfcs/blob/master/text/1200-cargo-install.md
10038 [`BinaryHeap::from`]: http://doc.rust-lang.org/nightly/std/convert/trait.From.html#method.from
10039 [`BinaryHeap::into_sorted_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_sorted_vec
10040 [`BinaryHeap::into_vec`]: http://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html#method.into_vec
10041 [`Condvar::wait_timeout`]: http://doc.rust-lang.org/nightly/std/sync/struct.Condvar.html#method.wait_timeout
10042 [`FileTypeExt::is_block_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_block_device
10043 [`FileTypeExt::is_char_device`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_char_device
10044 [`FileTypeExt::is_fifo`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_fifo
10045 [`FileTypeExt::is_socket`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html#tymethod.is_socket
10046 [`FileTypeExt`]: http://doc.rust-lang.org/nightly/std/os/unix/fs/trait.FileTypeExt.html
10047 [`Formatter::alternate`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.alternate
10048 [`Formatter::fill`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.fill
10049 [`Formatter::precision`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.precision
10050 [`Formatter::sign_aware_zero_pad`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_aware_zero_pad
10051 [`Formatter::sign_minus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_minus
10052 [`Formatter::sign_plus`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.sign_plus
10053 [`Formatter::width`]: http://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.width
10054 [`Iterator::cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.cmp
10055 [`Iterator::eq`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.eq
10056 [`Iterator::ge`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ge
10057 [`Iterator::gt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.gt
10058 [`Iterator::le`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.le
10059 [`Iterator::lt`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.lt
10060 [`Iterator::ne`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.ne
10061 [`Iterator::partial_cmp`]: http://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.partial_cmp
10062 [`Path::canonicalize`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.canonicalize
10063 [`Path::exists`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.exists
10064 [`Path::is_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_dir
10065 [`Path::is_file`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.is_file
10066 [`Path::metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.metadata
10067 [`Path::read_dir`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_dir
10068 [`Path::read_link`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.read_link
10069 [`Path::symlink_metadata`]: http://doc.rust-lang.org/nightly/std/path/struct.Path.html#method.symlink_metadata
10070 [`Utf8Error::valid_up_to`]: http://doc.rust-lang.org/nightly/core/str/struct.Utf8Error.html#method.valid_up_to
10071 [`Vec::resize`]: http://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.resize
10072 [`VecDeque::as_mut_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_mut_slices
10073 [`VecDeque::as_slices`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.as_slices
10074 [`VecDeque::insert`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.insert
10075 [`VecDeque::shrink_to_fit`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.shrink_to_fit
10076 [`VecDeque::swap_remove_back`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_back
10077 [`VecDeque::swap_remove_front`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.swap_remove_front
10078 [`slice::split_first_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first_mut
10079 [`slice::split_first`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_first
10080 [`slice::split_last_mut`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last_mut
10081 [`slice::split_last`]: http://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_last
10082 [`char::from_u32_unchecked`]: http://doc.rust-lang.org/nightly/std/char/fn.from_u32_unchecked.html
10083 [`fs::canonicalize`]: http://doc.rust-lang.org/nightly/std/fs/fn.canonicalize.html
10084 [`str::MatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.MatchIndices.html
10085 [`str::RMatchIndices`]: http://doc.rust-lang.org/nightly/std/str/struct.RMatchIndices.html
10086 [`str::match_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.match_indices
10087 [`str::rmatch_indices`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatch_indices
10088 [`str::slice_mut_unchecked`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.slice_mut_unchecked
10089 [`string::ParseError`]: http://doc.rust-lang.org/nightly/std/string/enum.ParseError.html
10090
10091 Version 1.4.0 (2015-10-29)
10092 ==========================
10093
10094 * ~1200 changes, numerous bugfixes
10095
10096 Highlights
10097 ----------
10098
10099 * Windows builds targeting the 64-bit MSVC ABI and linker (instead of
10100 GNU) are now supported and recommended for use.
10101
10102 Breaking Changes
10103 ----------------
10104
10105 * [Several changes have been made to fix type soundness and improve
10106 the behavior of associated types][sound]. See [RFC 1214]. Although
10107 we have mostly introduced these changes as warnings this release, to
10108 become errors next release, there are still some scenarios that will
10109 see immediate breakage.
10110 * [The `str::lines` and `BufRead::lines` iterators treat `\r\n` as
10111 line breaks in addition to `\n`][crlf].
10112 * [Loans of `'static` lifetime extend to the end of a function][stat].
10113 * [`str::parse` no longer introduces avoidable rounding error when
10114 parsing floating point numbers. Together with earlier changes to
10115 float formatting/output, "round trips" like f.to_string().parse()
10116 now preserve the value of f exactly. Additionally, leading plus
10117 signs are now accepted][fp3].
10118
10119
10120 Language
10121 --------
10122
10123 * `use` statements that import multiple items [can now rename
10124 them][i], as in `use foo::{bar as kitten, baz as puppy}`.
10125 * [Binops work correctly on fat pointers][binfat].
10126 * `pub extern crate`, which does not behave as expected, [issues a
10127 warning][pec] until a better solution is found.
10128
10129 Libraries
10130 ---------
10131
10132 * [Many APIs were stabilized][stab]: `<Box<str>>::into_string`,
10133 [`Arc::downgrade`], [`Arc::get_mut`], [`Arc::make_mut`],
10134 [`Arc::try_unwrap`], [`Box::from_raw`], [`Box::into_raw`], [`CStr::to_str`],
10135 [`CStr::to_string_lossy`], [`CString::from_raw`], [`CString::into_raw`],
10136 [`IntoRawFd::into_raw_fd`], [`IntoRawFd`],
10137 `IntoRawHandle::into_raw_handle`, `IntoRawHandle`,
10138 `IntoRawSocket::into_raw_socket`, `IntoRawSocket`, [`Rc::downgrade`],
10139 [`Rc::get_mut`], [`Rc::make_mut`], [`Rc::try_unwrap`], [`Result::expect`],
10140 [`String::into_boxed_str`], [`TcpStream::read_timeout`],
10141 [`TcpStream::set_read_timeout`], [`TcpStream::set_write_timeout`],
10142 [`TcpStream::write_timeout`], [`UdpSocket::read_timeout`],
10143 [`UdpSocket::set_read_timeout`], [`UdpSocket::set_write_timeout`],
10144 [`UdpSocket::write_timeout`], `Vec::append`, `Vec::split_off`,
10145 [`VecDeque::append`], [`VecDeque::retain`], [`VecDeque::split_off`],
10146 [`rc::Weak::upgrade`], [`rc::Weak`], [`slice::Iter::as_slice`],
10147 [`slice::IterMut::into_slice`], [`str::CharIndices::as_str`],
10148 [`str::Chars::as_str`], [`str::split_at_mut`], [`str::split_at`],
10149 [`sync::Weak::upgrade`], [`sync::Weak`], [`thread::park_timeout`],
10150 [`thread::sleep`].
10151 * [Some APIs were deprecated][dep]: `BTreeMap::with_b`,
10152 `BTreeSet::with_b`, `Option::as_mut_slice`, `Option::as_slice`,
10153 `Result::as_mut_slice`, `Result::as_slice`, `f32::from_str_radix`,
10154 `f64::from_str_radix`.
10155 * [Reverse-searching strings is faster with the 'two-way'
10156 algorithm][s].
10157 * [`std::io::copy` allows `?Sized` arguments][cc].
10158 * The `Windows`, `Chunks`, and `ChunksMut` iterators over slices all
10159 [override `count`, `nth` and `last` with an *O*(1)
10160 implementation][it].
10161 * [`Default` is implemented for arrays up to `[T; 32]`][d].
10162 * [`IntoRawFd` has been added to the Unix-specific prelude,
10163 `IntoRawSocket` and `IntoRawHandle` to the Windows-specific
10164 prelude][pr].
10165 * [`Extend<String>` and `FromIterator<String` are both implemented for
10166 `String`][es].
10167 * [`IntoIterator` is implemented for references to `Option` and
10168 `Result`][into2].
10169 * [`HashMap` and `HashSet` implement `Extend<&T>` where `T:
10170 Copy`][ext] as part of [RFC 839]. This will cause type inference
10171 breakage in rare situations.
10172 * [`BinaryHeap` implements `Debug`][bh2].
10173 * [`Borrow` and `BorrowMut` are implemented for fixed-size
10174 arrays][bm].
10175 * [`extern fn`s with the "Rust" and "C" ABIs implement common
10176 traits including `Eq`, `Ord`, `Debug`, `Hash`][fp].
10177 * [String comparison is faster][faststr].
10178 * `&mut T` where `T: std::fmt::Write` [also implements
10179 `std::fmt::Write`][mutw].
10180 * [A stable regression in `VecDeque::push_back` and other
10181 capacity-altering methods that caused panics for zero-sized types
10182 was fixed][vd].
10183 * [Function pointers implement traits for up to 12 parameters][fp2].
10184
10185 Miscellaneous
10186 -------------
10187
10188 * The compiler [no longer uses the 'morestack' feature to prevent
10189 stack overflow][mm]. Instead it uses guard pages and stack
10190 probes (though stack probes are not yet implemented on any platform
10191 but Windows).
10192 * [The compiler matches traits faster when projections are involved][p].
10193 * The 'improper_ctypes' lint [no longer warns about use of `isize` and
10194 `usize`][ffi].
10195 * [Cargo now displays useful information about what its doing during
10196 `cargo update`][cu].
10197
10198 [`Arc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.downgrade
10199 [`Arc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.make_mut
10200 [`Arc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.get_mut
10201 [`Arc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/arc/struct.Arc.html#method.try_unwrap
10202 [`Box::from_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.from_raw
10203 [`Box::into_raw`]: http://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html#method.into_raw
10204 [`CStr::to_str`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_str
10205 [`CStr::to_string_lossy`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.to_string_lossy
10206 [`CString::from_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.from_raw
10207 [`CString::into_raw`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html#method.into_raw
10208 [`IntoRawFd::into_raw_fd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html#tymethod.into_raw_fd
10209 [`IntoRawFd`]: http://doc.rust-lang.org/nightly/std/os/unix/io/trait.IntoRawFd.html
10210 [`Rc::downgrade`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.downgrade
10211 [`Rc::get_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.get_mut
10212 [`Rc::make_mut`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.make_mut
10213 [`Rc::try_unwrap`]: http://doc.rust-lang.org/nightly/alloc/rc/struct.Rc.html#method.try_unwrap
10214 [`Result::expect`]: http://doc.rust-lang.org/nightly/core/result/enum.Result.html#method.expect
10215 [`String::into_boxed_str`]: http://doc.rust-lang.org/nightly/collections/string/struct.String.html#method.into_boxed_str
10216 [`TcpStream::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
10217 [`TcpStream::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
10218 [`TcpStream::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
10219 [`TcpStream::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
10220 [`UdpSocket::read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.read_timeout
10221 [`UdpSocket::set_read_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_read_timeout
10222 [`UdpSocket::write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.write_timeout
10223 [`UdpSocket::set_write_timeout`]: http://doc.rust-lang.org/nightly/std/net/struct.TcpStream.html#method.set_write_timeout
10224 [`VecDeque::append`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.append
10225 [`VecDeque::retain`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.retain
10226 [`VecDeque::split_off`]: http://doc.rust-lang.org/nightly/std/collections/struct.VecDeque.html#method.split_off
10227 [`rc::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html#method.upgrade
10228 [`rc::Weak`]: http://doc.rust-lang.org/nightly/std/rc/struct.Weak.html
10229 [`slice::Iter::as_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#method.as_slice
10230 [`slice::IterMut::into_slice`]: http://doc.rust-lang.org/nightly/std/slice/struct.IterMut.html#method.into_slice
10231 [`str::CharIndices::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.as_str
10232 [`str::Chars::as_str`]: http://doc.rust-lang.org/nightly/std/str/struct.Chars.html#method.as_str
10233 [`str::split_at_mut`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at_mut
10234 [`str::split_at`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_at
10235 [`sync::Weak::upgrade`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html#method.upgrade
10236 [`sync::Weak`]: http://doc.rust-lang.org/nightly/std/sync/struct.Weak.html
10237 [`thread::park_timeout`]: http://doc.rust-lang.org/nightly/std/thread/fn.park_timeout.html
10238 [`thread::sleep`]: http://doc.rust-lang.org/nightly/std/thread/fn.sleep.html
10239 [bh2]: https://github.com/rust-lang/rust/pull/28156
10240 [binfat]: https://github.com/rust-lang/rust/pull/28270
10241 [bm]: https://github.com/rust-lang/rust/pull/28197
10242 [cc]: https://github.com/rust-lang/rust/pull/27531
10243 [crlf]: https://github.com/rust-lang/rust/pull/28034
10244 [cu]: https://github.com/rust-lang/cargo/pull/1931
10245 [d]: https://github.com/rust-lang/rust/pull/27825
10246 [dep]: https://github.com/rust-lang/rust/pull/28339
10247 [es]: https://github.com/rust-lang/rust/pull/27956
10248 [ext]: https://github.com/rust-lang/rust/pull/28094
10249 [faststr]: https://github.com/rust-lang/rust/pull/28338
10250 [ffi]: https://github.com/rust-lang/rust/pull/28779
10251 [fp]: https://github.com/rust-lang/rust/pull/28268
10252 [fp2]: https://github.com/rust-lang/rust/pull/28560
10253 [fp3]: https://github.com/rust-lang/rust/pull/27307
10254 [i]: https://github.com/rust-lang/rust/pull/27451
10255 [into2]: https://github.com/rust-lang/rust/pull/28039
10256 [it]: https://github.com/rust-lang/rust/pull/27652
10257 [mm]: https://github.com/rust-lang/rust/pull/27338
10258 [mutw]: https://github.com/rust-lang/rust/pull/28368
10259 [sound]: https://github.com/rust-lang/rust/pull/27641
10260 [p]: https://github.com/rust-lang/rust/pull/27866
10261 [pec]: https://github.com/rust-lang/rust/pull/28486
10262 [pr]: https://github.com/rust-lang/rust/pull/27896
10263 [RFC 839]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
10264 [RFC 1214]: https://github.com/rust-lang/rfcs/blob/master/text/1214-projections-lifetimes-and-wf.md
10265 [s]: https://github.com/rust-lang/rust/pull/27474
10266 [stab]: https://github.com/rust-lang/rust/pull/28339
10267 [stat]: https://github.com/rust-lang/rust/pull/28321
10268 [vd]: https://github.com/rust-lang/rust/pull/28494
10269
10270 Version 1.3.0 (2015-09-17)
10271 ==============================
10272
10273 * ~900 changes, numerous bugfixes
10274
10275 Highlights
10276 ----------
10277
10278 * The [new object lifetime defaults][nold] have been [turned
10279 on][nold2] after a cycle of warnings about the change. Now types
10280 like `&'a Box<Trait>` (or `&'a Rc<Trait>`, etc) will change from
10281 being interpreted as `&'a Box<Trait+'a>` to `&'a
10282 Box<Trait+'static>`.
10283 * [The Rustonomicon][nom] is a new book in the official documentation
10284 that dives into writing unsafe Rust.
10285 * The [`Duration`] API, [has been stabilized][ds]. This basic unit of
10286 timekeeping is employed by other std APIs, as well as out-of-tree
10287 time crates.
10288
10289 Breaking Changes
10290 ----------------
10291
10292 * The [new object lifetime defaults][nold] have been [turned
10293 on][nold2] after a cycle of warnings about the change.
10294 * There is a known [regression][lr] in how object lifetime elision is
10295 interpreted, the proper solution for which is undetermined.
10296 * The `#[prelude_import]` attribute, an internal implementation
10297 detail, was accidentally stabilized previously. [It has been put
10298 behind the `prelude_import` feature gate][pi]. This change is
10299 believed to break no existing code.
10300 * The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
10301 [more sane for dynamically sized types][dst3]. Code that relied on
10302 the previous behavior is thought to be broken.
10303 * The `dropck` rules, which checks that destructors can't access
10304 destroyed values, [have been updated][dropck] to match the
10305 [RFC][dropckrfc]. This fixes some soundness holes, and as such will
10306 cause some previously-compiling code to no longer build.
10307
10308 Language
10309 --------
10310
10311 * The [new object lifetime defaults][nold] have been [turned
10312 on][nold2] after a cycle of warnings about the change.
10313 * Semicolons may [now follow types and paths in
10314 macros](https://github.com/rust-lang/rust/pull/27000).
10315 * The behavior of [`size_of_val`][dst1] and [`align_of_val`][dst2] is
10316 [more sane for dynamically sized types][dst3]. Code that relied on
10317 the previous behavior is not known to exist, and suspected to be
10318 broken.
10319 * `'static` variables [may now be recursive][st].
10320 * `ref` bindings choose between [`Deref`] and [`DerefMut`]
10321 implementations correctly.
10322 * The `dropck` rules, which checks that destructors can't access
10323 destroyed values, [have been updated][dropck] to match the
10324 [RFC][dropckrfc].
10325
10326 Libraries
10327 ---------
10328
10329 * The [`Duration`] API, [has been stabilized][ds], as well as the
10330 `std::time` module, which presently contains only `Duration`.
10331 * `Box<str>` and `Box<[T]>` both implement `Clone`.
10332 * The owned C string, [`CString`], implements [`Borrow`] and the
10333 borrowed C string, [`CStr`], implements [`ToOwned`]. The two of
10334 these allow C strings to be borrowed and cloned in generic code.
10335 * [`CStr`] implements [`Debug`].
10336 * [`AtomicPtr`] implements [`Debug`].
10337 * [`Error`] trait objects [can be downcast to their concrete types][e]
10338 in many common configurations, using the [`is`], [`downcast`],
10339 [`downcast_ref`] and [`downcast_mut`] methods, similarly to the
10340 [`Any`] trait.
10341 * Searching for substrings now [employs the two-way algorithm][search]
10342 instead of doing a naive search. This gives major speedups to a
10343 number of methods, including [`contains`][sc], [`find`][sf],
10344 [`rfind`][srf], [`split`][ss]. [`starts_with`][ssw] and
10345 [`ends_with`][sew] are also faster.
10346 * The performance of `PartialEq` for slices is [much faster][ps].
10347 * The [`Hash`] trait offers the default method, [`hash_slice`], which
10348 is overridden and optimized by the implementations for scalars.
10349 * The [`Hasher`] trait now has a number of specialized `write_*`
10350 methods for primitive types, for efficiency.
10351 * The I/O-specific error type, [`std::io::Error`][ie], gained a set of
10352 methods for accessing the 'inner error', if any: [`get_ref`][iegr],
10353 [`get_mut`][iegm], [`into_inner`][ieii]. As well, the implementation
10354 of [`std::error::Error::cause`][iec] also delegates to the inner
10355 error.
10356 * [`process::Child`][pc] gained the [`id`] method, which returns a
10357 `u32` representing the platform-specific process identifier.
10358 * The [`connect`] method on slices is deprecated, replaced by the new
10359 [`join`] method (note that both of these are on the *unstable*
10360 [`SliceConcatExt`] trait, but through the magic of the prelude are
10361 available to stable code anyway).
10362 * The [`Div`] operator is implemented for [`Wrapping`] types.
10363 * [`DerefMut` is implemented for `String`][dms].
10364 * Performance of SipHash (the default hasher for `HashMap`) is
10365 [better for long data][sh].
10366 * [`AtomicPtr`] implements [`Send`].
10367 * The [`read_to_end`] implementations for [`Stdin`] and [`File`]
10368 are now [specialized to use uninitialized buffers for increased
10369 performance][rte].
10370 * Lifetime parameters of foreign functions [are now resolved
10371 properly][f].
10372
10373 Misc
10374 ----
10375
10376 * Rust can now, with some coercion, [produce programs that run on
10377 Windows XP][xp], though XP is not considered a supported platform.
10378 * Porting Rust on Windows from the GNU toolchain to MSVC continues
10379 ([1][win1], [2][win2], [3][win3], [4][win4]). It is still not
10380 recommended for use in 1.3, though should be fully-functional
10381 in the [64-bit 1.4 beta][b14].
10382 * On Fedora-based systems installation will [properly configure the
10383 dynamic linker][fl].
10384 * The compiler gained many new extended error descriptions, which can
10385 be accessed with the `--explain` flag.
10386 * The `dropck` pass, which checks that destructors can't access
10387 destroyed values, [has been rewritten][27261]. This fixes some
10388 soundness holes, and as such will cause some previously-compiling
10389 code to no longer build.
10390 * `rustc` now uses [LLVM to write archive files where possible][ar].
10391 Eventually this will eliminate the compiler's dependency on the ar
10392 utility.
10393 * Rust has [preliminary support for i686 FreeBSD][26959] (it has long
10394 supported FreeBSD on x86_64).
10395 * The [`unused_mut`][lum], [`unconditional_recursion`][lur],
10396 [`improper_ctypes`][lic], and [`negate_unsigned`][lnu] lints are
10397 more strict.
10398 * If landing pads are disabled (with `-Z no-landing-pads`), [`panic!`
10399 will kill the process instead of leaking][nlp].
10400
10401 [`Any`]: http://doc.rust-lang.org/nightly/std/any/trait.Any.html
10402 [`AtomicPtr`]: http://doc.rust-lang.org/nightly/std/sync/atomic/struct.AtomicPtr.html
10403 [`Borrow`]: http://doc.rust-lang.org/nightly/std/borrow/trait.Borrow.html
10404 [`CStr`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html
10405 [`CString`]: http://doc.rust-lang.org/nightly/std/ffi/struct.CString.html
10406 [`Debug`]: http://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
10407 [`DerefMut`]: http://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
10408 [`Deref`]: http://doc.rust-lang.org/nightly/std/ops/trait.Deref.html
10409 [`Div`]: http://doc.rust-lang.org/nightly/std/ops/trait.Div.html
10410 [`Duration`]: http://doc.rust-lang.org/nightly/std/time/struct.Duration.html
10411 [`Error`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html
10412 [`File`]: http://doc.rust-lang.org/nightly/std/fs/struct.File.html
10413 [`Hash`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html
10414 [`Hasher`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hasher.html
10415 [`Send`]: http://doc.rust-lang.org/nightly/std/marker/trait.Send.html
10416 [`SliceConcatExt`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html
10417 [`Stdin`]: http://doc.rust-lang.org/nightly/std/io/struct.Stdin.html
10418 [`ToOwned`]: http://doc.rust-lang.org/nightly/std/borrow/trait.ToOwned.html
10419 [`Wrapping`]: http://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
10420 [`connect`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.connect
10421 [`downcast_mut`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_mut
10422 [`downcast_ref`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast_ref
10423 [`downcast`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.downcast
10424 [`hash_slice`]: http://doc.rust-lang.org/nightly/std/hash/trait.Hash.html#method.hash_slice
10425 [`id`]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html#method.id
10426 [`is`]: http://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.is
10427 [`join`]: http://doc.rust-lang.org/nightly/std/slice/trait.SliceConcatExt.html#method.join
10428 [`read_to_end`]: http://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.read_to_end
10429 [ar]: https://github.com/rust-lang/rust/pull/26926
10430 [b14]: https://static.rust-lang.org/dist/rust-beta-x86_64-pc-windows-msvc.msi
10431 [dms]: https://github.com/rust-lang/rust/pull/26241
10432 [27261]: https://github.com/rust-lang/rust/pull/27261
10433 [dropckrfc]: https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md
10434 [ds]: https://github.com/rust-lang/rust/pull/26818
10435 [dst1]: http://doc.rust-lang.org/nightly/std/mem/fn.size_of_val.html
10436 [dst2]: http://doc.rust-lang.org/nightly/std/mem/fn.align_of_val.html
10437 [dst3]: https://github.com/rust-lang/rust/pull/27351
10438 [e]: https://github.com/rust-lang/rust/pull/24793
10439 [f]: https://github.com/rust-lang/rust/pull/26588
10440 [26959]: https://github.com/rust-lang/rust/pull/26959
10441 [fl]: https://github.com/rust-lang/rust-installer/pull/41
10442 [ie]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html
10443 [iec]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.cause
10444 [iegm]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_mut
10445 [iegr]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.get_ref
10446 [ieii]: http://doc.rust-lang.org/nightly/std/io/struct.Error.html#method.into_inner
10447 [lic]: https://github.com/rust-lang/rust/pull/26583
10448 [lnu]: https://github.com/rust-lang/rust/pull/27026
10449 [lr]: https://github.com/rust-lang/rust/issues/27248
10450 [lum]: https://github.com/rust-lang/rust/pull/26378
10451 [lur]: https://github.com/rust-lang/rust/pull/26783
10452 [nlp]: https://github.com/rust-lang/rust/pull/27176
10453 [nold2]: https://github.com/rust-lang/rust/pull/27045
10454 [nold]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md
10455 [nom]: http://doc.rust-lang.org/nightly/nomicon/
10456 [pc]: http://doc.rust-lang.org/nightly/std/process/struct.Child.html
10457 [pi]: https://github.com/rust-lang/rust/pull/26699
10458 [ps]: https://github.com/rust-lang/rust/pull/26884
10459 [rte]: https://github.com/rust-lang/rust/pull/26950
10460 [sc]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.contains
10461 [search]: https://github.com/rust-lang/rust/pull/26327
10462 [sew]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.ends_with
10463 [sf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.find
10464 [sh]: https://github.com/rust-lang/rust/pull/27280
10465 [srf]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.rfind
10466 [ss]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.split
10467 [ssw]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.starts_with
10468 [st]: https://github.com/rust-lang/rust/pull/26630
10469 [win1]: https://github.com/rust-lang/rust/pull/26569
10470 [win2]: https://github.com/rust-lang/rust/pull/26741
10471 [win3]: https://github.com/rust-lang/rust/pull/26741
10472 [win4]: https://github.com/rust-lang/rust/pull/27210
10473 [xp]: https://github.com/rust-lang/rust/pull/26569
10474
10475 Version 1.2.0 (2015-08-07)
10476 ==========================
10477
10478 * ~1200 changes, numerous bugfixes
10479
10480 Highlights
10481 ----------
10482
10483 * [Dynamically-sized-type coercions][dst] allow smart pointer types
10484 like `Rc` to contain types without a fixed size, arrays and trait
10485 objects, finally enabling use of `Rc<[T]>` and completing the
10486 implementation of DST.
10487 * [Parallel codegen][parcodegen] is now working again, which can
10488 substantially speed up large builds in debug mode; It also gets
10489 another ~33% speedup when bootstrapping on a 4 core machine (using 8
10490 jobs). It's not enabled by default, but will be "in the near
10491 future". It can be activated with the `-C codegen-units=N` flag to
10492 `rustc`.
10493 * This is the first release with [experimental support for linking
10494 with the MSVC linker and lib C on Windows (instead of using the GNU
10495 variants via MinGW)][win]. It is yet recommended only for the most
10496 intrepid Rustaceans.
10497 * Benchmark compilations are showing a 30% improvement in
10498 bootstrapping over 1.1.
10499
10500 Breaking Changes
10501 ----------------
10502
10503 * The [`to_uppercase`] and [`to_lowercase`] methods on `char` now do
10504 unicode case mapping, which is a previously-planned change in
10505 behavior and considered a bugfix.
10506 * [`mem::align_of`] now specifies [the *minimum alignment* for
10507 T][align], which is usually the alignment programs are interested
10508 in, and the same value reported by clang's
10509 `alignof`. [`mem::min_align_of`] is deprecated. This is not known to
10510 break real code.
10511 * [The `#[packed]` attribute is no longer silently accepted by the
10512 compiler][packed]. This attribute did nothing and code that
10513 mentioned it likely did not work as intended.
10514 * Associated type defaults are [now behind the
10515 `associated_type_defaults` feature gate][ad]. In 1.1 associated type
10516 defaults *did not work*, but could be mentioned syntactically. As
10517 such this breakage has minimal impact.
10518
10519 Language
10520 --------
10521
10522 * Patterns with `ref mut` now correctly invoke [`DerefMut`] when
10523 matching against dereferenceable values.
10524
10525 Libraries
10526 ---------
10527
10528 * The [`Extend`] trait, which grows a collection from an iterator, is
10529 implemented over iterators of references, for `String`, `Vec`,
10530 `LinkedList`, `VecDeque`, `EnumSet`, `BinaryHeap`, `VecMap`,
10531 `BTreeSet` and `BTreeMap`. [RFC][extend-rfc].
10532 * The [`iter::once`] function returns an iterator that yields a single
10533 element, and [`iter::empty`] returns an iterator that yields no
10534 elements.
10535 * The [`matches`] and [`rmatches`] methods on `str` return iterators
10536 over substring matches.
10537 * [`Cell`] and [`RefCell`] both implement `Eq`.
10538 * A number of methods for wrapping arithmetic are added to the
10539 integral types, [`wrapping_div`], [`wrapping_rem`],
10540 [`wrapping_neg`], [`wrapping_shl`], [`wrapping_shr`]. These are in
10541 addition to the existing [`wrapping_add`], [`wrapping_sub`], and
10542 [`wrapping_mul`] methods, and alternatives to the [`Wrapping`]
10543 type.. It is illegal for the default arithmetic operations in Rust
10544 to overflow; the desire to wrap must be explicit.
10545 * The `{:#?}` formatting specifier [displays the alternate,
10546 pretty-printed][debugfmt] form of the `Debug` formatter. This
10547 feature was actually introduced prior to 1.0 with little
10548 fanfare.
10549 * [`fmt::Formatter`] implements [`fmt::Write`], a `fmt`-specific trait
10550 for writing data to formatted strings, similar to [`io::Write`].
10551 * [`fmt::Formatter`] adds 'debug builder' methods, [`debug_struct`],
10552 [`debug_tuple`], [`debug_list`], [`debug_set`], [`debug_map`]. These
10553 are used by code generators to emit implementations of [`Debug`].
10554 * `str` has new [`to_uppercase`][strup] and [`to_lowercase`][strlow]
10555 methods that convert case, following Unicode case mapping.
10556 * It is now easier to handle poisoned locks. The [`PoisonError`]
10557 type, returned by failing lock operations, exposes `into_inner`,
10558 `get_ref`, and `get_mut`, which all give access to the inner lock
10559 guard, and allow the poisoned lock to continue to operate. The
10560 `is_poisoned` method of [`RwLock`] and [`Mutex`] can poll for a
10561 poisoned lock without attempting to take the lock.
10562 * On Unix the [`FromRawFd`] trait is implemented for [`Stdio`], and
10563 [`AsRawFd`] for [`ChildStdin`], [`ChildStdout`], [`ChildStderr`].
10564 On Windows the `FromRawHandle` trait is implemented for `Stdio`,
10565 and `AsRawHandle` for `ChildStdin`, `ChildStdout`,
10566 `ChildStderr`.
10567 * [`io::ErrorKind`] has a new variant, `InvalidData`, which indicates
10568 malformed input.
10569
10570 Misc
10571 ----
10572
10573 * `rustc` employs smarter heuristics for guessing at [typos].
10574 * `rustc` emits more efficient code for [no-op conversions between
10575 unsafe pointers][nop].
10576 * Fat pointers are now [passed in pairs of immediate arguments][fat],
10577 resulting in faster compile times and smaller code.
10578
10579 [`Extend`]: https://doc.rust-lang.org/nightly/std/iter/trait.Extend.html
10580 [extend-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0839-embrace-extend-extinguish.md
10581 [`iter::once`]: https://doc.rust-lang.org/nightly/std/iter/fn.once.html
10582 [`iter::empty`]: https://doc.rust-lang.org/nightly/std/iter/fn.empty.html
10583 [`matches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.matches
10584 [`rmatches`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.rmatches
10585 [`Cell`]: https://doc.rust-lang.org/nightly/std/cell/struct.Cell.html
10586 [`RefCell`]: https://doc.rust-lang.org/nightly/std/cell/struct.RefCell.html
10587 [`wrapping_add`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_add
10588 [`wrapping_sub`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_sub
10589 [`wrapping_mul`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_mul
10590 [`wrapping_div`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_div
10591 [`wrapping_rem`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_rem
10592 [`wrapping_neg`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_neg
10593 [`wrapping_shl`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shl
10594 [`wrapping_shr`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html#method.wrapping_shr
10595 [`Wrapping`]: https://doc.rust-lang.org/nightly/std/num/struct.Wrapping.html
10596 [`fmt::Formatter`]: https://doc.rust-lang.org/nightly/std/fmt/struct.Formatter.html
10597 [`fmt::Write`]: https://doc.rust-lang.org/nightly/std/fmt/trait.Write.html
10598 [`io::Write`]: https://doc.rust-lang.org/nightly/std/io/trait.Write.html
10599 [`debug_struct`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_struct
10600 [`debug_tuple`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_tuple
10601 [`debug_list`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_list
10602 [`debug_set`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_set
10603 [`debug_map`]: https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html#method.debug_map
10604 [`Debug`]: https://doc.rust-lang.org/nightly/std/fmt/trait.Debug.html
10605 [strup]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_uppercase
10606 [strlow]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.to_lowercase
10607 [`to_uppercase`]: https://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_uppercase
10608 [`to_lowercase`]: https://doc.rust-lang.org/nightly/std/primitive.char.html#method.to_lowercase
10609 [`PoisonError`]: https://doc.rust-lang.org/nightly/std/sync/struct.PoisonError.html
10610 [`RwLock`]: https://doc.rust-lang.org/nightly/std/sync/struct.RwLock.html
10611 [`Mutex`]: https://doc.rust-lang.org/nightly/std/sync/struct.Mutex.html
10612 [`FromRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html
10613 [`AsRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html
10614 [`Stdio`]: https://doc.rust-lang.org/nightly/std/process/struct.Stdio.html
10615 [`ChildStdin`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStdin.html
10616 [`ChildStdout`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStdout.html
10617 [`ChildStderr`]: https://doc.rust-lang.org/nightly/std/process/struct.ChildStderr.html
10618 [`io::ErrorKind`]: https://doc.rust-lang.org/nightly/std/io/enum.ErrorKind.html
10619 [debugfmt]: https://www.reddit.com/r/rust/comments/3ceaui/psa_produces_prettyprinted_debug_output/
10620 [`DerefMut`]: https://doc.rust-lang.org/nightly/std/ops/trait.DerefMut.html
10621 [`mem::align_of`]: https://doc.rust-lang.org/nightly/std/mem/fn.align_of.html
10622 [align]: https://github.com/rust-lang/rust/pull/25646
10623 [`mem::min_align_of`]: https://doc.rust-lang.org/nightly/std/mem/fn.min_align_of.html
10624 [typos]: https://github.com/rust-lang/rust/pull/26087
10625 [nop]: https://github.com/rust-lang/rust/pull/26336
10626 [fat]: https://github.com/rust-lang/rust/pull/26411
10627 [dst]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md
10628 [parcodegen]: https://github.com/rust-lang/rust/pull/26018
10629 [packed]: https://github.com/rust-lang/rust/pull/25541
10630 [ad]: https://github.com/rust-lang/rust/pull/27382
10631 [win]: https://github.com/rust-lang/rust/pull/25350
10632
10633 Version 1.1.0 (2015-06-25)
10634 =========================
10635
10636 * ~850 changes, numerous bugfixes
10637
10638 Highlights
10639 ----------
10640
10641 * The [`std::fs` module has been expanded][fs] to expand the set of
10642 functionality exposed:
10643 * `DirEntry` now supports optimizations like `file_type` and `metadata` which
10644 don't incur a syscall on some platforms.
10645 * A `symlink_metadata` function has been added.
10646 * The `fs::Metadata` structure now lowers to its OS counterpart, providing
10647 access to all underlying information.
10648 * The compiler now contains extended explanations of many errors. When an error
10649 with an explanation occurs the compiler suggests using the `--explain` flag
10650 to read the explanation. Error explanations are also [available online][err-index].
10651 * Thanks to multiple [improvements][sk] to [type checking][pre], as
10652 well as other work, the time to bootstrap the compiler decreased by
10653 32%.
10654
10655 Libraries
10656 ---------
10657
10658 * The [`str::split_whitespace`] method splits a string on unicode
10659 whitespace boundaries.
10660 * On both Windows and Unix, new extension traits provide conversion of
10661 I/O types to and from the underlying system handles. On Unix, these
10662 traits are [`FromRawFd`] and [`AsRawFd`], on Windows `FromRawHandle`
10663 and `AsRawHandle`. These are implemented for `File`, `TcpStream`,
10664 `TcpListener`, and `UpdSocket`. Further implementations for
10665 `std::process` will be stabilized later.
10666 * On Unix, [`std::os::unix::symlink`] creates symlinks. On
10667 Windows, symlinks can be created with
10668 `std::os::windows::symlink_dir` and
10669 `std::os::windows::symlink_file`.
10670 * The `mpsc::Receiver` type can now be converted into an iterator with
10671 `into_iter` on the [`IntoIterator`] trait.
10672 * `Ipv4Addr` can be created from `u32` with the `From<u32>`
10673 implementation of the [`From`] trait.
10674 * The `Debug` implementation for `RangeFull` [creates output that is
10675 more consistent with other implementations][rf].
10676 * [`Debug` is implemented for `File`][file].
10677 * The `Default` implementation for `Arc` [no longer requires `Sync +
10678 Send`][arc].
10679 * [The `Iterator` methods `count`, `nth`, and `last` have been
10680 overridden for slices to have *O*(1) performance instead of *O*(*n*)][si].
10681 * Incorrect handling of paths on Windows has been improved in both the
10682 compiler and the standard library.
10683 * [`AtomicPtr` gained a `Default` implementation][ap].
10684 * In accordance with Rust's policy on arithmetic overflow `abs` now
10685 [panics on overflow when debug assertions are enabled][abs].
10686 * The [`Cloned`] iterator, which was accidentally left unstable for
10687 1.0 [has been stabilized][c].
10688 * The [`Incoming`] iterator, which iterates over incoming TCP
10689 connections, and which was accidentally unnamable in 1.0, [is now
10690 properly exported][inc].
10691 * [`BinaryHeap`] no longer corrupts itself [when functions called by
10692 `sift_up` or `sift_down` panic][bh].
10693 * The [`split_off`] method of `LinkedList` [no longer corrupts
10694 the list in certain scenarios][ll].
10695
10696 Misc
10697 ----
10698
10699 * Type checking performance [has improved notably][sk] with
10700 [multiple improvements][pre].
10701 * The compiler [suggests code changes][ch] for more errors.
10702 * rustc and it's build system have experimental support for [building
10703 toolchains against MUSL][m] instead of glibc on Linux.
10704 * The compiler defines the `target_env` cfg value, which is used for
10705 distinguishing toolchains that are otherwise for the same
10706 platform. Presently this is set to `gnu` for common GNU Linux
10707 targets and for MinGW targets, and `musl` for MUSL Linux targets.
10708 * The [`cargo rustc`][crc] command invokes a build with custom flags
10709 to rustc.
10710 * [Android executables are always position independent][pie].
10711 * [The `drop_with_repr_extern` lint warns about mixing `repr(C)`
10712 with `Drop`][24935].
10713
10714 [`str::split_whitespace`]: https://doc.rust-lang.org/nightly/std/primitive.str.html#method.split_whitespace
10715 [`FromRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.FromRawFd.html
10716 [`AsRawFd`]: https://doc.rust-lang.org/nightly/std/os/unix/io/trait.AsRawFd.html
10717 [`std::os::unix::symlink`]: https://doc.rust-lang.org/nightly/std/os/unix/fs/fn.symlink.html
10718 [`IntoIterator`]: https://doc.rust-lang.org/nightly/std/iter/trait.IntoIterator.html
10719 [`From`]: https://doc.rust-lang.org/nightly/std/convert/trait.From.html
10720 [rf]: https://github.com/rust-lang/rust/pull/24491
10721 [err-index]: https://doc.rust-lang.org/error-index.html
10722 [sk]: https://github.com/rust-lang/rust/pull/24615
10723 [pre]: https://github.com/rust-lang/rust/pull/25323
10724 [file]: https://github.com/rust-lang/rust/pull/24598
10725 [ch]: https://github.com/rust-lang/rust/pull/24683
10726 [arc]: https://github.com/rust-lang/rust/pull/24695
10727 [si]: https://github.com/rust-lang/rust/pull/24701
10728 [ap]: https://github.com/rust-lang/rust/pull/24834
10729 [m]: https://github.com/rust-lang/rust/pull/24777
10730 [fs]: https://github.com/rust-lang/rfcs/blob/master/text/1044-io-fs-2.1.md
10731 [crc]: https://github.com/rust-lang/cargo/pull/1568
10732 [pie]: https://github.com/rust-lang/rust/pull/24953
10733 [abs]: https://github.com/rust-lang/rust/pull/25441
10734 [c]: https://github.com/rust-lang/rust/pull/25496
10735 [`Cloned`]: https://doc.rust-lang.org/nightly/std/iter/struct.Cloned.html
10736 [`Incoming`]: https://doc.rust-lang.org/nightly/std/net/struct.Incoming.html
10737 [inc]: https://github.com/rust-lang/rust/pull/25522
10738 [bh]: https://github.com/rust-lang/rust/pull/25856
10739 [`BinaryHeap`]: https://doc.rust-lang.org/nightly/std/collections/struct.BinaryHeap.html
10740 [ll]: https://github.com/rust-lang/rust/pull/26022
10741 [`split_off`]: https://doc.rust-lang.org/nightly/collections/linked_list/struct.LinkedList.html#method.split_off
10742 [24935]: https://github.com/rust-lang/rust/pull/24935
10743
10744 Version 1.0.0 (2015-05-15)
10745 ========================
10746
10747 * ~1500 changes, numerous bugfixes
10748
10749 Highlights
10750 ----------
10751
10752 * The vast majority of the standard library is now `#[stable]`. It is
10753 no longer possible to use unstable features with a stable build of
10754 the compiler.
10755 * Many popular crates on [crates.io] now work on the stable release
10756 channel.
10757 * Arithmetic on basic integer types now [checks for overflow in debug
10758 builds][overflow].
10759
10760 Language
10761 --------
10762
10763 * Several [restrictions have been added to trait coherence][coh] in
10764 order to make it easier for upstream authors to change traits
10765 without breaking downstream code.
10766 * Digits of binary and octal literals are [lexed more eagerly][lex] to
10767 improve error messages and macro behavior. For example, `0b1234` is
10768 now lexed as `0b1234` instead of two tokens, `0b1` and `234`.
10769 * Trait bounds [are always invariant][inv], eliminating the need for
10770 the `PhantomFn` and `MarkerTrait` lang items, which have been
10771 removed.
10772 * ["-" is no longer a valid character in crate names][cr], the `extern crate
10773 "foo" as bar` syntax has been replaced with `extern crate foo as
10774 bar`, and Cargo now automatically translates "-" in *package* names
10775 to underscore for the crate name.
10776 * [Lifetime shadowing is an error][lt].
10777 * [`Send` no longer implies `'static`][send-rfc].
10778 * [UFCS now supports trait-less associated paths][moar-ufcs] like
10779 `MyType::default()`.
10780 * Primitive types [now have inherent methods][prim-inherent],
10781 obviating the need for extension traits like `SliceExt`.
10782 * Methods with `Self: Sized` in their `where` clause are [considered
10783 object-safe][self-sized], allowing many extension traits like
10784 `IteratorExt` to be merged into the traits they extended.
10785 * You can now [refer to associated types][assoc-where] whose
10786 corresponding trait bounds appear only in a `where` clause.
10787 * The final bits of [OIBIT landed][oibit-final], meaning that traits
10788 like `Send` and `Sync` are now library-defined.
10789 * A [Reflect trait][reflect] was introduced, which means that
10790 downcasting via the `Any` trait is effectively limited to concrete
10791 types. This helps retain the potentially-important "parametricity"
10792 property: generic code cannot behave differently for different type
10793 arguments except in minor ways.
10794 * The `unsafe_destructor` feature is now deprecated in favor of the
10795 [new `dropck`][rfc769]. This change is a major reduction in unsafe
10796 code.
10797
10798 Libraries
10799 ---------
10800
10801 * The `thread_local` module [has been renamed to `std::thread`][th].
10802 * The methods of `IteratorExt` [have been moved to the `Iterator`
10803 trait itself][23300].
10804 * Several traits that implement Rust's conventions for type
10805 conversions, `AsMut`, `AsRef`, `From`, and `Into` have been
10806 [centralized in the `std::convert` module][con].
10807 * The `FromError` trait [was removed in favor of `From`][fe].
10808 * The basic sleep function [has moved to
10809 `std::thread::sleep_ms`][slp].
10810 * The `splitn` function now takes an `n` parameter that represents the
10811 number of items yielded by the returned iterator [instead of the
10812 number of 'splits'][spl].
10813 * [On Unix, all file descriptors are `CLOEXEC` by default][clo].
10814 * [Derived implementations of `PartialOrd` now order enums according
10815 to their explicitly-assigned discriminants][po].
10816 * [Methods for searching strings are generic over `Pattern`s][pat],
10817 implemented presently by `&char`, `&str`, `FnMut(char) -> bool` and
10818 some others.
10819 * [In method resolution, object methods are resolved before inherent
10820 methods][meth].
10821 * [`String::from_str` has been deprecated in favor of the `From` impl,
10822 `String::from`][24517].
10823 * [`io::Error` implements `Sync`][ios].
10824 * [The `words` method on `&str` has been replaced with
10825 `split_whitespace`][sw], to avoid answering the tricky question, 'what is
10826 a word?'
10827 * The new path and IO modules are complete and `#[stable]`. This
10828 was the major library focus for this cycle.
10829 * The path API was [revised][path-normalize] to normalize `.`,
10830 adjusting the tradeoffs in favor of the most common usage.
10831 * A large number of remaining APIs in `std` were also stabilized
10832 during this cycle; about 75% of the non-deprecated API surface
10833 is now stable.
10834 * The new [string pattern API][string-pattern] landed, which makes
10835 the string slice API much more internally consistent and flexible.
10836 * A new set of [generic conversion traits][conversion] replaced
10837 many existing ad hoc traits.
10838 * Generic numeric traits were [completely removed][num-traits]. This
10839 was made possible thanks to inherent methods for primitive types,
10840 and the removal gives maximal flexibility for designing a numeric
10841 hierarchy in the future.
10842 * The `Fn` traits are now related via [inheritance][fn-inherit]
10843 and provide ergonomic [blanket implementations][fn-blanket].
10844 * The `Index` and `IndexMut` traits were changed to
10845 [take the index by value][index-value], enabling code like
10846 `hash_map["string"]` to work.
10847 * `Copy` now [inherits][copy-clone] from `Clone`, meaning that all
10848 `Copy` data is known to be `Clone` as well.
10849
10850 Misc
10851 ----
10852
10853 * Many errors now have extended explanations that can be accessed with
10854 the `--explain` flag to `rustc`.
10855 * Many new examples have been added to the standard library
10856 documentation.
10857 * rustdoc has received a number of improvements focused on completion
10858 and polish.
10859 * Metadata was tuned, shrinking binaries [by 27%][metadata-shrink].
10860 * Much headway was made on ecosystem-wide CI, making it possible
10861 to [compare builds for breakage][ci-compare].
10862
10863
10864 [crates.io]: http://crates.io
10865 [clo]: https://github.com/rust-lang/rust/pull/24034
10866 [coh]: https://github.com/rust-lang/rfcs/blob/master/text/1023-rebalancing-coherence.md
10867 [con]: https://github.com/rust-lang/rust/pull/23875
10868 [cr]: https://github.com/rust-lang/rust/pull/23419
10869 [fe]: https://github.com/rust-lang/rust/pull/23879
10870 [23300]: https://github.com/rust-lang/rust/pull/23300
10871 [inv]: https://github.com/rust-lang/rust/pull/23938
10872 [ios]: https://github.com/rust-lang/rust/pull/24133
10873 [lex]: https://github.com/rust-lang/rfcs/blob/master/text/0879-small-base-lexing.md
10874 [lt]: https://github.com/rust-lang/rust/pull/24057
10875 [meth]: https://github.com/rust-lang/rust/pull/24056
10876 [pat]: https://github.com/rust-lang/rfcs/blob/master/text/0528-string-patterns.md
10877 [po]: https://github.com/rust-lang/rust/pull/24270
10878 [24517]: https://github.com/rust-lang/rust/pull/24517
10879 [slp]: https://github.com/rust-lang/rust/pull/23949
10880 [spl]: https://github.com/rust-lang/rfcs/blob/master/text/0979-align-splitn-with-other-languages.md
10881 [sw]: https://github.com/rust-lang/rfcs/blob/master/text/1054-str-words.md
10882 [th]: https://github.com/rust-lang/rfcs/blob/master/text/0909-move-thread-local-to-std-thread.md
10883 [send-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0458-send-improvements.md
10884 [moar-ufcs]: https://github.com/rust-lang/rust/pull/22172
10885 [prim-inherent]: https://github.com/rust-lang/rust/pull/23104
10886 [overflow]: https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md
10887 [metadata-shrink]: https://github.com/rust-lang/rust/pull/22971
10888 [self-sized]: https://github.com/rust-lang/rust/pull/22301
10889 [assoc-where]: https://github.com/rust-lang/rust/pull/22512
10890 [string-pattern]: https://github.com/rust-lang/rust/pull/22466
10891 [oibit-final]: https://github.com/rust-lang/rust/pull/21689
10892 [reflect]: https://github.com/rust-lang/rust/pull/23712
10893 [conversion]: https://github.com/rust-lang/rfcs/pull/529
10894 [num-traits]: https://github.com/rust-lang/rust/pull/23549
10895 [index-value]: https://github.com/rust-lang/rust/pull/23601
10896 [rfc769]: https://github.com/rust-lang/rfcs/pull/769
10897 [ci-compare]: https://gist.github.com/brson/a30a77836fbec057cbee
10898 [fn-inherit]: https://github.com/rust-lang/rust/pull/23282
10899 [fn-blanket]: https://github.com/rust-lang/rust/pull/23895
10900 [copy-clone]: https://github.com/rust-lang/rust/pull/23860
10901 [path-normalize]: https://github.com/rust-lang/rust/pull/23229
10902
10903
10904 Version 1.0.0-alpha.2 (2015-02-20)
10905 =====================================
10906
10907 * ~1300 changes, numerous bugfixes
10908
10909 * Highlights
10910
10911 * The various I/O modules were [overhauled][io-rfc] to reduce
10912 unnecessary abstractions and provide better interoperation with
10913 the underlying platform. The old `io` module remains temporarily
10914 at `std::old_io`.
10915 * The standard library now [participates in feature gating][feat],
10916 so use of unstable libraries now requires a `#![feature(...)]`
10917 attribute. The impact of this change is [described on the
10918 forum][feat-forum]. [RFC][feat-rfc].
10919
10920 * Language
10921
10922 * `for` loops [now operate on the `IntoIterator` trait][into],
10923 which eliminates the need to call `.iter()`, etc. to iterate
10924 over collections. There are some new subtleties to remember
10925 though regarding what sort of iterators various types yield, in
10926 particular that `for foo in bar { }` yields values from a move
10927 iterator, destroying the original collection. [RFC][into-rfc].
10928 * Objects now have [default lifetime bounds][obj], so you don't
10929 have to write `Box<Trait+'static>` when you don't care about
10930 storing references. [RFC][obj-rfc].
10931 * In types that implement `Drop`, [lifetimes must outlive the
10932 value][drop]. This will soon make it possible to safely
10933 implement `Drop` for types where `#[unsafe_destructor]` is now
10934 required. Read the [gorgeous RFC][drop-rfc] for details.
10935 * The fully qualified <T as Trait>::X syntax lets you set the Self
10936 type for a trait method or associated type. [RFC][ufcs-rfc].
10937 * References to types that implement `Deref<U>` now [automatically
10938 coerce to references][deref] to the dereferenced type `U`,
10939 e.g. `&T where T: Deref<U>` automatically coerces to `&U`. This
10940 should eliminate many unsightly uses of `&*`, as when converting
10941 from references to vectors into references to
10942 slices. [RFC][deref-rfc].
10943 * The explicit [closure kind syntax][close] (`|&:|`, `|&mut:|`,
10944 `|:|`) is obsolete and closure kind is inferred from context.
10945 * [`Self` is a keyword][Self].
10946
10947 * Libraries
10948
10949 * The `Show` and `String` formatting traits [have been
10950 renamed][fmt] to `Debug` and `Display` to more clearly reflect
10951 their related purposes. Automatically getting a string
10952 conversion to use with `format!("{:?}", something_to_debug)` is
10953 now written `#[derive(Debug)]`.
10954 * Abstract [OS-specific string types][osstr], `std::ff::{OsString,
10955 OsStr}`, provide strings in platform-specific encodings for easier
10956 interop with system APIs. [RFC][osstr-rfc].
10957 * The `boxed::into_raw` and `Box::from_raw` functions [convert
10958 between `Box<T>` and `*mut T`][boxraw], a common pattern for
10959 creating raw pointers.
10960
10961 * Tooling
10962
10963 * Certain long error messages of the form 'expected foo found bar'
10964 are now [split neatly across multiple
10965 lines][multiline]. Examples in the PR.
10966 * On Unix Rust can be [uninstalled][un] by running
10967 `/usr/local/lib/rustlib/uninstall.sh`.
10968 * The `#[rustc_on_unimplemented]` attribute, requiring the
10969 'on_unimplemented' feature, lets rustc [display custom error
10970 messages when a trait is expected to be implemented for a type
10971 but is not][onun].
10972
10973 * Misc
10974
10975 * Rust is tested against a [LALR grammar][lalr], which parses
10976 almost all the Rust files that rustc does.
10977
10978 [boxraw]: https://github.com/rust-lang/rust/pull/21318
10979 [close]: https://github.com/rust-lang/rust/pull/21843
10980 [deref]: https://github.com/rust-lang/rust/pull/21351
10981 [deref-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0241-deref-conversions.md
10982 [drop]: https://github.com/rust-lang/rust/pull/21972
10983 [drop-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0769-sound-generic-drop.md
10984 [feat]: https://github.com/rust-lang/rust/pull/21248
10985 [feat-forum]: https://users.rust-lang.org/t/psa-important-info-about-rustcs-new-feature-staging/82/5
10986 [feat-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
10987 [fmt]: https://github.com/rust-lang/rust/pull/21457
10988 [into]: https://github.com/rust-lang/rust/pull/20790
10989 [into-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md#intoiterator-and-iterable
10990 [io-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
10991 [lalr]: https://github.com/rust-lang/rust/pull/21452
10992 [multiline]: https://github.com/rust-lang/rust/pull/19870
10993 [obj]: https://github.com/rust-lang/rust/pull/22230
10994 [obj-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0599-default-object-bound.md
10995 [onun]: https://github.com/rust-lang/rust/pull/20889
10996 [osstr]: https://github.com/rust-lang/rust/pull/21488
10997 [osstr-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
10998 [Self]: https://github.com/rust-lang/rust/pull/22158
10999 [ufcs-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0132-ufcs.md
11000 [un]: https://github.com/rust-lang/rust/pull/22256
11001
11002
11003 Version 1.0.0-alpha (2015-01-09)
11004 ==================================
11005
11006 * ~2400 changes, numerous bugfixes
11007
11008 * Highlights
11009
11010 * The language itself is considered feature complete for 1.0,
11011 though there will be many usability improvements and bugfixes
11012 before the final release.
11013 * Nearly 50% of the public API surface of the standard library has
11014 been declared 'stable'. Those interfaces are unlikely to change
11015 before 1.0.
11016 * The long-running debate over integer types has been
11017 [settled][ints]: Rust will ship with types named `isize` and
11018 `usize`, rather than `int` and `uint`, for pointer-sized
11019 integers. Guidelines will be rolled out during the alpha cycle.
11020 * Most crates that are not `std` have been moved out of the Rust
11021 distribution into the Cargo ecosystem so they can evolve
11022 separately and don't need to be stabilized as quickly, including
11023 'time', 'getopts', 'num', 'regex', and 'term'.
11024 * Documentation continues to be expanded with more API coverage, more
11025 examples, and more in-depth explanations. The guides have been
11026 consolidated into [The Rust Programming Language][trpl].
11027 * "[Rust By Example][rbe]" is now maintained by the Rust team.
11028 * All official Rust binary installers now come with [Cargo], the
11029 Rust package manager.
11030
11031 * Language
11032
11033 * Closures have been [completely redesigned][unboxed] to be
11034 implemented in terms of traits, can now be used as generic type
11035 bounds and thus monomorphized and inlined, or via an opaque
11036 pointer (boxed) as in the old system. The new system is often
11037 referred to as 'unboxed' closures.
11038 * Traits now support [associated types][assoc], allowing families
11039 of related types to be defined together and used generically in
11040 powerful ways.
11041 * Enum variants are [namespaced by their type names][enum].
11042 * [`where` clauses][where] provide a more versatile and attractive
11043 syntax for specifying generic bounds, though the previous syntax
11044 remains valid.
11045 * Rust again picks a [fallback][fb] (either i32 or f64) for uninferred
11046 numeric types.
11047 * Rust [no longer has a runtime][rt] of any description, and only
11048 supports OS threads, not green threads.
11049 * At long last, Rust has been overhauled for 'dynamically-sized
11050 types' ([DST]), which integrates 'fat pointers' (object types,
11051 arrays, and `str`) more deeply into the type system, making it
11052 more consistent.
11053 * Rust now has a general [range syntax][range], `i..j`, `i..`, and
11054 `..j` that produce range types and which, when combined with the
11055 `Index` operator and multidispatch, leads to a convenient slice
11056 notation, `[i..j]`.
11057 * The new range syntax revealed an ambiguity in the fixed-length
11058 array syntax, so now fixed length arrays [are written `[T;
11059 N]`][arrays].
11060 * The `Copy` trait is no longer implemented automatically. Unsafe
11061 pointers no longer implement `Sync` and `Send` so types
11062 containing them don't automatically either. `Sync` and `Send`
11063 are now 'unsafe traits' so one can "forcibly" implement them via
11064 `unsafe impl` if a type confirms to the requirements for them
11065 even though the internals do not (e.g. structs containing unsafe
11066 pointers like `Arc`). These changes are intended to prevent some
11067 footguns and are collectively known as [opt-in built-in
11068 traits][oibit] (though `Sync` and `Send` will soon become pure
11069 library types unknown to the compiler).
11070 * Operator traits now take their operands [by value][ops], and
11071 comparison traits can use multidispatch to compare one type
11072 against multiple other types, allowing e.g. `String` to be
11073 compared with `&str`.
11074 * `if let` and `while let` are no longer feature-gated.
11075 * Rust has adopted a more [uniform syntax for escaping unicode
11076 characters][unicode].
11077 * `macro_rules!` [has been declared stable][mac]. Though it is a
11078 flawed system it is sufficiently popular that it must be usable
11079 for 1.0. Effort has gone into [future-proofing][mac-future] it
11080 in ways that will allow other macro systems to be developed in
11081 parallel, and won't otherwise impact the evolution of the
11082 language.
11083 * The prelude has been [pared back significantly][prelude] such
11084 that it is the minimum necessary to support the most pervasive
11085 code patterns, and through [generalized where clauses][where]
11086 many of the prelude extension traits have been consolidated.
11087 * Rust's rudimentary reflection [has been removed][refl], as it
11088 incurred too much code generation for little benefit.
11089 * [Struct variants][structvars] are no longer feature-gated.
11090 * Trait bounds can be [polymorphic over lifetimes][hrtb]. Also
11091 known as 'higher-ranked trait bounds', this crucially allows
11092 unboxed closures to work.
11093 * Macros invocations surrounded by parens or square brackets and
11094 not terminated by a semicolon are [parsed as
11095 expressions][macros], which makes expressions like `vec![1i32,
11096 2, 3].len()` work as expected.
11097 * Trait objects now implement their traits automatically, and
11098 traits that can be coerced to objects now must be [object
11099 safe][objsafe].
11100 * Automatically deriving traits is now done with `#[derive(...)]`
11101 not `#[deriving(...)]` for [consistency with other naming
11102 conventions][derive].
11103 * Importing the containing module or enum at the same time as
11104 items or variants they contain is [now done with `self` instead
11105 of `mod`][self], as in use `foo::{self, bar}`
11106 * Glob imports are no longer feature-gated.
11107 * The `box` operator and `box` patterns have been feature-gated
11108 pending a redesign. For now unique boxes should be allocated
11109 like other containers, with `Box::new`.
11110
11111 * Libraries
11112
11113 * A [series][coll1] of [efforts][coll2] to establish
11114 [conventions][coll3] for collections types has resulted in API
11115 improvements throughout the standard library.
11116 * New [APIs for error handling][err] provide ergonomic interop
11117 between error types, and [new conventions][err-conv] describe
11118 more clearly the recommended error handling strategies in Rust.
11119 * The `fail!` macro has been renamed to [`panic!`][panic] so that
11120 it is easier to discuss failure in the context of error handling
11121 without making clarifications as to whether you are referring to
11122 the 'fail' macro or failure more generally.
11123 * On Linux, `OsRng` prefers the new, more reliable `getrandom`
11124 syscall when available.
11125 * The 'serialize' crate has been renamed 'rustc-serialize' and
11126 moved out of the distribution to Cargo. Although it is widely
11127 used now, it is expected to be superseded in the near future.
11128 * The `Show` formatter, typically implemented with
11129 `#[derive(Show)]` is [now requested with the `{:?}`
11130 specifier][show] and is intended for use by all types, for uses
11131 such as `println!` debugging. The new `String` formatter must be
11132 implemented by hand, uses the `{}` specifier, and is intended
11133 for full-fidelity conversions of things that can logically be
11134 represented as strings.
11135
11136 * Tooling
11137
11138 * [Flexible target specification][flex] allows rustc's code
11139 generation to be configured to support otherwise-unsupported
11140 platforms.
11141 * Rust comes with rust-gdb and rust-lldb scripts that launch their
11142 respective debuggers with Rust-appropriate pretty-printing.
11143 * The Windows installation of Rust is distributed with the
11144 MinGW components currently required to link binaries on that
11145 platform.
11146
11147 * Misc
11148
11149 * Nullable enum optimizations have been extended to more types so
11150 that e.g. `Option<Vec<T>>` and `Option<String>` take up no more
11151 space than the inner types themselves.
11152 * Work has begun on supporting AArch64.
11153
11154 [Cargo]: https://crates.io
11155 [unboxed]: http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/
11156 [enum]: https://github.com/rust-lang/rfcs/blob/master/text/0390-enum-namespacing.md
11157 [flex]: https://github.com/rust-lang/rfcs/blob/master/text/0131-target-specification.md
11158 [err]: https://github.com/rust-lang/rfcs/blob/master/text/0201-error-chaining.md
11159 [err-conv]: https://github.com/rust-lang/rfcs/blob/master/text/0236-error-conventions.md
11160 [rt]: https://github.com/rust-lang/rfcs/blob/master/text/0230-remove-runtime.md
11161 [mac]: https://github.com/rust-lang/rfcs/blob/master/text/0453-macro-reform.md
11162 [mac-future]: https://github.com/rust-lang/rfcs/pull/550
11163 [DST]: http://smallcultfollowing.com/babysteps/blog/2014/01/05/dst-take-5/
11164 [coll1]: https://github.com/rust-lang/rfcs/blob/master/text/0235-collections-conventions.md
11165 [coll2]: https://github.com/rust-lang/rfcs/blob/master/text/0509-collections-reform-part-2.md
11166 [coll3]: https://github.com/rust-lang/rfcs/blob/master/text/0216-collection-views.md
11167 [ops]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md
11168 [prelude]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md
11169 [where]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md
11170 [refl]: https://github.com/rust-lang/rfcs/blob/master/text/0379-remove-reflection.md
11171 [panic]: https://github.com/rust-lang/rfcs/blob/master/text/0221-panic.md
11172 [structvars]: https://github.com/rust-lang/rfcs/blob/master/text/0418-struct-variants.md
11173 [hrtb]: https://github.com/rust-lang/rfcs/blob/master/text/0387-higher-ranked-trait-bounds.md
11174 [unicode]: https://github.com/rust-lang/rfcs/blob/master/text/0446-es6-unicode-escapes.md
11175 [oibit]: https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md
11176 [macros]: https://github.com/rust-lang/rfcs/blob/master/text/0378-expr-macros.md
11177 [range]: https://github.com/rust-lang/rfcs/blob/master/text/0439-cmp-ops-reform.md#indexing-and-slicing
11178 [arrays]: https://github.com/rust-lang/rfcs/blob/master/text/0520-new-array-repeat-syntax.md
11179 [show]: https://github.com/rust-lang/rfcs/blob/master/text/0504-show-stabilization.md
11180 [derive]: https://github.com/rust-lang/rfcs/blob/master/text/0534-deriving2derive.md
11181 [self]: https://github.com/rust-lang/rfcs/blob/master/text/0532-self-in-use.md
11182 [fb]: https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md
11183 [objsafe]: https://github.com/rust-lang/rfcs/blob/master/text/0255-object-safety.md
11184 [assoc]: https://github.com/rust-lang/rfcs/blob/master/text/0195-associated-items.md
11185 [ints]: https://github.com/rust-lang/rfcs/pull/544#issuecomment-68760871
11186 [trpl]: https://doc.rust-lang.org/book/index.html
11187 [rbe]: http://rustbyexample.com/
11188
11189
11190 Version 0.12.0 (2014-10-09)
11191 =============================
11192
11193 * ~1900 changes, numerous bugfixes
11194
11195 * Highlights
11196
11197 * The introductory documentation (now called The Rust Guide) has
11198 been completely rewritten, as have a number of supplementary
11199 guides.
11200 * Rust's package manager, Cargo, continues to improve and is
11201 sometimes considered to be quite awesome.
11202 * Many API's in `std` have been reviewed and updated for
11203 consistency with the in-development Rust coding
11204 guidelines. The standard library documentation tracks
11205 stabilization progress.
11206 * Minor libraries have been moved out-of-tree to the rust-lang org
11207 on GitHub: uuid, semver, glob, num, hexfloat, fourcc. They can
11208 be installed with Cargo.
11209 * Lifetime elision allows lifetime annotations to be left off of
11210 function declarations in many common scenarios.
11211 * Rust now works on 64-bit Windows.
11212
11213 * Language
11214 * Indexing can be overloaded with the `Index` and `IndexMut`
11215 traits.
11216 * The `if let` construct takes a branch only if the `let` pattern
11217 matches, currently behind the 'if_let' feature gate.
11218 * 'where clauses', a more flexible syntax for specifying trait
11219 bounds that is more aesthetic, have been added for traits and
11220 free functions. Where clauses will in the future make it
11221 possible to constrain associated types, which would be
11222 impossible with the existing syntax.
11223 * A new slicing syntax (e.g. `[0..4]`) has been introduced behind
11224 the 'slicing_syntax' feature gate, and can be overloaded with
11225 the `Slice` or `SliceMut` traits.
11226 * The syntax for matching of sub-slices has been changed to use a
11227 postfix `..` instead of prefix (.e.g. `[a, b, c..]`), for
11228 consistency with other uses of `..` and to future-proof
11229 potential additional uses of the syntax.
11230 * The syntax for matching inclusive ranges in patterns has changed
11231 from `0..3` to `0...4` to be consistent with the exclusive range
11232 syntax for slicing.
11233 * Matching of sub-slices in non-tail positions (e.g. `[a.., b,
11234 c]`) has been put behind the 'advanced_slice_patterns' feature
11235 gate and may be removed in the future.
11236 * Components of tuples and tuple structs can be extracted using
11237 the `value.0` syntax, currently behind the `tuple_indexing`
11238 feature gate.
11239 * The `#[crate_id]` attribute is no longer supported; versioning
11240 is handled by the package manager.
11241 * Renaming crate imports are now written `extern crate foo as bar`
11242 instead of `extern crate bar = foo`.
11243 * Renaming use statements are now written `use foo as bar` instead
11244 of `use bar = foo`.
11245 * `let` and `match` bindings and argument names in macros are now
11246 hygienic.
11247 * The new, more efficient, closure types ('unboxed closures') have
11248 been added under a feature gate, 'unboxed_closures'. These will
11249 soon replace the existing closure types, once higher-ranked
11250 trait lifetimes are added to the language.
11251 * `move` has been added as a keyword, for indicating closures
11252 that capture by value.
11253 * Mutation and assignment is no longer allowed in pattern guards.
11254 * Generic structs and enums can now have trait bounds.
11255 * The `Share` trait is now called `Sync` to free up the term
11256 'shared' to refer to 'shared reference' (the default reference
11257 type.
11258 * Dynamically-sized types have been mostly implemented,
11259 unifying the behavior of fat-pointer types with the rest of the
11260 type system.
11261 * As part of dynamically-sized types, the `Sized` trait has been
11262 introduced, which qualifying types implement by default, and
11263 which type parameters expect by default. To specify that a type
11264 parameter does not need to be sized, write `<Sized? T>`. Most
11265 types are `Sized`, notable exceptions being unsized arrays
11266 (`[T]`) and trait types.
11267 * Closures can return `!`, as in `|| -> !` or `proc() -> !`.
11268 * Lifetime bounds can now be applied to type parameters and object
11269 types.
11270 * The old, reference counted GC type, `Gc<T>` which was once
11271 denoted by the `@` sigil, has finally been removed. GC will be
11272 revisited in the future.
11273
11274 * Libraries
11275 * Library documentation has been improved for a number of modules.
11276 * Bit-vectors, collections::bitv has been modernized.
11277 * The url crate is deprecated in favor of
11278 http://github.com/servo/rust-url, which can be installed with
11279 Cargo.
11280 * Most I/O stream types can be cloned and subsequently closed from
11281 a different thread.
11282 * A `std::time::Duration` type has been added for use in I/O
11283 methods that rely on timers, as well as in the 'time' crate's
11284 `Timespec` arithmetic.
11285 * The runtime I/O abstraction layer that enabled the green thread
11286 scheduler to do non-thread-blocking I/O has been removed, along
11287 with the libuv-based implementation employed by the green thread
11288 scheduler. This will greatly simplify the future I/O work.
11289 * `collections::btree` has been rewritten to have a more
11290 idiomatic and efficient design.
11291
11292 * Tooling
11293 * rustdoc output now indicates the stability levels of API's.
11294 * The `--crate-name` flag can specify the name of the crate
11295 being compiled, like `#[crate_name]`.
11296 * The `-C metadata` specifies additional metadata to hash into
11297 symbol names, and `-C extra-filename` specifies additional
11298 information to put into the output filename, for use by the
11299 package manager for versioning.
11300 * debug info generation has continued to improve and should be
11301 more reliable under both gdb and lldb.
11302 * rustc has experimental support for compiling in parallel
11303 using the `-C codegen-units` flag.
11304 * rustc no longer encodes rpath information into binaries by
11305 default.
11306
11307 * Misc
11308 * Stack usage has been optimized with LLVM lifetime annotations.
11309 * Official Rust binaries on Linux are more compatible with older
11310 kernels and distributions, built on CentOS 5.10.
11311
11312
11313 Version 0.11.0 (2014-07-02)
11314 ==========================
11315
11316 * ~1700 changes, numerous bugfixes
11317
11318 * Language
11319 * ~[T] has been removed from the language. This type is superseded by
11320 the Vec<T> type.
11321 * ~str has been removed from the language. This type is superseded by
11322 the String type.
11323 * ~T has been removed from the language. This type is superseded by the
11324 Box<T> type.
11325 * @T has been removed from the language. This type is superseded by the
11326 standard library's std::gc::Gc<T> type.
11327 * Struct fields are now all private by default.
11328 * Vector indices and shift amounts are both required to be a `uint`
11329 instead of any integral type.
11330 * Byte character, byte string, and raw byte string literals are now all
11331 supported by prefixing the normal literal with a `b`.
11332 * Multiple ABIs are no longer allowed in an ABI string
11333 * The syntax for lifetimes on closures/procedures has been tweaked
11334 slightly: `<'a>|A, B|: 'b + K -> T`
11335 * Floating point modulus has been removed from the language; however it
11336 is still provided by a library implementation.
11337 * Private enum variants are now disallowed.
11338 * The `priv` keyword has been removed from the language.
11339 * A closure can no longer be invoked through a &-pointer.
11340 * The `use foo, bar, baz;` syntax has been removed from the language.
11341 * The transmute intrinsic no longer works on type parameters.
11342 * Statics now allow blocks/items in their definition.
11343 * Trait bounds are separated from objects with + instead of : now.
11344 * Objects can no longer be read while they are mutably borrowed.
11345 * The address of a static is now marked as insignificant unless the
11346 #[inline(never)] attribute is placed it.
11347 * The #[unsafe_destructor] attribute is now behind a feature gate.
11348 * Struct literals are no longer allowed in ambiguous positions such as
11349 if, while, match, and for..in.
11350 * Declaration of lang items and intrinsics are now feature-gated by
11351 default.
11352 * Integral literals no longer default to `int`, and floating point
11353 literals no longer default to `f64`. Literals must be suffixed with an
11354 appropriate type if inference cannot determine the type of the
11355 literal.
11356 * The Box<T> type is no longer implicitly borrowed to &mut T.
11357 * Procedures are now required to not capture borrowed references.
11358
11359 * Libraries
11360 * The standard library is now a "facade" over a number of underlying
11361 libraries. This means that development on the standard library should
11362 be speedier due to smaller crates, as well as a clearer line between
11363 all dependencies.
11364 * A new library, libcore, lives under the standard library's facade
11365 which is Rust's "0-assumption" library, suitable for embedded and
11366 kernel development for example.
11367 * A regex crate has been added to the standard distribution. This crate
11368 includes statically compiled regular expressions.
11369 * The unwrap/unwrap_err methods on Result require a Show bound for
11370 better error messages.
11371 * The return types of the std::comm primitives have been centralized
11372 around the Result type.
11373 * A number of I/O primitives have gained the ability to time out their
11374 operations.
11375 * A number of I/O primitives have gained the ability to close their
11376 reading/writing halves to cancel pending operations.
11377 * Reverse iterator methods have been removed in favor of `rev()` on
11378 their forward-iteration counterparts.
11379 * A bitflags! macro has been added to enable easy interop with C and
11380 management of bit flags.
11381 * A debug_assert! macro is now provided which is disabled when
11382 `--cfg ndebug` is passed to the compiler.
11383 * A graphviz crate has been added for creating .dot files.
11384 * The std::cast module has been migrated into std::mem.
11385 * The std::local_data api has been migrated from freestanding functions
11386 to being based on methods.
11387 * The Pod trait has been renamed to Copy.
11388 * jemalloc has been added as the default allocator for types.
11389 * The API for allocating memory has been changed to use proper alignment
11390 and sized deallocation
11391 * Connecting a TcpStream or binding a TcpListener is now based on a
11392 string address and a u16 port. This allows connecting to a hostname as
11393 opposed to an IP.
11394 * The Reader trait now contains a core method, read_at_least(), which
11395 correctly handles many repeated 0-length reads.
11396 * The process-spawning API is now centered around a builder-style
11397 Command struct.
11398 * The :? printing qualifier has been moved from the standard library to
11399 an external libdebug crate.
11400 * Eq/Ord have been renamed to PartialEq/PartialOrd. TotalEq/TotalOrd
11401 have been renamed to Eq/Ord.
11402 * The select/plural methods have been removed from format!. The escapes
11403 for { and } have also changed from \{ and \} to {{ and }},
11404 respectively.
11405 * The TaskBuilder API has been re-worked to be a true builder, and
11406 extension traits for spawning native/green tasks have been added.
11407
11408 * Tooling
11409 * All breaking changes to the language or libraries now have their
11410 commit message annotated with `[breaking-change]` to allow for easy
11411 discovery of breaking changes.
11412 * The compiler will now try to suggest how to annotate lifetimes if a
11413 lifetime-related error occurs.
11414 * Debug info continues to be improved greatly with general bug fixes and
11415 better support for situations like link time optimization (LTO).
11416 * Usage of syntax extensions when cross-compiling has been fixed.
11417 * Functionality equivalent to GCC & Clang's -ffunction-sections,
11418 -fdata-sections and --gc-sections has been enabled by default
11419 * The compiler is now stricter about where it will load module files
11420 from when a module is declared via `mod foo;`.
11421 * The #[phase(syntax)] attribute has been renamed to #[phase(plugin)].
11422 Syntax extensions are now discovered via a "plugin registrar" type
11423 which will be extended in the future to other various plugins.
11424 * Lints have been restructured to allow for dynamically loadable lints.
11425 * A number of rustdoc improvements:
11426 * The HTML output has been visually redesigned.
11427 * Markdown is now powered by hoedown instead of sundown.
11428 * Searching heuristics have been greatly improved.
11429 * The search index has been reduced in size by a great amount.
11430 * Cross-crate documentation via `pub use` has been greatly improved.
11431 * Primitive types are now hyperlinked and documented.
11432 * Documentation has been moved from static.rust-lang.org/doc to
11433 doc.rust-lang.org
11434 * A new sandbox, play.rust-lang.org, is available for running and
11435 sharing rust code examples on-line.
11436 * Unused attributes are now more robustly warned about.
11437 * The dead_code lint now warns about unused struct fields.
11438 * Cross-compiling to iOS is now supported.
11439 * Cross-compiling to mipsel is now supported.
11440 * Stability attributes are now inherited by default and no longer apply
11441 to intra-crate usage, only inter-crate usage.
11442 * Error message related to non-exhaustive match expressions have been
11443 greatly improved.
11444
11445
11446 Version 0.10 (2014-04-03)
11447 =========================
11448
11449 * ~1500 changes, numerous bugfixes
11450
11451 * Language
11452 * A new RFC process is now in place for modifying the language.
11453 * Patterns with `@`-pointers have been removed from the language.
11454 * Patterns with unique vectors (`~[T]`) have been removed from the
11455 language.
11456 * Patterns with unique strings (`~str`) have been removed from the
11457 language.
11458 * `@str` has been removed from the language.
11459 * `@[T]` has been removed from the language.
11460 * `@self` has been removed from the language.
11461 * `@Trait` has been removed from the language.
11462 * Headers on `~` allocations which contain `@` boxes inside the type for
11463 reference counting have been removed.
11464 * The semantics around the lifetimes of temporary expressions have changed,
11465 see #3511 and #11585 for more information.
11466 * Cross-crate syntax extensions are now possible, but feature gated. See
11467 #11151 for more information. This includes both `macro_rules!` macros as
11468 well as syntax extensions such as `format!`.
11469 * New lint modes have been added, and older ones have been turned on to be
11470 warn-by-default.
11471 * Unnecessary parentheses
11472 * Uppercase statics
11473 * Camel Case types
11474 * Uppercase variables
11475 * Publicly visible private types
11476 * `#[deriving]` with raw pointers
11477 * Unsafe functions can no longer be coerced to closures.
11478 * Various obscure macros such as `log_syntax!` are now behind feature gates.
11479 * The `#[simd]` attribute is now behind a feature gate.
11480 * Visibility is no longer allowed on `extern crate` statements, and
11481 unnecessary visibility (`priv`) is no longer allowed on `use` statements.
11482 * Trailing commas are now allowed in argument lists and tuple patterns.
11483 * The `do` keyword has been removed, it is now a reserved keyword.
11484 * Default type parameters have been implemented, but are feature gated.
11485 * Borrowed variables through captures in closures are now considered soundly.
11486 * `extern mod` is now `extern crate`
11487 * The `Freeze` trait has been removed.
11488 * The `Share` trait has been added for types that can be shared among
11489 threads.
11490 * Labels in macros are now hygienic.
11491 * Expression/statement macro invocations can be delimited with `{}` now.
11492 * Treatment of types allowed in `static mut` locations has been tweaked.
11493 * The `*` and `.` operators are now overloadable through the `Deref` and
11494 `DerefMut` traits.
11495 * `~Trait` and `proc` no longer have `Send` bounds by default.
11496 * Partial type hints are now supported with the `_` type marker.
11497 * An `Unsafe` type was introduced for interior mutability. It is now
11498 considered undefined to transmute from `&T` to `&mut T` without using the
11499 `Unsafe` type.
11500 * The #[linkage] attribute was implemented for extern statics/functions.
11501 * The inner attribute syntax has changed from `#[foo];` to `#![foo]`.
11502 * `Pod` was renamed to `Copy`.
11503
11504 * Libraries
11505 * The `libextra` library has been removed. It has now been decomposed into
11506 component libraries with smaller and more focused nuggets of
11507 functionality. The full list of libraries can be found on the
11508 documentation index page.
11509 * std: `std::condition` has been removed. All I/O errors are now propagated
11510 through the `Result` type. In order to assist with error handling, a
11511 `try!` macro for unwrapping errors with an early return and a lint for
11512 unused results has been added. See #12039 for more information.
11513 * std: The `vec` module has been renamed to `slice`.
11514 * std: A new vector type, `Vec<T>`, has been added in preparation for DST.
11515 This will become the only growable vector in the future.
11516 * std: `std::io` now has more public re-exports. Types such as `BufferedReader`
11517 are now found at `std::io::BufferedReader` instead of
11518 `std::io::buffered::BufferedReader`.
11519 * std: `print` and `println` are no longer in the prelude, the `print!` and
11520 `println!` macros are intended to be used instead.
11521 * std: `Rc` now has a `Weak` pointer for breaking cycles, and it no longer
11522 attempts to statically prevent cycles.
11523 * std: The standard distribution is adopting the policy of pushing failure
11524 to the user rather than failing in libraries. Many functions (such as
11525 `slice::last()`) now return `Option<T>` instead of `T` + failing.
11526 * std: `fmt::Default` has been renamed to `fmt::Show`, and it now has a new
11527 deriving mode: `#[deriving(Show)]`.
11528 * std: `ToStr` is now implemented for all types implementing `Show`.
11529 * std: The formatting trait methods now take `&self` instead of `&T`
11530 * std: The `invert()` method on iterators has been renamed to `rev()`
11531 * std: `std::num` has seen a reduction in the genericity of its traits,
11532 consolidating functionality into a few core traits.
11533 * std: Backtraces are now printed on task failure if the environment
11534 variable `RUST_BACKTRACE` is present.
11535 * std: Naming conventions for iterators have been standardized. More details
11536 can be found on the wiki's style guide.
11537 * std: `eof()` has been removed from the `Reader` trait. Specific types may
11538 still implement the function.
11539 * std: Networking types are now cloneable to allow simultaneous reads/writes.
11540 * std: `assert_approx_eq!` has been removed
11541 * std: The `e` and `E` formatting specifiers for floats have been added to
11542 print them in exponential notation.
11543 * std: The `Times` trait has been removed
11544 * std: Indications of variance and opting out of builtin bounds is done
11545 through marker types in `std::kinds::marker` now
11546 * std: `hash` has been rewritten, `IterBytes` has been removed, and
11547 `#[deriving(Hash)]` is now possible.
11548 * std: `SharedChan` has been removed, `Sender` is now cloneable.
11549 * std: `Chan` and `Port` were renamed to `Sender` and `Receiver`.
11550 * std: `Chan::new` is now `channel()`.
11551 * std: A new synchronous channel type has been implemented.
11552 * std: A `select!` macro is now provided for selecting over `Receiver`s.
11553 * std: `hashmap` and `trie` have been moved to `libcollections`
11554 * std: `run` has been rolled into `io::process`
11555 * std: `assert_eq!` now uses `{}` instead of `{:?}`
11556 * std: The equality and comparison traits have seen some reorganization.
11557 * std: `rand` has moved to `librand`.
11558 * std: `to_{lower,upper}case` has been implemented for `char`.
11559 * std: Logging has been moved to `liblog`.
11560 * collections: `HashMap` has been rewritten for higher performance and less
11561 memory usage.
11562 * native: The default runtime is now `libnative`. If `libgreen` is desired,
11563 it can be booted manually. The runtime guide has more information and
11564 examples.
11565 * native: All I/O functionality except signals has been implemented.
11566 * green: Task spawning with `libgreen` has been optimized with stack caching
11567 and various trimming of code.
11568 * green: Tasks spawned by `libgreen` now have an unmapped guard page.
11569 * sync: The `extra::sync` module has been updated to modern rust (and moved
11570 to the `sync` library), tweaking and improving various interfaces while
11571 dropping redundant functionality.
11572 * sync: A new `Barrier` type has been added to the `sync` library.
11573 * sync: An efficient mutex for native and green tasks has been implemented.
11574 * serialize: The `base64` module has seen some improvement. It treats
11575 newlines better, has non-string error values, and has seen general
11576 cleanup.
11577 * fourcc: A `fourcc!` macro was introduced
11578 * hexfloat: A `hexfloat!` macro was implemented for specifying floats via a
11579 hexadecimal literal.
11580
11581 * Tooling
11582 * `rustpkg` has been deprecated and removed from the main repository. Its
11583 replacement, `cargo`, is under development.
11584 * Nightly builds of rust are now available
11585 * The memory usage of rustc has been improved many times throughout this
11586 release cycle.
11587 * The build process supports disabling rpath support for the rustc binary
11588 itself.
11589 * Code generation has improved in some cases, giving more information to the
11590 LLVM optimization passes to enable more extensive optimizations.
11591 * Debuginfo compatibility with lldb on OSX has been restored.
11592 * The master branch is now gated on an android bot, making building for
11593 android much more reliable.
11594 * Output flags have been centralized into one `--emit` flag.
11595 * Crate type flags have been centralized into one `--crate-type` flag.
11596 * Codegen flags have been consolidated behind a `-C` flag.
11597 * Linking against outdated crates now has improved error messages.
11598 * Error messages with lifetimes will often suggest how to annotate the
11599 function to fix the error.
11600 * Many more types are documented in the standard library, and new guides
11601 were written.
11602 * Many `rustdoc` improvements:
11603 * code blocks are syntax highlighted.
11604 * render standalone markdown files.
11605 * the --test flag tests all code blocks by default.
11606 * exported macros are displayed.
11607 * re-exported types have their documentation inlined at the location of the
11608 first re-export.
11609 * search works across crates that have been rendered to the same output
11610 directory.
11611
11612
11613 Version 0.9 (2014-01-09)
11614 ==========================
11615
11616 * ~1800 changes, numerous bugfixes
11617
11618 * Language
11619 * The `float` type has been removed. Use `f32` or `f64` instead.
11620 * A new facility for enabling experimental features (feature gating) has
11621 been added, using the crate-level `#[feature(foo)]` attribute.
11622 * Managed boxes (@) are now behind a feature gate
11623 (`#[feature(managed_boxes)]`) in preparation for future removal. Use the
11624 standard library's `Gc` or `Rc` types instead.
11625 * `@mut` has been removed. Use `std::cell::{Cell, RefCell}` instead.
11626 * Jumping back to the top of a loop is now done with `continue` instead of
11627 `loop`.
11628 * Strings can no longer be mutated through index assignment.
11629 * Raw strings can be created via the basic `r"foo"` syntax or with matched
11630 hash delimiters, as in `r###"foo"###`.
11631 * `~fn` is now written `proc (args) -> retval { ... }` and may only be
11632 called once.
11633 * The `&fn` type is now written `|args| -> ret` to match the literal form.
11634 * `@fn`s have been removed.
11635 * `do` only works with procs in order to make it obvious what the cost
11636 of `do` is.
11637 * Single-element tuple-like structs can no longer be dereferenced to
11638 obtain the inner value. A more comprehensive solution for overloading
11639 the dereference operator will be provided in the future.
11640 * The `#[link(...)]` attribute has been replaced with
11641 `#[crate_id = "name#vers"]`.
11642 * Empty `impl`s must be terminated with empty braces and may not be
11643 terminated with a semicolon.
11644 * Keywords are no longer allowed as lifetime names; the `self` lifetime
11645 no longer has any special meaning.
11646 * The old `fmt!` string formatting macro has been removed.
11647 * `printf!` and `printfln!` (old-style formatting) removed in favor of
11648 `print!` and `println!`.
11649 * `mut` works in patterns now, as in `let (mut x, y) = (1, 2);`.
11650 * The `extern mod foo (name = "bar")` syntax has been removed. Use
11651 `extern mod foo = "bar"` instead.
11652 * New reserved keywords: `alignof`, `offsetof`, `sizeof`.
11653 * Macros can have attributes.
11654 * Macros can expand to items with attributes.
11655 * Macros can expand to multiple items.
11656 * The `asm!` macro is feature-gated (`#[feature(asm)]`).
11657 * Comments may be nested.
11658 * Values automatically coerce to trait objects they implement, without
11659 an explicit `as`.
11660 * Enum discriminants are no longer an entire word but as small as needed to
11661 contain all the variants. The `repr` attribute can be used to override
11662 the discriminant size, as in `#[repr(int)]` for integer-sized, and
11663 `#[repr(C)]` to match C enums.
11664 * Non-string literals are not allowed in attributes (they never worked).
11665 * The FFI now supports variadic functions.
11666 * Octal numeric literals, as in `0o7777`.
11667 * The `concat!` syntax extension performs compile-time string concatenation.
11668 * The `#[fixed_stack_segment]` and `#[rust_stack]` attributes have been
11669 removed as Rust no longer uses segmented stacks.
11670 * Non-ascii identifiers are feature-gated (`#[feature(non_ascii_idents)]`).
11671 * Ignoring all fields of an enum variant or tuple-struct is done with `..`,
11672 not `*`; ignoring remaining fields of a struct is also done with `..`,
11673 not `_`; ignoring a slice of a vector is done with `..`, not `.._`.
11674 * `rustc` supports the "win64" calling convention via `extern "win64"`.
11675 * `rustc` supports the "system" calling convention, which defaults to the
11676 preferred convention for the target platform, "stdcall" on 32-bit Windows,
11677 "C" elsewhere.
11678 * The `type_overflow` lint (default: warn) checks literals for overflow.
11679 * The `unsafe_block` lint (default: allow) checks for usage of `unsafe`.
11680 * The `attribute_usage` lint (default: warn) warns about unknown
11681 attributes.
11682 * The `unknown_features` lint (default: warn) warns about unknown
11683 feature gates.
11684 * The `dead_code` lint (default: warn) checks for dead code.
11685 * Rust libraries can be linked statically to one another
11686 * `#[link_args]` is behind the `link_args` feature gate.
11687 * Native libraries are now linked with `#[link(name = "foo")]`
11688 * Native libraries can be statically linked to a rust crate
11689 (`#[link(name = "foo", kind = "static")]`).
11690 * Native OS X frameworks are now officially supported
11691 (`#[link(name = "foo", kind = "framework")]`).
11692 * The `#[thread_local]` attribute creates thread-local (not task-local)
11693 variables. Currently behind the `thread_local` feature gate.
11694 * The `return` keyword may be used in closures.
11695 * Types that can be copied via a memcpy implement the `Pod` kind.
11696 * The `cfg` attribute can now be used on struct fields and enum variants.
11697
11698 * Libraries
11699 * std: The `option` and `result` API's have been overhauled to make them
11700 simpler, more consistent, and more composable.
11701 * std: The entire `std::io` module has been replaced with one that is
11702 more comprehensive and that properly interfaces with the underlying
11703 scheduler. File, TCP, UDP, Unix sockets, pipes, and timers are all
11704 implemented.
11705 * std: `io::util` contains a number of useful implementations of
11706 `Reader` and `Writer`, including `NullReader`, `NullWriter`,
11707 `ZeroReader`, `TeeReader`.
11708 * std: The reference counted pointer type `extra::rc` moved into std.
11709 * std: The `Gc` type in the `gc` module will replace `@` (it is currently
11710 just a wrapper around it).
11711 * std: The `Either` type has been removed.
11712 * std: `fmt::Default` can be implemented for any type to provide default
11713 formatting to the `format!` macro, as in `format!("{}", myfoo)`.
11714 * std: The `rand` API continues to be tweaked.
11715 * std: The `rust_begin_unwind` function, useful for inserting breakpoints
11716 on failure in gdb, is now named `rust_fail`.
11717 * std: The `each_key` and `each_value` methods on `HashMap` have been
11718 replaced by the `keys` and `values` iterators.
11719 * std: Functions dealing with type size and alignment have moved from the
11720 `sys` module to the `mem` module.
11721 * std: The `path` module was written and API changed.
11722 * std: `str::from_utf8` has been changed to cast instead of allocate.
11723 * std: `starts_with` and `ends_with` methods added to vectors via the
11724 `ImmutableEqVector` trait, which is in the prelude.
11725 * std: Vectors can be indexed with the `get_opt` method, which returns `None`
11726 if the index is out of bounds.
11727 * std: Task failure no longer propagates between tasks, as the model was
11728 complex, expensive, and incompatible with thread-based tasks.
11729 * std: The `Any` type can be used for dynamic typing.
11730 * std: `~Any` can be passed to the `fail!` macro and retrieved via
11731 `task::try`.
11732 * std: Methods that produce iterators generally do not have an `_iter`
11733 suffix now.
11734 * std: `cell::Cell` and `cell::RefCell` can be used to introduce mutability
11735 roots (mutable fields, etc.). Use instead of e.g. `@mut`.
11736 * std: `util::ignore` renamed to `prelude::drop`.
11737 * std: Slices have `sort` and `sort_by` methods via the `MutableVector`
11738 trait.
11739 * std: `vec::raw` has seen a lot of cleanup and API changes.
11740 * std: The standard library no longer includes any C++ code, and very
11741 minimal C, eliminating the dependency on libstdc++.
11742 * std: Runtime scheduling and I/O functionality has been factored out into
11743 extensible interfaces and is now implemented by two different crates:
11744 libnative, for native threading and I/O; and libgreen, for green threading
11745 and I/O. This paves the way for using the standard library in more limited
11746 embedded environments.
11747 * std: The `comm` module has been rewritten to be much faster, have a
11748 simpler, more consistent API, and to work for both native and green
11749 threading.
11750 * std: All libuv dependencies have been moved into the rustuv crate.
11751 * native: New implementations of runtime scheduling on top of OS threads.
11752 * native: New native implementations of TCP, UDP, file I/O, process spawning,
11753 and other I/O.
11754 * green: The green thread scheduler and message passing types are almost
11755 entirely lock-free.
11756 * extra: The `flatpipes` module had bitrotted and was removed.
11757 * extra: All crypto functions have been removed and Rust now has a policy of
11758 not reimplementing crypto in the standard library. In the future crypto
11759 will be provided by external crates with bindings to established libraries.
11760 * extra: `c_vec` has been modernized.
11761 * extra: The `sort` module has been removed. Use the `sort` method on
11762 mutable slices.
11763
11764 * Tooling
11765 * The `rust` and `rusti` commands have been removed, due to lack of
11766 maintenance.
11767 * `rustdoc` was completely rewritten.
11768 * `rustdoc` can test code examples in documentation.
11769 * `rustpkg` can test packages with the argument, 'test'.
11770 * `rustpkg` supports arbitrary dependencies, including C libraries.
11771 * `rustc`'s support for generating debug info is improved again.
11772 * `rustc` has better error reporting for unbalanced delimiters.
11773 * `rustc`'s JIT support was removed due to bitrot.
11774 * Executables and static libraries can be built with LTO (-Z lto)
11775 * `rustc` adds a `--dep-info` flag for communicating dependencies to
11776 build tools.
11777
11778
11779 Version 0.8 (2013-09-26)
11780 ============================
11781
11782 * ~2200 changes, numerous bugfixes
11783
11784 * Language
11785 * The `for` loop syntax has changed to work with the `Iterator` trait.
11786 * At long last, unwinding works on Windows.
11787 * Default methods are ready for use.
11788 * Many trait inheritance bugs fixed.
11789 * Owned and borrowed trait objects work more reliably.
11790 * `copy` is no longer a keyword. It has been replaced by the `Clone` trait.
11791 * rustc can omit emission of code for the `debug!` macro if it is passed
11792 `--cfg ndebug`
11793 * mod.rs is now "blessed". When loading `mod foo;`, rustc will now look
11794 for foo.rs, then foo/mod.rs, and will generate an error when both are
11795 present.
11796 * Strings no longer contain trailing nulls. The new `std::c_str` module
11797 provides new mechanisms for converting to C strings.
11798 * The type of foreign functions is now `extern "C" fn` instead of `*u8'.
11799 * The FFI has been overhauled such that foreign functions are called directly,
11800 instead of through a stack-switching wrapper.
11801 * Calling a foreign function must be done through a Rust function with the
11802 `#[fixed_stack_segment]` attribute.
11803 * The `externfn!` macro can be used to declare both a foreign function and
11804 a `#[fixed_stack_segment]` wrapper at once.
11805 * `pub` and `priv` modifiers on `extern` blocks are no longer parsed.
11806 * `unsafe` is no longer allowed on extern fns - they are all unsafe.
11807 * `priv` is disallowed everywhere except for struct fields and enum variants.
11808 * `&T` (besides `&'static T`) is no longer allowed in `@T`.
11809 * `ref` bindings in irrefutable patterns work correctly now.
11810 * `char` is now prevented from containing invalid code points.
11811 * Casting to `bool` is no longer allowed.
11812 * `\0` is now accepted as an escape in chars and strings.
11813 * `yield` is a reserved keyword.
11814 * `typeof` is a reserved keyword.
11815 * Crates may be imported by URL with `extern mod foo = "url";`.
11816 * Explicit enum discriminants may be given as uints as in `enum E { V = 0u }`
11817 * Static vectors can be initialized with repeating elements,
11818 e.g. `static foo: [u8, .. 100]: [0, .. 100];`.
11819 * Static structs can be initialized with functional record update,
11820 e.g. `static foo: Foo = Foo { a: 5, .. bar };`.
11821 * `cfg!` can be used to conditionally execute code based on the crate
11822 configuration, similarly to `#[cfg(...)]`.
11823 * The `unnecessary_qualification` lint detects unneeded module
11824 prefixes (default: allow).
11825 * Arithmetic operations have been implemented on the SIMD types in
11826 `std::unstable::simd`.
11827 * Exchange allocation headers were removed, reducing memory usage.
11828 * `format!` implements a completely new, extensible, and higher-performance
11829 string formatting system. It will replace `fmt!`.
11830 * `print!` and `println!` write formatted strings (using the `format!`
11831 extension) to stdout.
11832 * `write!` and `writeln!` write formatted strings (using the `format!`
11833 extension) to the new Writers in `std::rt::io`.
11834 * The library section in which a function or static is placed may
11835 be specified with `#[link_section = "..."]`.
11836 * The `proto!` syntax extension for defining bounded message protocols
11837 was removed.
11838 * `macro_rules!` is hygienic for `let` declarations.
11839 * The `#[export_name]` attribute specifies the name of a symbol.
11840 * `unreachable!` can be used to indicate unreachable code, and fails
11841 if executed.
11842
11843 * Libraries
11844 * std: Transitioned to the new runtime, written in Rust.
11845 * std: Added an experimental I/O library, `rt::io`, based on the new
11846 runtime.
11847 * std: A new generic `range` function was added to the prelude, replacing
11848 `uint::range` and friends.
11849 * std: `range_rev` no longer exists. Since range is an iterator it can be
11850 reversed with `range(lo, hi).invert()`.
11851 * std: The `chain` method on option renamed to `and_then`; `unwrap_or_default`
11852 renamed to `unwrap_or`.
11853 * std: The `iterator` module was renamed to `iter`.
11854 * std: Integral types now support the `checked_add`, `checked_sub`, and
11855 `checked_mul` operations for detecting overflow.
11856 * std: Many methods in `str`, `vec`, `option, `result` were renamed for
11857 consistency.
11858 * std: Methods are standardizing on conventions for casting methods:
11859 `to_foo` for copying, `into_foo` for moving, `as_foo` for temporary
11860 and cheap casts.
11861 * std: The `CString` type in `c_str` provides new ways to convert to and
11862 from C strings.
11863 * std: `DoubleEndedIterator` can yield elements in two directions.
11864 * std: The `mut_split` method on vectors partitions an `&mut [T]` into
11865 two splices.
11866 * std: `str::from_bytes` renamed to `str::from_utf8`.
11867 * std: `pop_opt` and `shift_opt` methods added to vectors.
11868 * std: The task-local data interface no longer uses @, and keys are
11869 no longer function pointers.
11870 * std: The `swap_unwrap` method of `Option` renamed to `take_unwrap`.
11871 * std: Added `SharedPort` to `comm`.
11872 * std: `Eq` has a default method for `ne`; only `eq` is required
11873 in implementations.
11874 * std: `Ord` has default methods for `le`, `gt` and `ge`; only `lt`
11875 is required in implementations.
11876 * std: `is_utf8` performance is improved, impacting many string functions.
11877 * std: `os::MemoryMap` provides cross-platform mmap.
11878 * std: `ptr::offset` is now unsafe, but also more optimized. Offsets that
11879 are not 'in-bounds' are considered undefined.
11880 * std: Many freestanding functions in `vec` removed in favor of methods.
11881 * std: Many freestanding functions on scalar types removed in favor of
11882 methods.
11883 * std: Many options to task builders were removed since they don't make
11884 sense in the new scheduler design.
11885 * std: More containers implement `FromIterator` so can be created by the
11886 `collect` method.
11887 * std: More complete atomic types in `unstable::atomics`.
11888 * std: `comm::PortSet` removed.
11889 * std: Mutating methods in the `Set` and `Map` traits have been moved into
11890 the `MutableSet` and `MutableMap` traits. `Container::is_empty`,
11891 `Map::contains_key`, `MutableMap::insert`, and `MutableMap::remove` have
11892 default implementations.
11893 * std: Various `from_str` functions were removed in favor of a generic
11894 `from_str` which is available in the prelude.
11895 * std: `util::unreachable` removed in favor of the `unreachable!` macro.
11896 * extra: `dlist`, the doubly-linked list was modernized.
11897 * extra: Added a `hex` module with `ToHex` and `FromHex` traits.
11898 * extra: Added `glob` module, replacing `std::os::glob`.
11899 * extra: `rope` was removed.
11900 * extra: `deque` was renamed to `ringbuf`. `RingBuf` implements `Deque`.
11901 * extra: `net`, and `timer` were removed. The experimental replacements
11902 are `std::rt::io::net` and `std::rt::io::timer`.
11903 * extra: Iterators implemented for `SmallIntMap`.
11904 * extra: Iterators implemented for `Bitv` and `BitvSet`.
11905 * extra: `SmallIntSet` removed. Use `BitvSet`.
11906 * extra: Performance of JSON parsing greatly improved.
11907 * extra: `semver` updated to SemVer 2.0.0.
11908 * extra: `term` handles more terminals correctly.
11909 * extra: `dbg` module removed.
11910 * extra: `par` module removed.
11911 * extra: `future` was cleaned up, with some method renames.
11912 * extra: Most free functions in `getopts` were converted to methods.
11913
11914 * Other
11915 * rustc's debug info generation (`-Z debug-info`) is greatly improved.
11916 * rustc accepts `--target-cpu` to compile to a specific CPU architecture,
11917 similarly to gcc's `--march` flag.
11918 * rustc's performance compiling small crates is much better.
11919 * rustpkg has received many improvements.
11920 * rustpkg supports git tags as package IDs.
11921 * rustpkg builds into target-specific directories so it can be used for
11922 cross-compiling.
11923 * The number of concurrent test tasks is controlled by the environment
11924 variable RUST_TEST_TASKS.
11925 * The test harness can now report metrics for benchmarks.
11926 * All tools have man pages.
11927 * Programs compiled with `--test` now support the `-h` and `--help` flags.
11928 * The runtime uses jemalloc for allocations.
11929 * Segmented stacks are temporarily disabled as part of the transition to
11930 the new runtime. Stack overflows are possible!
11931 * A new documentation backend, rustdoc_ng, is available for use. It is
11932 still invoked through the normal `rustdoc` command.
11933
11934
11935 Version 0.7 (2013-07-03)
11936 =======================
11937
11938 * ~2000 changes, numerous bugfixes
11939
11940 * Language
11941 * `impl`s no longer accept a visibility qualifier. Put them on methods
11942 instead.
11943 * The borrow checker has been rewritten with flow-sensitivity, fixing
11944 many bugs and inconveniences.
11945 * The `self` parameter no longer implicitly means `&'self self`,
11946 and can be explicitly marked with a lifetime.
11947 * Overloadable compound operators (`+=`, etc.) have been temporarily
11948 removed due to bugs.
11949 * The `for` loop protocol now requires `for`-iterators to return `bool`
11950 so they compose better.
11951 * The `Durable` trait is replaced with the `'static` bounds.
11952 * Trait default methods work more often.
11953 * Structs with the `#[packed]` attribute have byte alignment and
11954 no padding between fields.
11955 * Type parameters bound by `Copy` must now be copied explicitly with
11956 the `copy` keyword.
11957 * It is now illegal to move out of a dereferenced unsafe pointer.
11958 * `Option<~T>` is now represented as a nullable pointer.
11959 * `@mut` does dynamic borrow checks correctly.
11960 * The `main` function is only detected at the topmost level of the crate.
11961 The `#[main]` attribute is still valid anywhere.
11962 * Struct fields may no longer be mutable. Use inherited mutability.
11963 * The `#[no_send]` attribute makes a type that would otherwise be
11964 `Send`, not.
11965 * The `#[no_freeze]` attribute makes a type that would otherwise be
11966 `Freeze`, not.
11967 * Unbounded recursion will abort the process after reaching the limit
11968 specified by the `RUST_MAX_STACK` environment variable (default: 1GB).
11969 * The `vecs_implicitly_copyable` lint mode has been removed. Vectors
11970 are never implicitly copyable.
11971 * `#[static_assert]` makes compile-time assertions about static bools.
11972 * At long last, 'argument modes' no longer exist.
11973 * The rarely used `use mod` statement no longer exists.
11974
11975 * Syntax extensions
11976 * `fail!` and `assert!` accept `~str`, `&'static str` or `fmt!`-style
11977 argument list.
11978 * `Encodable`, `Decodable`, `Ord`, `TotalOrd`, `TotalEq`, `DeepClone`,
11979 `Rand`, `Zero` and `ToStr` can all be automatically derived with
11980 `#[deriving(...)]`.
11981 * The `bytes!` macro returns a vector of bytes for string, u8, char,
11982 and unsuffixed integer literals.
11983
11984 * Libraries
11985 * The `core` crate was renamed to `std`.
11986 * The `std` crate was renamed to `extra`.
11987 * More and improved documentation.
11988 * std: `iterator` module for external iterator objects.
11989 * Many old-style (internal, higher-order function) iterators replaced by
11990 implementations of `Iterator`.
11991 * std: Many old internal vector and string iterators,
11992 incl. `any`, `all`. removed.
11993 * std: The `finalize` method of `Drop` renamed to `drop`.
11994 * std: The `drop` method now takes `&mut self` instead of `&self`.
11995 * std: The prelude no longer re-exports any modules, only types and traits.
11996 * std: Prelude additions: `print`, `println`, `FromStr`, `ApproxEq`, `Equiv`,
11997 `Iterator`, `IteratorUtil`, many numeric traits, many tuple traits.
11998 * std: New numeric traits: `Fractional`, `Real`, `RealExt`, `Integer`, `Ratio`,
11999 `Algebraic`, `Trigonometric`, `Exponential`, `Primitive`.
12000 * std: Tuple traits and accessors defined for up to 12-tuples, e.g.
12001 `(0, 1, 2).n2()` or `(0, 1, 2).n2_ref()`.
12002 * std: Many types implement `Clone`.
12003 * std: `path` type renamed to `Path`.
12004 * std: `mut` module and `Mut` type removed.
12005 * std: Many standalone functions removed in favor of methods and iterators
12006 in `vec`, `str`. In the future methods will also work as functions.
12007 * std: `reinterpret_cast` removed. Use `transmute`.
12008 * std: ascii string handling in `std::ascii`.
12009 * std: `Rand` is implemented for ~/@.
12010 * std: `run` module for spawning processes overhauled.
12011 * std: Various atomic types added to `unstable::atomic`.
12012 * std: Various types implement `Zero`.
12013 * std: `LinearMap` and `LinearSet` renamed to `HashMap` and `HashSet`.
12014 * std: Borrowed pointer functions moved from `ptr` to `borrow`.
12015 * std: Added `os::mkdir_recursive`.
12016 * std: Added `os::glob` function performs filesystems globs.
12017 * std: `FuzzyEq` renamed to `ApproxEq`.
12018 * std: `Map` now defines `pop` and `swap` methods.
12019 * std: `Cell` constructors converted to static methods.
12020 * extra: `rc` module adds the reference counted pointers, `Rc` and `RcMut`.
12021 * extra: `flate` module moved from `std` to `extra`.
12022 * extra: `fileinput` module for iterating over a series of files.
12023 * extra: `Complex` number type and `complex` module.
12024 * extra: `Rational` number type and `rational` module.
12025 * extra: `BigInt`, `BigUint` implement numeric and comparison traits.
12026 * extra: `term` uses terminfo now, is more correct.
12027 * extra: `arc` functions converted to methods.
12028 * extra: Implementation of fixed output size variations of SHA-2.
12029
12030 * Tooling
12031 * `unused_variables` lint mode for unused variables (default: warn).
12032 * `unused_unsafe` lint mode for detecting unnecessary `unsafe` blocks
12033 (default: warn).
12034 * `unused_mut` lint mode for identifying unused `mut` qualifiers
12035 (default: warn).
12036 * `dead_assignment` lint mode for unread variables (default: warn).
12037 * `unnecessary_allocation` lint mode detects some heap allocations that are
12038 immediately borrowed so could be written without allocating (default: warn).
12039 * `missing_doc` lint mode (default: allow).
12040 * `unreachable_code` lint mode (default: warn).
12041 * The `rusti` command has been rewritten and a number of bugs addressed.
12042 * rustc outputs in color on more terminals.
12043 * rustc accepts a `--link-args` flag to pass arguments to the linker.
12044 * rustc accepts a `-Z print-link-args` flag for debugging linkage.
12045 * Compiling with `-g` will make the binary record information about
12046 dynamic borrowcheck failures for debugging.
12047 * rustdoc has a nicer stylesheet.
12048 * Various improvements to rustdoc.
12049 * Improvements to rustpkg (see the detailed release notes).
12050
12051
12052 Version 0.6 (2013-04-03)
12053 ========================
12054
12055 * ~2100 changes, numerous bugfixes
12056
12057 * Syntax changes
12058 * The self type parameter in traits is now spelled `Self`
12059 * The `self` parameter in trait and impl methods must now be explicitly
12060 named (for example: `fn f(&self) { }`). Implicit self is deprecated.
12061 * Static methods no longer require the `static` keyword and instead
12062 are distinguished by the lack of a `self` parameter
12063 * Replaced the `Durable` trait with the `'static` lifetime
12064 * The old closure type syntax with the trailing sigil has been
12065 removed in favor of the more consistent leading sigil
12066 * `super` is a keyword, and may be prefixed to paths
12067 * Trait bounds are separated with `+` instead of whitespace
12068 * Traits are implemented with `impl Trait for Type`
12069 instead of `impl Type: Trait`
12070 * Lifetime syntax is now `&'l foo` instead of `&l/foo`
12071 * The `export` keyword has finally been removed
12072 * The `move` keyword has been removed (see "Semantic changes")
12073 * The interior mutability qualifier on vectors, `[mut T]`, has been
12074 removed. Use `&mut [T]`, etc.
12075 * `mut` is no longer valid in `~mut T`. Use inherited mutability
12076 * `fail` is no longer a keyword. Use `fail!()`
12077 * `assert` is no longer a keyword. Use `assert!()`
12078 * `log` is no longer a keyword. use `debug!`, etc.
12079 * 1-tuples may be represented as `(T,)`
12080 * Struct fields may no longer be `mut`. Use inherited mutability,
12081 `@mut T`, `core::mut` or `core::cell`
12082 * `extern mod { ... }` is no longer valid syntax for foreign
12083 function modules. Use extern blocks: `extern { ... }`
12084 * Newtype enums removed. Use tuple-structs.
12085 * Trait implementations no longer support visibility modifiers
12086 * Pattern matching over vectors improved and expanded
12087 * `const` renamed to `static` to correspond to lifetime name,
12088 and make room for future `static mut` unsafe mutable globals.
12089 * Replaced `#[deriving_eq]` with `#[deriving(Eq)]`, etc.
12090 * `Clone` implementations can be automatically generated with
12091 `#[deriving(Clone)]`
12092 * Casts to traits must use a pointer sigil, e.g. `@foo as @Bar`
12093 instead of `foo as Bar`.
12094 * Fixed length vector types are now written as `[int, .. 3]`
12095 instead of `[int * 3]`.
12096 * Fixed length vector types can express the length as a constant
12097 expression. (ex: `[int, .. GL_BUFFER_SIZE - 2]`)
12098
12099 * Semantic changes
12100 * Types with owned pointers or custom destructors move by default,
12101 eliminating the `move` keyword
12102 * All foreign functions are considered unsafe
12103 * &mut is now unaliasable
12104 * Writes to borrowed @mut pointers are prevented dynamically
12105 * () has size 0
12106 * The name of the main function can be customized using #[main]
12107 * The default type of an inferred closure is &fn instead of @fn
12108 * `use` statements may no longer be "chained" - they cannot import
12109 identifiers imported by previous `use` statements
12110 * `use` statements are crate relative, importing from the "top"
12111 of the crate by default. Paths may be prefixed with `super::`
12112 or `self::` to change the search behavior.
12113 * Method visibility is inherited from the implementation declaration
12114 * Structural records have been removed
12115 * Many more types can be used in static items, including enums
12116 'static-lifetime pointers and vectors
12117 * Pattern matching over vectors improved and expanded
12118 * Typechecking of closure types has been overhauled to
12119 improve inference and eliminate unsoundness
12120 * Macros leave scope at the end of modules, unless that module is
12121 tagged with #[macro_escape]
12122
12123 * Libraries
12124 * Added big integers to `std::bigint`
12125 * Removed `core::oldcomm` module
12126 * Added pipe-based `core::comm` module
12127 * Numeric traits have been reorganized under `core::num`
12128 * `vec::slice` finally returns a slice
12129 * `debug!` and friends don't require a format string, e.g. `debug!(Foo)`
12130 * Containers reorganized around traits in `core::container`
12131 * `core::dvec` removed, `~[T]` is a drop-in replacement
12132 * `core::send_map` renamed to `core::hashmap`
12133 * `std::map` removed; replaced with `core::hashmap`
12134 * `std::treemap` reimplemented as an owned balanced tree
12135 * `std::deque` and `std::smallintmap` reimplemented as owned containers
12136 * `core::trie` added as a fast ordered map for integer keys
12137 * Set types added to `core::hashmap`, `core::trie` and `std::treemap`
12138 * `Ord` split into `Ord` and `TotalOrd`. `Ord` is still used to
12139 overload the comparison operators, whereas `TotalOrd` is used
12140 by certain container types
12141
12142 * Other
12143 * Replaced the 'cargo' package manager with 'rustpkg'
12144 * Added all-purpose 'rust' tool
12145 * `rustc --test` now supports benchmarks with the `#[bench]` attribute
12146 * rustc now *attempts* to offer spelling suggestions
12147 * Improved support for ARM and Android
12148 * Preliminary MIPS backend
12149 * Improved foreign function ABI implementation for x86, x86_64
12150 * Various memory usage improvements
12151 * Rust code may be embedded in foreign code under limited circumstances
12152 * Inline assembler supported by new asm!() syntax extension.
12153
12154
12155 Version 0.5 (2012-12-21)
12156 ===========================
12157
12158 * ~900 changes, numerous bugfixes
12159
12160 * Syntax changes
12161 * Removed `<-` move operator
12162 * Completed the transition from the `#fmt` extension syntax to `fmt!`
12163 * Removed old fixed length vector syntax - `[T]/N`
12164 * New token-based quasi-quoters, `quote_tokens!`, `quote_expr!`, etc.
12165 * Macros may now expand to items and statements
12166 * `a.b()` is always parsed as a method call, never as a field projection
12167 * `Eq` and `IterBytes` implementations can be automatically generated
12168 with `#[deriving_eq]` and `#[deriving_iter_bytes]` respectively
12169 * Removed the special crate language for `.rc` files
12170 * Function arguments may consist of any irrefutable pattern
12171
12172 * Semantic changes
12173 * `&` and `~` pointers may point to objects
12174 * Tuple structs - `struct Foo(Bar, Baz)`. Will replace newtype enums.
12175 * Enum variants may be structs
12176 * Destructors can be added to all nominal types with the Drop trait
12177 * Structs and nullary enum variants may be constants
12178 * Values that cannot be implicitly copied are now automatically moved
12179 without writing `move` explicitly
12180 * `&T` may now be coerced to `*T`
12181 * Coercions happen in `let` statements as well as function calls
12182 * `use` statements now take crate-relative paths
12183 * The module and type namespaces have been merged so that static
12184 method names can be resolved under the trait in which they are
12185 declared
12186
12187 * Improved support for language features
12188 * Trait inheritance works in many scenarios
12189 * More support for explicit self arguments in methods - `self`, `&self`
12190 `@self`, and `~self` all generally work as expected
12191 * Static methods work in more situations
12192 * Experimental: Traits may declare default methods for the implementations
12193 to use
12194
12195 * Libraries
12196 * New condition handling system in `core::condition`
12197 * Timsort added to `std::sort`
12198 * New priority queue, `std::priority_queue`
12199 * Pipes for serializable types, `std::flatpipes'
12200 * Serialization overhauled to be trait-based
12201 * Expanded `getopts` definitions
12202 * Moved futures to `std`
12203 * More functions are pure now
12204 * `core::comm` renamed to `oldcomm`. Still deprecated
12205 * `rustdoc` and `cargo` are libraries now
12206
12207 * Misc
12208 * Added a preliminary REPL, `rusti`
12209 * License changed from MIT to dual MIT/APL2
12210
12211
12212 Version 0.4 (2012-10-15)
12213 ==========================
12214
12215 * ~2000 changes, numerous bugfixes
12216
12217 * Syntax
12218 * All keywords are now strict and may not be used as identifiers anywhere
12219 * Keyword removal: 'again', 'import', 'check', 'new', 'owned', 'send',
12220 'of', 'with', 'to', 'class'.
12221 * Classes are replaced with simpler structs
12222 * Explicit method self types
12223 * `ret` became `return` and `alt` became `match`
12224 * `import` is now `use`; `use is now `extern mod`
12225 * `extern mod { ... }` is now `extern { ... }`
12226 * `use mod` is the recommended way to import modules
12227 * `pub` and `priv` replace deprecated export lists
12228 * The syntax of `match` pattern arms now uses fat arrow (=>)
12229 * `main` no longer accepts an args vector; use `os::args` instead
12230
12231 * Semantics
12232 * Trait implementations are now coherent, ala Haskell typeclasses
12233 * Trait methods may be static
12234 * Argument modes are deprecated
12235 * Borrowed pointers are much more mature and recommended for use
12236 * Strings and vectors in the static region are stored in constant memory
12237 * Typestate was removed
12238 * Resolution rewritten to be more reliable
12239 * Support for 'dual-mode' data structures (freezing and thawing)
12240
12241 * Libraries
12242 * Most binary operators can now be overloaded via the traits in
12243 `core::ops'
12244 * `std::net::url` for representing URLs
12245 * Sendable hash maps in `core::send_map`
12246 * `core::task' gained a (currently unsafe) task-local storage API
12247
12248 * Concurrency
12249 * An efficient new intertask communication primitive called the pipe,
12250 along with a number of higher-level channel types, in `core::pipes`
12251 * `std::arc`, an atomically reference counted, immutable, shared memory
12252 type
12253 * `std::sync`, various exotic synchronization tools based on arcs and pipes
12254 * Futures are now based on pipes and sendable
12255 * More robust linked task failure
12256 * Improved task builder API
12257
12258 * Other
12259 * Improved error reporting
12260 * Preliminary JIT support
12261 * Preliminary work on precise GC
12262 * Extensive architectural improvements to rustc
12263 * Begun a transition away from buggy C++-based reflection (shape) code to
12264 Rust-based (visitor) code
12265 * All hash functions and tables converted to secure, randomized SipHash
12266
12267
12268 Version 0.3 (2012-07-12)
12269 ========================
12270
12271 * ~1900 changes, numerous bugfixes
12272
12273 * New coding conveniences
12274 * Integer-literal suffix inference
12275 * Per-item control over warnings, errors
12276 * #[cfg(windows)] and #[cfg(unix)] attributes
12277 * Documentation comments
12278 * More compact closure syntax
12279 * 'do' expressions for treating higher-order functions as
12280 control structures
12281 * *-patterns (wildcard extended to all constructor fields)
12282
12283 * Semantic cleanup
12284 * Name resolution pass and exhaustiveness checker rewritten
12285 * Region pointers and borrow checking supersede alias
12286 analysis
12287 * Init-ness checking is now provided by a region-based liveness
12288 pass instead of the typestate pass; same for last-use analysis
12289 * Extensive work on region pointers
12290
12291 * Experimental new language features
12292 * Slices and fixed-size, interior-allocated vectors
12293 * #!-comments for lang versioning, shell execution
12294 * Destructors and iface implementation for classes;
12295 type-parameterized classes and class methods
12296 * 'const' type kind for types that can be used to implement
12297 shared-memory concurrency patterns
12298
12299 * Type reflection
12300
12301 * Removal of various obsolete features
12302 * Keywords: 'be', 'prove', 'syntax', 'note', 'mutable', 'bind',
12303 'crust', 'native' (now 'extern'), 'cont' (now 'again')
12304
12305 * Constructs: do-while loops ('do' repurposed), fn binding,
12306 resources (replaced by destructors)
12307
12308 * Compiler reorganization
12309 * Syntax-layer of compiler split into separate crate
12310 * Clang (from LLVM project) integrated into build
12311 * Typechecker split into sub-modules
12312
12313 * New library code
12314 * New time functions
12315 * Extension methods for many built-in types
12316 * Arc: atomic-refcount read-only / exclusive-use shared cells
12317 * Par: parallel map and search routines
12318 * Extensive work on libuv interface
12319 * Much vector code moved to libraries
12320 * Syntax extensions: #line, #col, #file, #mod, #stringify,
12321 #include, #include_str, #include_bin
12322
12323 * Tool improvements
12324 * Cargo automatically resolves dependencies
12325
12326
12327 Version 0.2 (2012-03-29)
12328 =========================
12329
12330 * >1500 changes, numerous bugfixes
12331
12332 * New docs and doc tooling
12333
12334 * New port: FreeBSD x86_64
12335
12336 * Compilation model enhancements
12337 * Generics now specialized, multiply instantiated
12338 * Functions now inlined across separate crates
12339
12340 * Scheduling, stack and threading fixes
12341 * Noticeably improved message-passing performance
12342 * Explicit schedulers
12343 * Callbacks from C
12344 * Helgrind clean
12345
12346 * Experimental new language features
12347 * Operator overloading
12348 * Region pointers
12349 * Classes
12350
12351 * Various language extensions
12352 * C-callback function types: 'crust fn ...'
12353 * Infinite-loop construct: 'loop { ... }'
12354 * Shorten 'mutable' to 'mut'
12355 * Required mutable-local qualifier: 'let mut ...'
12356 * Basic glob-exporting: 'export foo::*;'
12357 * Alt now exhaustive, 'alt check' for runtime-checked
12358 * Block-function form of 'for' loop, with 'break' and 'ret'.
12359
12360 * New library code
12361 * AST quasi-quote syntax extension
12362 * Revived libuv interface
12363 * New modules: core::{future, iter}, std::arena
12364 * Merged per-platform std::{os*, fs*} to core::{libc, os}
12365 * Extensive cleanup, regularization in libstd, libcore
12366
12367
12368 Version 0.1 (2012-01-20)
12369 ===============================
12370
12371 * Most language features work, including:
12372 * Unique pointers, unique closures, move semantics
12373 * Interface-constrained generics
12374 * Static interface dispatch
12375 * Stack growth
12376 * Multithread task scheduling
12377 * Typestate predicates
12378 * Failure unwinding, destructors
12379 * Pattern matching and destructuring assignment
12380 * Lightweight block-lambda syntax
12381 * Preliminary macro-by-example
12382
12383 * Compiler works with the following configurations:
12384 * Linux: x86 and x86_64 hosts and targets
12385 * macOS: x86 and x86_64 hosts and targets
12386 * Windows: x86 hosts and targets
12387
12388 * Cross compilation / multi-target configuration supported.
12389
12390 * Preliminary API-documentation and package-management tools included.
12391
12392 Known issues:
12393
12394 * Documentation is incomplete.
12395
12396 * Performance is below intended target.
12397
12398 * Standard library APIs are subject to extensive change, reorganization.
12399
12400 * Language-level versioning is not yet operational - future code will
12401 break unexpectedly.