|
| 1 | +Version 1.15.0 (2017-02-02) |
| 2 | +=========================== |
| 3 | + |
| 4 | +Language |
| 5 | +-------- |
| 6 | + |
| 7 | +* Basic procedural macros allowing custom `#[derive]`, aka "macros 1.1", are |
| 8 | + stable. This allows popular code-generating crates like Serde and Diesel to |
| 9 | + work ergonomically. [RFC 1681]. |
| 10 | +* [Tuple structs may be empty. Unary and empty tuple structs may be instantiated |
| 11 | + with curly braces][36868]. Part of [RFC 1506]. |
| 12 | +* [A number of minor changes to name resolution have been activated][37127]. |
| 13 | + They add up to more consistent semantics, allowing for future evolution of |
| 14 | + Rust macros. Specified in [RFC 1560], see its section on ["changes"] for |
| 15 | + details of what is different. The breaking changes here have been transitioned |
| 16 | + through the [`legacy_imports`] lint since 1.14, with no known regressions. |
| 17 | +* [In `macro_rules`, `path` fragments can now be parsed as type parameter |
| 18 | + bounds][38279] |
| 19 | +* [`?Sized` can be used in `where` clauses][37791] |
| 20 | +* [There is now a limit on the size of monomorphized types and it can be |
| 21 | + modified with the `#![type_size_limit]` crate attribute, similarly to |
| 22 | + the `#![recursion_limit]` attribute][37789] |
| 23 | + |
| 24 | +Compiler |
| 25 | +-------- |
| 26 | + |
| 27 | +* [On Windows, the compiler will apply dllimport attributes when linking to |
| 28 | + extern functions][37973]. Additional attributes and flags can control which |
| 29 | + library kind is linked and its name. [RFC 1717]. |
| 30 | +* [Rust-ABI symbols are no longer exported from cdylibs][38117] |
| 31 | +* [The `--test` flag works with procedural macro crates][38107] |
| 32 | +* [Fix `extern "aapcs" fn` ABI][37814] |
| 33 | +* [The `-C no-stack-check` flag is deprecated][37636]. It does nothing. |
| 34 | +* [The `format!` expander recognizes incorrect `printf` and shell-style |
| 35 | + formatting directives and suggests the correct format][37613]. |
| 36 | +* [Only report one error for all unused imports in an import list][37456] |
| 37 | + |
| 38 | +Compiler Performance |
| 39 | +-------------------- |
| 40 | + |
| 41 | +* [Avoid unnecessary `mk_ty` calls in `Ty::super_fold_with`][37705] |
| 42 | +* [Avoid more unnecessary `mk_ty` calls in `Ty::super_fold_with`][37979] |
| 43 | +* [Don't clone in `UnificationTable::probe`][37848] |
| 44 | +* [Remove `scope_auxiliary` to cut RSS by 10%][37764] |
| 45 | +* [Use small vectors in type walker][37760] |
| 46 | +* [Macro expansion performance was improved][37701] |
| 47 | +* [Change `HirVec<P<T>>` to `HirVec<T>` in `hir::Expr`][37642] |
| 48 | +* [Replace FNV with a faster hash function][37229] |
| 49 | + |
| 50 | +Stabilized APIs |
| 51 | +--------------- |
| 52 | + |
| 53 | +* [`std::iter::Iterator::min_by`] |
| 54 | +* [`std::iter::Iterator::max_by`] |
| 55 | +* [`std::os::*::fs::FileExt`] |
| 56 | +* [`std::sync::atomic::Atomic*::get_mut`] |
| 57 | +* [`std::sync::atomic::Atomic*::into_inner`] |
| 58 | +* [`std::vec::IntoIter::as_slice`] |
| 59 | +* [`std::vec::IntoIter::as_mut_slice`] |
| 60 | +* [`std::sync::mpsc::Receiver::try_iter`] |
| 61 | +* [`std::os::unix::process::CommandExt::before_exec`] |
| 62 | +* [`std::rc::Rc::strong_count`] |
| 63 | +* [`std::rc::Rc::weak_count`] |
| 64 | +* [`std::sync::Arc::strong_count`] |
| 65 | +* [`std::sync::Arc::weak_count`] |
| 66 | +* [`std::char::encode_utf8`] |
| 67 | +* [`std::char::encode_utf16`] |
| 68 | +* [`std::cell::Ref::clone`] |
| 69 | +* [`std::io::Take::into_inner`] |
| 70 | + |
| 71 | +Libraries |
| 72 | +--------- |
| 73 | + |
| 74 | +* [The standard sorting algorithm has been rewritten for dramatic performance |
| 75 | + improvements][38192]. It is a hybrid merge sort, drawing influences from |
| 76 | + Timsort. Previously it was a naive merge sort. |
| 77 | +* [`Iterator::nth` no longer has a `Sized` bound][38134] |
| 78 | +* [`Extend<&T>` is specialized for `Vec` where `T: Copy`][38182] to improve |
| 79 | + performance. |
| 80 | +* [`chars().count()` is much faster][37888] and so are [`chars().last()` |
| 81 | + and `char_indices().last()`][37882] |
| 82 | +* [Fix ARM Objective-C ABI in `std::env::args`][38146] |
| 83 | +* [Chinese characters display correctly in `fmt::Debug`][37855] |
| 84 | +* [Derive `Default` for `Duration`][37699] |
| 85 | +* [Support creation of anonymous pipes on WinXP/2k][37677] |
| 86 | +* [`mpsc::RecvTimeoutError` implements `Error`][37527] |
| 87 | +* [Don't pass overlapped handles to processes][38835] |
| 88 | + |
| 89 | +Cargo |
| 90 | +----- |
| 91 | + |
| 92 | +* [In this release, Cargo build scripts no longer have access to the `OUT_DIR` |
| 93 | + environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They |
| 94 | + should instead check the variable at runtime with `std::env`. That the value |
| 95 | + was set at build time was a bug, and incorrect when cross-compiling. This |
| 96 | + change is known to cause breakage. |
| 97 | +* [Add `--all` flag to `cargo test`][cargo/3221] |
| 98 | +* [Compile statically against the MSVC CRT][cargo/3363] |
| 99 | +* [Mix feature flags into fingerprint/metadata shorthash][cargo/3102] |
| 100 | +* [Link OpenSSL statically on OSX][cargo/3311] |
| 101 | +* [Apply new fingerprinting to build dir outputs][cargo/3310] |
| 102 | +* [Test for bad path overrides with summaries][cargo/3336] |
| 103 | +* [Require `cargo install --vers` to take a semver version][cargo/3338] |
| 104 | +* [Fix retrying crate downloads for network errors][cargo/3348] |
| 105 | +* [Implement string lookup for `build.rustflags` config key][cargo/3356] |
| 106 | +* [Emit more info on --message-format=json][cargo/3319] |
| 107 | +* [Assume `build.rs` in the same directory as `Cargo.toml` is a build script][cargo/3361] |
| 108 | +* [Don't ignore errors in workspace manifest][cargo/3409] |
| 109 | +* [Fix `--message-format JSON` when rustc emits non-JSON warnings][cargo/3410] |
| 110 | + |
| 111 | +Tooling |
| 112 | +------- |
| 113 | + |
| 114 | +* [Test runners (binaries built with `--test`) now support a `--list` argument |
| 115 | + that lists the tests it contains][38185] |
| 116 | +* [Test runners now support a `--exact` argument that makes the test filter |
| 117 | + match exactly, instead of matching only a substring of the test name][38181] |
| 118 | +* [rustdoc supports a `--playground-url` flag][37763] |
| 119 | +* [rustdoc provides more details about `#[should_panic]` errors][37749] |
| 120 | + |
| 121 | +Misc |
| 122 | +---- |
| 123 | + |
| 124 | +* [The Rust build system is now written in Rust][37817]. The Makefiles may |
| 125 | + continue to be used in this release by passing `--disable-rustbuild` to the |
| 126 | + configure script, but they will be deleted soon. Note that the new build |
| 127 | + system uses a different on-disk layout that will likely affect any scripts |
| 128 | + building Rust. |
| 129 | +* [Rust supports i686-unknown-openbsd][38086]. Tier 3 support. No testing or |
| 130 | + releases. |
| 131 | +* [Rust supports the MSP430][37627]. Tier 3 support. No testing or releases. |
| 132 | +* [Rust supports the ARMv5TE architecture][37615]. Tier 3 support. No testing or |
| 133 | + releases. |
| 134 | + |
| 135 | +Compatibility Notes |
| 136 | +------------------- |
| 137 | + |
| 138 | +* [A number of minor changes to name resolution have been activated][37127]. |
| 139 | + They add up to more consistent semantics, allowing for future evolution of |
| 140 | + Rust macros. Specified in [RFC 1560], see its section on ["changes"] for |
| 141 | + details of what is different. The breaking changes here have been transitioned |
| 142 | + through the [`legacy_imports`] lint since 1.14, with no known regressions. |
| 143 | +* [In this release, Cargo build scripts no longer have access to the `OUT_DIR` |
| 144 | + environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They |
| 145 | + should instead check the variable at runtime with `std::env`. That the value |
| 146 | + was set at build time was a bug, and incorrect when cross-compiling. This |
| 147 | + change is known to cause breakage. |
| 148 | +* [Higher-ranked lifetimes are no longer allowed to appear _only_ in associated |
| 149 | + types][33685]. The [`hr_lifetime_in_assoc_type` lint] has been a warning since |
| 150 | + 1.10 and is now an error by default. It will become a hard error in the near |
| 151 | + future. |
| 152 | +* [The semantics relating modules to file system directories are changing in |
| 153 | + minor ways][37602]. This is captured in the new `legacy_directory_ownership` |
| 154 | + lint, which is a warning in this release, and will become a hard error in the |
| 155 | + future. |
| 156 | +* [Rust-ABI symbols are no longer exported from cdylibs][38117] |
| 157 | +* [Once `Peekable` peeks a `None` it will return that `None` without re-querying |
| 158 | + the underlying iterator][37834] |
| 159 | + |
| 160 | +["changes"]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md#changes-to-name-resolution-rules |
| 161 | +[33685]: https://github.com/rust-lang/rust/issues/33685 |
| 162 | +[36868]: https://github.com/rust-lang/rust/pull/36868 |
| 163 | +[37127]: https://github.com/rust-lang/rust/pull/37127 |
| 164 | +[37229]: https://github.com/rust-lang/rust/pull/37229 |
| 165 | +[37456]: https://github.com/rust-lang/rust/pull/37456 |
| 166 | +[37527]: https://github.com/rust-lang/rust/pull/37527 |
| 167 | +[37602]: https://github.com/rust-lang/rust/pull/37602 |
| 168 | +[37613]: https://github.com/rust-lang/rust/pull/37613 |
| 169 | +[37615]: https://github.com/rust-lang/rust/pull/37615 |
| 170 | +[37636]: https://github.com/rust-lang/rust/pull/37636 |
| 171 | +[37642]: https://github.com/rust-lang/rust/pull/37642 |
| 172 | +[37677]: https://github.com/rust-lang/rust/pull/37677 |
| 173 | +[37699]: https://github.com/rust-lang/rust/pull/37699 |
| 174 | +[37701]: https://github.com/rust-lang/rust/pull/37701 |
| 175 | +[37705]: https://github.com/rust-lang/rust/pull/37705 |
| 176 | +[37749]: https://github.com/rust-lang/rust/pull/37749 |
| 177 | +[37760]: https://github.com/rust-lang/rust/pull/37760 |
| 178 | +[37763]: https://github.com/rust-lang/rust/pull/37763 |
| 179 | +[37764]: https://github.com/rust-lang/rust/pull/37764 |
| 180 | +[37789]: https://github.com/rust-lang/rust/pull/37789 |
| 181 | +[37791]: https://github.com/rust-lang/rust/pull/37791 |
| 182 | +[37814]: https://github.com/rust-lang/rust/pull/37814 |
| 183 | +[37817]: https://github.com/rust-lang/rust/pull/37817 |
| 184 | +[37834]: https://github.com/rust-lang/rust/pull/37834 |
| 185 | +[37848]: https://github.com/rust-lang/rust/pull/37848 |
| 186 | +[37855]: https://github.com/rust-lang/rust/pull/37855 |
| 187 | +[37882]: https://github.com/rust-lang/rust/pull/37882 |
| 188 | +[37888]: https://github.com/rust-lang/rust/pull/37888 |
| 189 | +[37973]: https://github.com/rust-lang/rust/pull/37973 |
| 190 | +[37979]: https://github.com/rust-lang/rust/pull/37979 |
| 191 | +[38086]: https://github.com/rust-lang/rust/pull/38086 |
| 192 | +[38107]: https://github.com/rust-lang/rust/pull/38107 |
| 193 | +[38117]: https://github.com/rust-lang/rust/pull/38117 |
| 194 | +[38134]: https://github.com/rust-lang/rust/pull/38134 |
| 195 | +[38146]: https://github.com/rust-lang/rust/pull/38146 |
| 196 | +[38181]: https://github.com/rust-lang/rust/pull/38181 |
| 197 | +[38182]: https://github.com/rust-lang/rust/pull/38182 |
| 198 | +[38185]: https://github.com/rust-lang/rust/pull/38185 |
| 199 | +[38192]: https://github.com/rust-lang/rust/pull/38192 |
| 200 | +[38279]: https://github.com/rust-lang/rust/pull/38279 |
| 201 | +[38835]: https://github.com/rust-lang/rust/pull/38835 |
| 202 | +[RFC 1492]: https://github.com/rust-lang/rfcs/blob/master/text/1492-dotdot-in-patterns.md |
| 203 | +[RFC 1506]: https://github.com/rust-lang/rfcs/blob/master/text/1506-adt-kinds.md |
| 204 | +[RFC 1560]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md |
| 205 | +[RFC 1681]: https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md |
| 206 | +[RFC 1717]: https://github.com/rust-lang/rfcs/blob/master/text/1717-dllimport.md |
| 207 | +[`hr_lifetime_in_assoc_type` lint]: https://github.com/rust-lang/rust/issues/33685 |
| 208 | +[`legacy_imports`]: https://github.com/rust-lang/rust/pull/38271 |
| 209 | +[cargo/3102]: https://github.com/rust-lang/cargo/pull/3102 |
| 210 | +[cargo/3221]: https://github.com/rust-lang/cargo/pull/3221 |
| 211 | +[cargo/3310]: https://github.com/rust-lang/cargo/pull/3310 |
| 212 | +[cargo/3311]: https://github.com/rust-lang/cargo/pull/3311 |
| 213 | +[cargo/3319]: https://github.com/rust-lang/cargo/pull/3319 |
| 214 | +[cargo/3336]: https://github.com/rust-lang/cargo/pull/3336 |
| 215 | +[cargo/3338]: https://github.com/rust-lang/cargo/pull/3338 |
| 216 | +[cargo/3348]: https://github.com/rust-lang/cargo/pull/3348 |
| 217 | +[cargo/3356]: https://github.com/rust-lang/cargo/pull/3356 |
| 218 | +[cargo/3361]: https://github.com/rust-lang/cargo/pull/3361 |
| 219 | +[cargo/3363]: https://github.com/rust-lang/cargo/pull/3363 |
| 220 | +[cargo/3368]: https://github.com/rust-lang/cargo/issues/3368 |
| 221 | +[cargo/3409]: https://github.com/rust-lang/cargo/pull/3409 |
| 222 | +[cargo/3410]: https://github.com/rust-lang/cargo/pull/3410 |
| 223 | +[`std::iter::Iterator::min_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.min_by |
| 224 | +[`std::iter::Iterator::max_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.max_by |
| 225 | +[`std::os::*::fs::FileExt`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html |
| 226 | +[`std::sync::atomic::Atomic*::get_mut`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.get_mut |
| 227 | +[`std::sync::atomic::Atomic*::into_inner`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.into_inner |
| 228 | +[`std::vec::IntoIter::as_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_slice |
| 229 | +[`std::vec::IntoIter::as_mut_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_mut_slice |
| 230 | +[`std::sync::mpsc::Receiver::try_iter`]: https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver.html#method.try_iter |
| 231 | +[`std::os::unix::process::CommandExt::before_exec`]: https://doc.rust-lang.org/std/os/unix/process/trait.CommandExt.html#tymethod.before_exec |
| 232 | +[`std::rc::Rc::strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.strong_count |
| 233 | +[`std::rc::Rc::weak_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.weak_count |
| 234 | +[`std::sync::Arc::strong_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.strong_count |
| 235 | +[`std::sync::Arc::weak_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.weak_count |
| 236 | +[`std::char::encode_utf8`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf8 |
| 237 | +[`std::char::encode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf16 |
| 238 | +[`std::cell::Ref::clone`]: https://doc.rust-lang.org/std/cell/struct.Ref.html#method.clone |
| 239 | +[`std::io::Take::into_inner`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.into_inner |
| 240 | + |
| 241 | + |
1 | 242 | Version 1.14.0 (2016-12-22)
|
2 | 243 | ===========================
|
3 | 244 |
|
|
0 commit comments