/RELEASES.md
Markdown | 5076 lines | 4654 code | 422 blank | 0 comment | 0 complexity | 8e10bc4b852562d05a5c5673b4fa9304 MD5 | raw file
Possible License(s): AGPL-1.0, BSD-2-Clause, 0BSD, Apache-2.0, MIT, LGPL-2.0
Large files files are truncated, but you can click here to view the full file
- Version 1.17.0 (2017-04-27)
- ===========================
- Language
- --------
- * [The lifetime of statics and consts defaults to `'static`][39265]. [RFC 1623]
- * [Fields of structs may be initialized without duplicating the field/variable
- names][39761]. [RFC 1682]
- * [`Self` may be included in the `where` clause of `impls`][38864]. [RFC 1647]
- * [When coercing to an unsized type lifetimes must be equal][40319]. That is,
- there is no subtyping between `T` and `U` when `T: Unsize<U>`. For example,
- coercing `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to
- `'b`. Soundness fix.
- * [Values passed to the indexing operator, `[]`, automatically coerce][40166]
- * [Static variables may contain references to other statics][40027]
- Compiler
- --------
- * [Exit quickly on only `--emit dep-info`][40336]
- * [Make `-C relocation-model` more correctly determine whether the linker
- creates a position-independent executable][40245]
- * [Add `-C overflow-checks` to directly control whether integer overflow
- panics][40037]
- * [The rustc type checker now checks items on demand instead of in a single
- in-order pass][40008]. This is mostly an internal refactoring in support of
- future work, including incremental type checking, but also resolves [RFC
- 1647], allowing `Self` to appear in `impl` `where` clauses.
- * [Optimize vtable loads][39995]
- * [Turn off vectorization for Emscripten targets][39990]
- * [Provide suggestions for unknown macros imported with `use`][39953]
- * [Fix ICEs in path resolution][39939]
- * [Strip exception handling code on Emscripten when `panic=abort`][39193]
- * [Add clearer error message using `&str + &str`][39116]
- Stabilized APIs
- ---------------
- * [`Arc::into_raw`]
- * [`Arc::from_raw`]
- * [`Arc::ptr_eq`]
- * [`Rc::into_raw`]
- * [`Rc::from_raw`]
- * [`Rc::ptr_eq`]
- * [`Ordering::then`]
- * [`Ordering::then_with`]
- * [`BTreeMap::range`]
- * [`BTreeMap::range_mut`]
- * [`collections::Bound`]
- * [`process::abort`]
- * [`ptr::read_unaligned`]
- * [`ptr::write_unaligned`]
- * [`Result::expect_err`]
- * [`Cell::swap`]
- * [`Cell::replace`]
- * [`Cell::into_inner`]
- * [`Cell::take`]
- Libraries
- ---------
- * [`BTreeMap` and `BTreeSet` can iterate over ranges][27787]
- * [`Cell` can store non-`Copy` types][39793]. [RFC 1651]
- * [`String` implements `FromIterator<&char>`][40028]
- * `Box` [implements][40009] a number of new conversions:
- `From<Box<str>> for String`,
- `From<Box<[T]>> for Vec<T>`,
- `From<Box<CStr>> for CString`,
- `From<Box<OsStr>> for OsString`,
- `From<Box<Path>> for PathBuf`,
- `Into<Box<str>> for String`,
- `Into<Box<[T]>> for Vec<T>`,
- `Into<Box<CStr>> for CString`,
- `Into<Box<OsStr>> for OsString`,
- `Into<Box<Path>> for PathBuf`,
- `Default for Box<str>`,
- `Default for Box<CStr>`,
- `Default for Box<OsStr>`,
- `From<&CStr> for Box<CStr>`,
- `From<&OsStr> for Box<OsStr>`,
- `From<&Path> for Box<Path>`
- * [`ffi::FromBytesWithNulError` implements `Error` and `Display`][39960]
- * [Specialize `PartialOrd<A> for [A] where A: Ord`][39642]
- * [Slightly optimize `slice::sort`][39538]
- * [Add `ToString` trait specialization for `Cow<'a, str>` and `String`][39440]
- * [`Box<[T]>` implements `From<&[T]> where T: Copy`,
- `Box<str>` implements `From<&str>`][39438]
- * [`IpAddr` implements `From` for various arrays. `SocketAddr` implements
- `From<(I, u16)> where I: Into<IpAddr>`][39372]
- * [`format!` estimates the needed capacity before writing a string][39356]
- * [Support unprivileged symlink creation in Windows][38921]
- * [`PathBuf` implements `Default`][38764]
- * [Implement `PartialEq<[A]>` for `VecDeque<A>`][38661]
- * [`HashMap` resizes adaptively][38368] to guard against DOS attacks
- and poor hash functions.
- Cargo
- -----
- * [Add `cargo check --all`][cargo/3731]
- * [Add an option to ignore SSL revocation checking][cargo/3699]
- * [Add `cargo run --package`][cargo/3691]
- * [Add `required_features`][cargo/3667]
- * [Assume `build.rs` is a build script][cargo/3664]
- * [Find workspace via `workspace_root` link in containing member][cargo/3562]
- Misc
- ----
- * [Documentation is rendered with mdbook instead of the obsolete, in-tree
- `rustbook`][39633]
- * [The "Unstable Book" documents nightly-only features][ubook]
- * [Improve the style of the sidebar in rustdoc output][40265]
- * [Configure build correctly on 64-bit CPU's with the armhf ABI][40261]
- * [Fix MSP430 breakage due to `i128`][40257]
- * [Preliminary Solaris/SPARCv9 support][39903]
- * [`rustc` is linked statically on Windows MSVC targets][39837], allowing it to
- run without installing the MSVC runtime.
- * [`rustdoc --test` includes file names in test names][39788]
- * This release includes builds of `std` for `sparc64-unknown-linux-gnu`,
- `aarch64-unknown-linux-fuchsia`, and `x86_64-unknown-linux-fuchsia`.
- * [Initial support for `aarch64-unknown-freebsd`][39491]
- * [Initial support for `i686-unknown-netbsd`][39426]
- * [This release no longer includes the old makefile build system][39431]. Rust
- is built with a custom build system, written in Rust, and with Cargo.
- * [Add Debug implementations for libcollection structs][39002]
- * [`TypeId` implements `PartialOrd` and `Ord`][38981]
- * [`--test-threads=0` produces an error][38945]
- * [`rustup` installs documentation by default][40526]
- * [The Rust source includes NatVis visualizations][39843]. These can be used by
- WinDbg and Visual Studio to improve the debugging experience.
- Compatibility Notes
- -------------------
- * [Rust 1.17 does not correctly detect the MSVC 2017 linker][38584]. As a
- workaround, either use MSVC 2015 or run vcvars.bat.
- * [When coercing to an unsized type lifetimes must be equal][40319]. That is,
- disallow subtyping between `T` and `U` when `T: Unsize<U>`, e.g. coercing
- `&mut [&'a X; N]` to `&mut [&'b X]` requires `'a` be equal to `'b`. Soundness
- fix.
- * [`format!` and `Display::to_string` panic if an underlying formatting
- implementation returns an error][40117]. Previously the error was silently
- ignored. It is incorrect for `write_fmt` to return an error when writing
- to a string.
- * [In-tree crates are verified to be unstable][39851]. Previously, some minor
- crates were marked stable and could be accessed from the stable toolchain.
- * [Rust git source no longer includes vendored crates][39728]. Those that need
- to build with vendored crates should build from release tarballs.
- * [Fix inert attributes from `proc_macro_derives`][39572]
- * [During crate resolution, rustc prefers a crate in the sysroot if two crates
- are otherwise identical][39518]. Unlikely to be encountered outside the Rust
- build system.
- * [Fixed bugs around how type inference interacts with dead-code][39485]. The
- existing code generally ignores the type of dead-code unless a type-hint is
- provided; this can cause surprising inference interactions particularly around
- defaulting. The new code uniformly ignores the result type of dead-code.
- * [Tuple-struct constructors with private fields are no longer visible][38932]
- * [Lifetime parameters that do not appear in the arguments are now considered
- early-bound][38897], resolving a soundness bug (#[32330]). The
- `hr_lifetime_in_assoc_type` future-compatibility lint has been in effect since
- April of 2016.
- * [rustdoc: fix doctests with non-feature crate attributes][38161]
- * [Make transmuting from fn item types to pointer-sized types a hard
- error][34198]
- [27787]: https://github.com/rust-lang/rust/issues/27787
- [32330]: https://github.com/rust-lang/rust/issues/32330
- [34198]: https://github.com/rust-lang/rust/pull/34198
- [38161]: https://github.com/rust-lang/rust/pull/38161
- [38368]: https://github.com/rust-lang/rust/pull/38368
- [38584]: https://github.com/rust-lang/rust/issues/38584
- [38661]: https://github.com/rust-lang/rust/pull/38661
- [38764]: https://github.com/rust-lang/rust/pull/38764
- [38864]: https://github.com/rust-lang/rust/issues/38864
- [38897]: https://github.com/rust-lang/rust/pull/38897
- [38921]: https://github.com/rust-lang/rust/pull/38921
- [38932]: https://github.com/rust-lang/rust/pull/38932
- [38945]: https://github.com/rust-lang/rust/pull/38945
- [38981]: https://github.com/rust-lang/rust/pull/38981
- [39002]: https://github.com/rust-lang/rust/pull/39002
- [39116]: https://github.com/rust-lang/rust/pull/39116
- [39193]: https://github.com/rust-lang/rust/pull/39193
- [39265]: https://github.com/rust-lang/rust/pull/39265
- [39356]: https://github.com/rust-lang/rust/pull/39356
- [39372]: https://github.com/rust-lang/rust/pull/39372
- [39426]: https://github.com/rust-lang/rust/pull/39426
- [39431]: https://github.com/rust-lang/rust/pull/39431
- [39438]: https://github.com/rust-lang/rust/pull/39438
- [39440]: https://github.com/rust-lang/rust/pull/39440
- [39485]: https://github.com/rust-lang/rust/pull/39485
- [39491]: https://github.com/rust-lang/rust/pull/39491
- [39518]: https://github.com/rust-lang/rust/pull/39518
- [39538]: https://github.com/rust-lang/rust/pull/39538
- [39572]: https://github.com/rust-lang/rust/pull/39572
- [39633]: https://github.com/rust-lang/rust/pull/39633
- [39642]: https://github.com/rust-lang/rust/pull/39642
- [39728]: https://github.com/rust-lang/rust/pull/39728
- [39761]: https://github.com/rust-lang/rust/pull/39761
- [39788]: https://github.com/rust-lang/rust/pull/39788
- [39793]: https://github.com/rust-lang/rust/pull/39793
- [39837]: https://github.com/rust-lang/rust/pull/39837
- [39843]: https://github.com/rust-lang/rust/pull/39843
- [39851]: https://github.com/rust-lang/rust/pull/39851
- [39903]: https://github.com/rust-lang/rust/pull/39903
- [39939]: https://github.com/rust-lang/rust/pull/39939
- [39953]: https://github.com/rust-lang/rust/pull/39953
- [39960]: https://github.com/rust-lang/rust/pull/39960
- [39990]: https://github.com/rust-lang/rust/pull/39990
- [39995]: https://github.com/rust-lang/rust/pull/39995
- [40008]: https://github.com/rust-lang/rust/pull/40008
- [40009]: https://github.com/rust-lang/rust/pull/40009
- [40027]: https://github.com/rust-lang/rust/pull/40027
- [40028]: https://github.com/rust-lang/rust/pull/40028
- [40037]: https://github.com/rust-lang/rust/pull/40037
- [40117]: https://github.com/rust-lang/rust/pull/40117
- [40166]: https://github.com/rust-lang/rust/pull/40166
- [40245]: https://github.com/rust-lang/rust/pull/40245
- [40257]: https://github.com/rust-lang/rust/pull/40257
- [40261]: https://github.com/rust-lang/rust/pull/40261
- [40265]: https://github.com/rust-lang/rust/pull/40265
- [40319]: https://github.com/rust-lang/rust/pull/40319
- [40336]: https://github.com/rust-lang/rust/pull/40336
- [40526]: https://github.com/rust-lang/rust/pull/40526
- [RFC 1623]: https://github.com/rust-lang/rfcs/blob/master/text/1623-static.md
- [RFC 1647]: https://github.com/rust-lang/rfcs/blob/master/text/1647-allow-self-in-where-clauses.md
- [RFC 1651]: https://github.com/rust-lang/rfcs/blob/master/text/1651-movecell.md
- [RFC 1682]: https://github.com/rust-lang/rfcs/blob/master/text/1682-field-init-shorthand.md
- [`Arc::from_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.from_raw
- [`Arc::into_raw`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.into_raw
- [`Arc::ptr_eq`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.ptr_eq
- [`BTreeMap::range_mut`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range_mut
- [`BTreeMap::range`]: https://doc.rust-lang.org/std/collections/btree_map/struct.BTreeMap.html#method.range
- [`Cell::into_inner`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.into_inner
- [`Cell::replace`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.replace
- [`Cell::swap`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.swap
- [`Cell::take`]: https://doc.rust-lang.org/std/cell/struct.Cell.html#method.take
- [`Ordering::then_with`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then_with
- [`Ordering::then`]: https://doc.rust-lang.org/std/cmp/enum.Ordering.html#method.then
- [`Rc::from_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.from_raw
- [`Rc::into_raw`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.into_raw
- [`Rc::ptr_eq`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.ptr_eq
- [`Result::expect_err`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.expect_err
- [`collections::Bound`]: https://doc.rust-lang.org/std/collections/enum.Bound.html
- [`process::abort`]: https://doc.rust-lang.org/std/process/fn.abort.html
- [`ptr::read_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.read_unaligned.html
- [`ptr::write_unaligned`]: https://doc.rust-lang.org/std/ptr/fn.write_unaligned.html
- [cargo/3562]: https://github.com/rust-lang/cargo/pull/3562
- [cargo/3664]: https://github.com/rust-lang/cargo/pull/3664
- [cargo/3667]: https://github.com/rust-lang/cargo/pull/3667
- [cargo/3691]: https://github.com/rust-lang/cargo/pull/3691
- [cargo/3699]: https://github.com/rust-lang/cargo/pull/3699
- [cargo/3731]: https://github.com/rust-lang/cargo/pull/3731
- [mdbook]: https://crates.io/crates/mdbook
- [ubook]: https://doc.rust-lang.org/unstable-book/
- Version 1.16.0 (2017-03-16)
- ===========================
- Language
- --------
- * [The compiler's `dead_code` lint now accounts for type aliases][38051].
- * [Uninhabitable enums (those without any variants) no longer permit wildcard
- match patterns][38069]
- * [Clean up semantics of `self` in an import list][38313]
- * [`Self` may appear in `impl` headers][38920]
- * [`Self` may appear in struct expressions][39282]
- Compiler
- --------
- * [`rustc` now supports `--emit=metadata`, which causes rustc to emit
- a `.rmeta` file containing only crate metadata][38571]. This can be
- used by tools like the Rust Language Service to perform
- metadata-only builds.
- * [Levenshtein based typo suggestions now work in most places, while
- previously they worked only for fields and sometimes for local
- variables][38927]. Together with the overhaul of "no
- resolution"/"unexpected resolution" errors (#[38154]) they result in
- large and systematic improvement in resolution diagnostics.
- * [Fix `transmute::<T, U>` where `T` requires a bigger alignment than
- `U`][38670]
- * [rustc: use -Xlinker when specifying an rpath with ',' in it][38798]
- * [`rustc` no longer attempts to provide "consider using an explicit
- lifetime" suggestions][37057]. They were inaccurate.
- Stabilized APIs
- ---------------
- * [`VecDeque::truncate`]
- * [`VecDeque::resize`]
- * [`String::insert_str`]
- * [`Duration::checked_add`]
- * [`Duration::checked_sub`]
- * [`Duration::checked_div`]
- * [`Duration::checked_mul`]
- * [`str::replacen`]
- * [`str::repeat`]
- * [`SocketAddr::is_ipv4`]
- * [`SocketAddr::is_ipv6`]
- * [`IpAddr::is_ipv4`]
- * [`IpAddr::is_ipv6`]
- * [`Vec::dedup_by`]
- * [`Vec::dedup_by_key`]
- * [`Result::unwrap_or_default`]
- * [`<*const T>::wrapping_offset`]
- * [`<*mut T>::wrapping_offset`]
- * `CommandExt::creation_flags`
- * [`File::set_permissions`]
- * [`String::split_off`]
- Libraries
- ---------
- * [`[T]::binary_search` and `[T]::binary_search_by_key` now take
- their argument by `Borrow` parameter][37761]
- * [All public types in std implement `Debug`][38006]
- * [`IpAddr` implements `From<Ipv4Addr>` and `From<Ipv6Addr>`][38327]
- * [`Ipv6Addr` implements `From<[u16; 8]>`][38131]
- * [Ctrl-Z returns from `Stdin.read()` when reading from the console on
- Windows][38274]
- * [std: Fix partial writes in `LineWriter`][38062]
- * [std: Clamp max read/write sizes on Unix][38062]
- * [Use more specific panic message for `&str` slicing errors][38066]
- * [`TcpListener::set_only_v6` is deprecated][38304]. This
- functionality cannot be achieved in std currently.
- * [`writeln!`, like `println!`, now accepts a form with no string
- or formatting arguments, to just print a newline][38469]
- * [Implement `iter::Sum` and `iter::Product` for `Result`][38580]
- * [Reduce the size of static data in `std_unicode::tables`][38781]
- * [`char::EscapeDebug`, `EscapeDefault`, `EscapeUnicode`,
- `CaseMappingIter`, `ToLowercase`, `ToUppercase`, implement
- `Display`][38909]
- * [`Duration` implements `Sum`][38712]
- * [`String` implements `ToSocketAddrs`][39048]
- Cargo
- -----
- * [The `cargo check` command does a type check of a project without
- building it][cargo/3296]
- * [crates.io will display CI badges from Travis and AppVeyor, if
- specified in Cargo.toml][cargo/3546]
- * [crates.io will display categories listed in Cargo.toml][cargo/3301]
- * [Compilation profiles accept integer values for `debug`, in addition
- to `true` and `false`. These are passed to `rustc` as the value to
- `-C debuginfo`][cargo/3534]
- * [Implement `cargo --version --verbose`][cargo/3604]
- * [All builds now output 'dep-info' build dependencies compatible with
- make and ninja][cargo/3557]
- * [Build all workspace members with `build --all`][cargo/3511]
- * [Document all workspace members with `doc --all`][cargo/3515]
- * [Path deps outside workspace are not members][cargo/3443]
- Misc
- ----
- * [`rustdoc` has a `--sysroot` argument that, like `rustc`, specifies
- the path to the Rust implementation][38589]
- * [The `armv7-linux-androideabi` target no longer enables NEON
- extensions, per Google's ABI guide][38413]
- * [The stock standard library can be compiled for Redox OS][38401]
- * [Rust has initial SPARC support][38726]. Tier 3. No builds
- available.
- * [Rust has experimental support for Nvidia PTX][38559]. Tier 3. No
- builds available.
- * [Fix backtraces on i686-pc-windows-gnu by disabling FPO][39379]
- Compatibility Notes
- -------------------
- * [Uninhabitable enums (those without any variants) no longer permit wildcard
- match patterns][38069]
- * In this release, references to uninhabited types can not be
- pattern-matched. This was accidentally allowed in 1.15.
- * [The compiler's `dead_code` lint now accounts for type aliases][38051].
- * [Ctrl-Z returns from `Stdin.read()` when reading from the console on
- Windows][38274]
- * [Clean up semantics of `self` in an import list][38313]
- [37057]: https://github.com/rust-lang/rust/pull/37057
- [37761]: https://github.com/rust-lang/rust/pull/37761
- [38006]: https://github.com/rust-lang/rust/pull/38006
- [38051]: https://github.com/rust-lang/rust/pull/38051
- [38062]: https://github.com/rust-lang/rust/pull/38062
- [38062]: https://github.com/rust-lang/rust/pull/38622
- [38066]: https://github.com/rust-lang/rust/pull/38066
- [38069]: https://github.com/rust-lang/rust/pull/38069
- [38131]: https://github.com/rust-lang/rust/pull/38131
- [38154]: https://github.com/rust-lang/rust/pull/38154
- [38274]: https://github.com/rust-lang/rust/pull/38274
- [38304]: https://github.com/rust-lang/rust/pull/38304
- [38313]: https://github.com/rust-lang/rust/pull/38313
- [38314]: https://github.com/rust-lang/rust/pull/38314
- [38327]: https://github.com/rust-lang/rust/pull/38327
- [38401]: https://github.com/rust-lang/rust/pull/38401
- [38413]: https://github.com/rust-lang/rust/pull/38413
- [38469]: https://github.com/rust-lang/rust/pull/38469
- [38559]: https://github.com/rust-lang/rust/pull/38559
- [38571]: https://github.com/rust-lang/rust/pull/38571
- [38580]: https://github.com/rust-lang/rust/pull/38580
- [38589]: https://github.com/rust-lang/rust/pull/38589
- [38670]: https://github.com/rust-lang/rust/pull/38670
- [38712]: https://github.com/rust-lang/rust/pull/38712
- [38726]: https://github.com/rust-lang/rust/pull/38726
- [38781]: https://github.com/rust-lang/rust/pull/38781
- [38798]: https://github.com/rust-lang/rust/pull/38798
- [38909]: https://github.com/rust-lang/rust/pull/38909
- [38920]: https://github.com/rust-lang/rust/pull/38920
- [38927]: https://github.com/rust-lang/rust/pull/38927
- [39048]: https://github.com/rust-lang/rust/pull/39048
- [39282]: https://github.com/rust-lang/rust/pull/39282
- [39379]: https://github.com/rust-lang/rust/pull/39379
- [`<*const T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
- [`<*mut T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
- [`Duration::checked_add`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_add
- [`Duration::checked_div`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_div
- [`Duration::checked_mul`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_mul
- [`Duration::checked_sub`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_sub
- [`File::set_permissions`]: https://doc.rust-lang.org/std/fs/struct.File.html#method.set_permissions
- [`IpAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv4
- [`IpAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.IpAddr.html#method.is_ipv6
- [`Result::unwrap_or_default`]: https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap_or_default
- [`SocketAddr::is_ipv4`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv4
- [`SocketAddr::is_ipv6`]: https://doc.rust-lang.org/std/net/enum.SocketAddr.html#method.is_ipv6
- [`String::insert_str`]: https://doc.rust-lang.org/std/string/struct.String.html#method.insert_str
- [`String::split_off`]: https://doc.rust-lang.org/std/string/struct.String.html#method.split_off
- [`Vec::dedup_by_key`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by_key
- [`Vec::dedup_by`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.dedup_by
- [`VecDeque::resize`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.resize
- [`VecDeque::truncate`]: https://doc.rust-lang.org/std/collections/vec_deque/struct.VecDeque.html#method.truncate
- [`str::repeat`]: https://doc.rust-lang.org/std/primitive.str.html#method.repeat
- [`str::replacen`]: https://doc.rust-lang.org/std/primitive.str.html#method.replacen
- [cargo/3296]: https://github.com/rust-lang/cargo/pull/3296
- [cargo/3301]: https://github.com/rust-lang/cargo/pull/3301
- [cargo/3443]: https://github.com/rust-lang/cargo/pull/3443
- [cargo/3511]: https://github.com/rust-lang/cargo/pull/3511
- [cargo/3515]: https://github.com/rust-lang/cargo/pull/3515
- [cargo/3534]: https://github.com/rust-lang/cargo/pull/3534
- [cargo/3546]: https://github.com/rust-lang/cargo/pull/3546
- [cargo/3557]: https://github.com/rust-lang/cargo/pull/3557
- [cargo/3604]: https://github.com/rust-lang/cargo/pull/3604
- [RFC 1623]: https://github.com/rust-lang/rfcs/blob/master/text/1623-static.md
- Version 1.15.1 (2017-02-09)
- ===========================
- * [Fix IntoIter::as_mut_slice's signature][39466]
- * [Compile compiler builtins with `-fPIC` on 32-bit platforms][39523]
- [39466]: https://github.com/rust-lang/rust/pull/39466
- [39523]: https://github.com/rust-lang/rust/pull/39523
- Version 1.15.0 (2017-02-02)
- ===========================
- Language
- --------
- * Basic procedural macros allowing custom `#[derive]`, aka "macros 1.1", are
- stable. This allows popular code-generating crates like Serde and Diesel to
- work ergonomically. [RFC 1681].
- * [Tuple structs may be empty. Unary and empty tuple structs may be instantiated
- with curly braces][36868]. Part of [RFC 1506].
- * [A number of minor changes to name resolution have been activated][37127].
- They add up to more consistent semantics, allowing for future evolution of
- Rust macros. Specified in [RFC 1560], see its section on ["changes"] for
- details of what is different. The breaking changes here have been transitioned
- through the [`legacy_imports`] lint since 1.14, with no known regressions.
- * [In `macro_rules`, `path` fragments can now be parsed as type parameter
- bounds][38279]
- * [`?Sized` can be used in `where` clauses][37791]
- * [There is now a limit on the size of monomorphized types and it can be
- modified with the `#![type_size_limit]` crate attribute, similarly to
- the `#![recursion_limit]` attribute][37789]
- Compiler
- --------
- * [On Windows, the compiler will apply dllimport attributes when linking to
- extern functions][37973]. Additional attributes and flags can control which
- library kind is linked and its name. [RFC 1717].
- * [Rust-ABI symbols are no longer exported from cdylibs][38117]
- * [The `--test` flag works with procedural macro crates][38107]
- * [Fix `extern "aapcs" fn` ABI][37814]
- * [The `-C no-stack-check` flag is deprecated][37636]. It does nothing.
- * [The `format!` expander recognizes incorrect `printf` and shell-style
- formatting directives and suggests the correct format][37613].
- * [Only report one error for all unused imports in an import list][37456]
- Compiler Performance
- --------------------
- * [Avoid unnecessary `mk_ty` calls in `Ty::super_fold_with`][37705]
- * [Avoid more unnecessary `mk_ty` calls in `Ty::super_fold_with`][37979]
- * [Don't clone in `UnificationTable::probe`][37848]
- * [Remove `scope_auxiliary` to cut RSS by 10%][37764]
- * [Use small vectors in type walker][37760]
- * [Macro expansion performance was improved][37701]
- * [Change `HirVec<P<T>>` to `HirVec<T>` in `hir::Expr`][37642]
- * [Replace FNV with a faster hash function][37229]
- Stabilized APIs
- ---------------
- * [`std::iter::Iterator::min_by`]
- * [`std::iter::Iterator::max_by`]
- * [`std::os::*::fs::FileExt`]
- * [`std::sync::atomic::Atomic*::get_mut`]
- * [`std::sync::atomic::Atomic*::into_inner`]
- * [`std::vec::IntoIter::as_slice`]
- * [`std::vec::IntoIter::as_mut_slice`]
- * [`std::sync::mpsc::Receiver::try_iter`]
- * [`std::os::unix::process::CommandExt::before_exec`]
- * [`std::rc::Rc::strong_count`]
- * [`std::rc::Rc::weak_count`]
- * [`std::sync::Arc::strong_count`]
- * [`std::sync::Arc::weak_count`]
- * [`std::char::encode_utf8`]
- * [`std::char::encode_utf16`]
- * [`std::cell::Ref::clone`]
- * [`std::io::Take::into_inner`]
- Libraries
- ---------
- * [The standard sorting algorithm has been rewritten for dramatic performance
- improvements][38192]. It is a hybrid merge sort, drawing influences from
- Timsort. Previously it was a naive merge sort.
- * [`Iterator::nth` no longer has a `Sized` bound][38134]
- * [`Extend<&T>` is specialized for `Vec` where `T: Copy`][38182] to improve
- performance.
- * [`chars().count()` is much faster][37888] and so are [`chars().last()`
- and `char_indices().last()`][37882]
- * [Fix ARM Objective-C ABI in `std::env::args`][38146]
- * [Chinese characters display correctly in `fmt::Debug`][37855]
- * [Derive `Default` for `Duration`][37699]
- * [Support creation of anonymous pipes on WinXP/2k][37677]
- * [`mpsc::RecvTimeoutError` implements `Error`][37527]
- * [Don't pass overlapped handles to processes][38835]
- Cargo
- -----
- * [In this release, Cargo build scripts no longer have access to the `OUT_DIR`
- environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They
- should instead check the variable at runtime with `std::env`. That the value
- was set at build time was a bug, and incorrect when cross-compiling. This
- change is known to cause breakage.
- * [Add `--all` flag to `cargo test`][cargo/3221]
- * [Compile statically against the MSVC CRT][cargo/3363]
- * [Mix feature flags into fingerprint/metadata shorthash][cargo/3102]
- * [Link OpenSSL statically on OSX][cargo/3311]
- * [Apply new fingerprinting to build dir outputs][cargo/3310]
- * [Test for bad path overrides with summaries][cargo/3336]
- * [Require `cargo install --vers` to take a semver version][cargo/3338]
- * [Fix retrying crate downloads for network errors][cargo/3348]
- * [Implement string lookup for `build.rustflags` config key][cargo/3356]
- * [Emit more info on --message-format=json][cargo/3319]
- * [Assume `build.rs` in the same directory as `Cargo.toml` is a build script][cargo/3361]
- * [Don't ignore errors in workspace manifest][cargo/3409]
- * [Fix `--message-format JSON` when rustc emits non-JSON warnings][cargo/3410]
- Tooling
- -------
- * [Test runners (binaries built with `--test`) now support a `--list` argument
- that lists the tests it contains][38185]
- * [Test runners now support a `--exact` argument that makes the test filter
- match exactly, instead of matching only a substring of the test name][38181]
- * [rustdoc supports a `--playground-url` flag][37763]
- * [rustdoc provides more details about `#[should_panic]` errors][37749]
- Misc
- ----
- * [The Rust build system is now written in Rust][37817]. The Makefiles may
- continue to be used in this release by passing `--disable-rustbuild` to the
- configure script, but they will be deleted soon. Note that the new build
- system uses a different on-disk layout that will likely affect any scripts
- building Rust.
- * [Rust supports i686-unknown-openbsd][38086]. Tier 3 support. No testing or
- releases.
- * [Rust supports the MSP430][37627]. Tier 3 support. No testing or releases.
- * [Rust supports the ARMv5TE architecture][37615]. Tier 3 support. No testing or
- releases.
- Compatibility Notes
- -------------------
- * [A number of minor changes to name resolution have been activated][37127].
- They add up to more consistent semantics, allowing for future evolution of
- Rust macros. Specified in [RFC 1560], see its section on ["changes"] for
- details of what is different. The breaking changes here have been transitioned
- through the [`legacy_imports`] lint since 1.14, with no known regressions.
- * [In this release, Cargo build scripts no longer have access to the `OUT_DIR`
- environment variable at build time via `env!("OUT_DIR")`][cargo/3368]. They
- should instead check the variable at runtime with `std::env`. That the value
- was set at build time was a bug, and incorrect when cross-compiling. This
- change is known to cause breakage.
- * [Higher-ranked lifetimes are no longer allowed to appear _only_ in associated
- types][33685]. The [`hr_lifetime_in_assoc_type` lint] has been a warning since
- 1.10 and is now an error by default. It will become a hard error in the near
- future.
- * [The semantics relating modules to file system directories are changing in
- minor ways][37602]. This is captured in the new `legacy_directory_ownership`
- lint, which is a warning in this release, and will become a hard error in the
- future.
- * [Rust-ABI symbols are no longer exported from cdylibs][38117]
- * [Once `Peekable` peeks a `None` it will return that `None` without re-querying
- the underlying iterator][37834]
- ["changes"]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md#changes-to-name-resolution-rules
- [33685]: https://github.com/rust-lang/rust/issues/33685
- [36868]: https://github.com/rust-lang/rust/pull/36868
- [37127]: https://github.com/rust-lang/rust/pull/37127
- [37229]: https://github.com/rust-lang/rust/pull/37229
- [37456]: https://github.com/rust-lang/rust/pull/37456
- [37527]: https://github.com/rust-lang/rust/pull/37527
- [37602]: https://github.com/rust-lang/rust/pull/37602
- [37613]: https://github.com/rust-lang/rust/pull/37613
- [37615]: https://github.com/rust-lang/rust/pull/37615
- [37636]: https://github.com/rust-lang/rust/pull/37636
- [37627]: https://github.com/rust-lang/rust/pull/37627
- [37642]: https://github.com/rust-lang/rust/pull/37642
- [37677]: https://github.com/rust-lang/rust/pull/37677
- [37699]: https://github.com/rust-lang/rust/pull/37699
- [37701]: https://github.com/rust-lang/rust/pull/37701
- [37705]: https://github.com/rust-lang/rust/pull/37705
- [37749]: https://github.com/rust-lang/rust/pull/37749
- [37760]: https://github.com/rust-lang/rust/pull/37760
- [37763]: https://github.com/rust-lang/rust/pull/37763
- [37764]: https://github.com/rust-lang/rust/pull/37764
- [37789]: https://github.com/rust-lang/rust/pull/37789
- [37791]: https://github.com/rust-lang/rust/pull/37791
- [37814]: https://github.com/rust-lang/rust/pull/37814
- [37817]: https://github.com/rust-lang/rust/pull/37817
- [37834]: https://github.com/rust-lang/rust/pull/37834
- [37848]: https://github.com/rust-lang/rust/pull/37848
- [37855]: https://github.com/rust-lang/rust/pull/37855
- [37882]: https://github.com/rust-lang/rust/pull/37882
- [37888]: https://github.com/rust-lang/rust/pull/37888
- [37973]: https://github.com/rust-lang/rust/pull/37973
- [37979]: https://github.com/rust-lang/rust/pull/37979
- [38086]: https://github.com/rust-lang/rust/pull/38086
- [38107]: https://github.com/rust-lang/rust/pull/38107
- [38117]: https://github.com/rust-lang/rust/pull/38117
- [38134]: https://github.com/rust-lang/rust/pull/38134
- [38146]: https://github.com/rust-lang/rust/pull/38146
- [38181]: https://github.com/rust-lang/rust/pull/38181
- [38182]: https://github.com/rust-lang/rust/pull/38182
- [38185]: https://github.com/rust-lang/rust/pull/38185
- [38192]: https://github.com/rust-lang/rust/pull/38192
- [38279]: https://github.com/rust-lang/rust/pull/38279
- [38835]: https://github.com/rust-lang/rust/pull/38835
- [RFC 1492]: https://github.com/rust-lang/rfcs/blob/master/text/1492-dotdot-in-patterns.md
- [RFC 1506]: https://github.com/rust-lang/rfcs/blob/master/text/1506-adt-kinds.md
- [RFC 1560]: https://github.com/rust-lang/rfcs/blob/master/text/1560-name-resolution.md
- [RFC 1681]: https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md
- [RFC 1717]: https://github.com/rust-lang/rfcs/blob/master/text/1717-dllimport.md
- [`hr_lifetime_in_assoc_type` lint]: https://github.com/rust-lang/rust/issues/33685
- [`legacy_imports`]: https://github.com/rust-lang/rust/pull/38271
- [cargo/3102]: https://github.com/rust-lang/cargo/pull/3102
- [cargo/3221]: https://github.com/rust-lang/cargo/pull/3221
- [cargo/3310]: https://github.com/rust-lang/cargo/pull/3310
- [cargo/3311]: https://github.com/rust-lang/cargo/pull/3311
- [cargo/3319]: https://github.com/rust-lang/cargo/pull/3319
- [cargo/3336]: https://github.com/rust-lang/cargo/pull/3336
- [cargo/3338]: https://github.com/rust-lang/cargo/pull/3338
- [cargo/3348]: https://github.com/rust-lang/cargo/pull/3348
- [cargo/3356]: https://github.com/rust-lang/cargo/pull/3356
- [cargo/3361]: https://github.com/rust-lang/cargo/pull/3361
- [cargo/3363]: https://github.com/rust-lang/cargo/pull/3363
- [cargo/3368]: https://github.com/rust-lang/cargo/issues/3368
- [cargo/3409]: https://github.com/rust-lang/cargo/pull/3409
- [cargo/3410]: https://github.com/rust-lang/cargo/pull/3410
- [`std::iter::Iterator::min_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.min_by
- [`std::iter::Iterator::max_by`]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.max_by
- [`std::os::*::fs::FileExt`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html
- [`std::sync::atomic::Atomic*::get_mut`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.get_mut
- [`std::sync::atomic::Atomic*::into_inner`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicU8.html#method.into_inner
- [`std::vec::IntoIter::as_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_slice
- [`std::vec::IntoIter::as_mut_slice`]: https://doc.rust-lang.org/std/vec/struct.IntoIter.html#method.as_mut_slice
- [`std::sync::mpsc::Receiver::try_iter`]: https://doc.rust-lang.org/std/sync/mpsc/struct.Receiver.html#method.try_iter
- [`std::os::unix::process::CommandExt::before_exec`]: https://doc.rust-lang.org/std/os/unix/process/trait.CommandExt.html#tymethod.before_exec
- [`std::rc::Rc::strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.strong_count
- [`std::rc::Rc::weak_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.weak_count
- [`std::sync::Arc::strong_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.strong_count
- [`std::sync::Arc::weak_count`]: https://doc.rust-lang.org/std/sync/struct.Arc.html#method.weak_count
- [`std::char::encode_utf8`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf8
- [`std::char::encode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf16
- [`std::cell::Ref::clone`]: https://doc.rust-lang.org/std/cell/struct.Ref.html#method.clone
- [`std::io::Take::into_inner`]: https://doc.rust-lang.org/std/io/struct.Take.html#method.into_inner
- Version 1.14.0 (2016-12-22)
- ===========================
- Language
- --------
- * [`..` matches multiple tuple fields in enum variants, structs
- and tuples][36843]. [RFC 1492].
- * [Safe `fn` items can be coerced to `unsafe fn` pointers][37389]
- * [`use *` and `use ::*` both glob-import from the crate root][37367]
- * [It's now possible to call a `Vec<Box<Fn()>>` without explicit
- dereferencing][36822]
- Compiler
- --------
- * [Mark enums with non-zero discriminant as non-zero][37224]
- * [Lower-case `static mut` names are linted like other
- statics and consts][37162]
- * [Fix ICE on some macros in const integer positions
- (e.g. `[u8; m!()]`)][36819]
- * [Improve error message and snippet for "did you mean `x`"][36798]
- * [Add a panic-strategy field to the target specification][36794]
- * [Include LLVM version in `--version --verbose`][37200]
- Compile-time Optimizations
- --------------------------
- * [Improve macro expansion performance][37569]
- * [Shrink `Expr_::ExprInlineAsm`][37445]
- * [Replace all uses of SHA-256 with BLAKE2b][37439]
- * [Reduce the number of bytes hashed by `IchHasher`][37427]
- * [Avoid more allocations when compiling html5ever][37373]
- * [Use `SmallVector` in `CombineFields::instantiate`][37322]
- * [Avoid some allocations in the macro parser][37318]
- * [Use a faster deflate setting][37298]
- * [Add `ArrayVec` and `AccumulateVec` to reduce heap allocations
- during interning of slices][37270]
- * [Optimize `write_metadata`][37267]
- * [Don't process obligation forest cycles when stalled][37231]
- * [Avoid many `CrateConfig` clones][37161]
- * [Optimize `Substs::super_fold_with`][37108]
- * [Optimize `ObligationForest`'s `NodeState` handling][36993]
- * [Speed up `plug_leaks`][36917]
- Libraries
- ---------
- * [`println!()`, with no arguments, prints newline][36825].
- Previously, an empty string was required to achieve the same.
- * [`Wrapping` impls standard binary and unary operators, as well as
- the `Sum` and `Product` iterators][37356]
- * [Implement `From<Cow<str>> for String` and `From<Cow<[T]>> for
- Vec<T>`][37326]
- * [Improve `fold` performance for `chain`, `cloned`, `map`, and
- `VecDeque` iterators][37315]
- * [Improve `SipHasher` performance on small values][37312]
- * [Add Iterator trait TrustedLen to enable better FromIterator /
- Extend][37306]
- * [Expand `.zip()` specialization to `.map()` and `.cloned()`][37230]
- * [`ReadDir` implements `Debug`][37221]
- * [Implement `RefUnwindSafe` for atomic types][37178]
- * [Specialize `Vec::extend` to `Vec::extend_from_slice`][37094]
- * [Avoid allocations in `Decoder::read_str`][37064]
- * [`io::Error` implements `From<io::ErrorKind>`][37037]
- * [Impl `Debug` for raw pointers to unsized data][36880]
- * [Don't reuse `HashMap` random seeds][37470]
- * [The internal memory layout of `HashMap` is more cache-friendly, for
- significant improvements in some operations][36692]
- * [`HashMap` uses less memory on 32-bit architectures][36595]
- * [Impl `Add<{str, Cow<str>}>` for `Cow<str>`][36430]
- Cargo
- -----
- * [Expose rustc cfg values to build scripts][cargo/3243]
- * [Allow cargo to work with read-only `CARGO_HOME`][cargo/3259]
- * [Fix passing --features when testing multiple packages][cargo/3280]
- * [Use a single profile set per workspace][cargo/3249]
- * [Load `replace` sections from lock files][cargo/3220]
- * [Ignore `panic` configuration for test/bench profiles][cargo/3175]
- Tooling
- -------
- * [rustup is the recommended Rust installation method][1.14rustup]
- * This release includes host (rustc) builds for Linux on MIPS, PowerPC, and
- S390x. These are [tier 2] platforms and may have major defects. Follow the
- instructions on the website to install, or add the targets to an existing
- installation with `rustup target add`. The new target triples are:
- - `mips-unknown-linux-gnu`
- - `mipsel-unknown-linux-gnu`
- - `mips64-unknown-linux-gnuabi64`
- - `mips64el-unknown-linux-gnuabi64 `
- - `powerpc-unknown-linux-gnu`
- - `powerpc64-unknown-linux-gnu`
- - `powerpc64le-unknown-linux-gnu`
- - `s390x-unknown-linux-gnu `
- * This release includes target (std) builds for ARM Linux running MUSL
- libc. These are [tier 2] platforms and may have major defects. Add the
- following triples to an existing rustup installation with `rustup target add`:
- - `arm-unknown-linux-musleabi`
- - `arm-unknown-linux-musleabihf`
- - `armv7-unknown-linux-musleabihf`
- * This release includes [experimental support for WebAssembly][1.14wasm], via
- the `wasm32-unknown-emscripten` target. This target is known to have major
- defects. Please test, report, and fix.
- * rustup no longer installs documentation by default. Run `rustup
- component add rust-docs` to install.
- * [Fix line stepping in debugger][37310]
- * [Enable line number debuginfo in releases][37280]
- Misc
- ----
- * [Disable jemalloc on aarch64/powerpc/mips][37392]
- * [Add support for Fuchsia OS][37313]
- * [Detect local-rebuild by only MAJOR.MINOR version][37273]
- Compatibility Notes
- -------------------
- * [A number of forward-compatibility lints used by the compiler
- to gradually introduce language changes have been converted
- to deny by default][36894]:
- - ["use of inaccessible extern crate erroneously allowed"][36886]
- - ["type parameter default erroneously allowed in invalid location"][36887]
- - ["detects super or self keywords at the beginning of global path"][36888]
- - ["two overlapping inherent impls define an item with the same name
- were erroneously allowed"][36889]
- - ["floating-point constants cannot be used in patterns"][36890]
- - ["constants of struct or enum type can only be used in a pattern if
- the struct or enum has `#[derive(PartialEq, Eq)]`"][36891]
- - ["lifetimes or labels named `'_` were erroneously allowed"][36892]
- * [Prohibit patterns in trait methods without bodies][37378]
- * [The atomic `Ordering` enum may not be matched exhaustively][37351]
- * [Future-proofing `#[no_link]` breaks some obscure cases][37247]
- * [The `$crate` macro variable is accepted in fewer locations][37213]
- * [Impls specifying extra region requirements beyond the trait
- they implement are rejected][37167]
- * [Enums may not be unsized][37111]. Unsized enums are intended to
- work but never have. For now they are forbidden.
- * [Enforce the shadowing restrictions from RFC 1560 for today's macros][36767]
- [tier 2]: https://forge.rust-lang.org/platform-support.html
- [1.14rustup]: https://internals.rust-lang.org/t/beta-testing-rustup-rs/3316/204
- [1.14wasm]: https://users.rust-lang.org/t/compiling-to-the-web-with-rust-and-emscripten/7627
- [36430]: https://github.com/rust-lang/rust/pull/36430
- [36595]: https://github.com/rust-lang/rust/pull/36595
- [36595]: https://github.com/rust-lang/rust/pull/36595
- [36692]: https://github.com/rust-lang/rust/pull/36692
- [36767]: https://github.com/rust-lang/rust/pull/36767
- [36794]: https://github.com/rust-lang/rust/pull/36794
- [36798]: https://github.com/rust-lang/rust/pull/36798
- [36819]: https://github.com/rust-lang/rust/pull/36819
- [36822]: https://github.com/rust-lang/rust/pull/36822
- [36825]: https://github.com/rust-lang/rust/pull/36825
- [36843]: https://github.com/rust-lang/rust/pull/36843
- [36880]: https://github.com/rust-lang/rust/pull/36880
- [36886]: https://github.com/rust-lang/rust/issues/36886
- [36887]: https://github.com/rust-lang/rust/issues/36887
- [36888]: https://github.com/rust-lang/rust/issues/36888
- [36889]: https://github.com/rust-lang/rust/issues/36889
- [36890]: https://github.com/rust-lang/rust/issues/36890
- [36891]: https://github.com/rust-lang/rust/issues/36891
- [36892]: https://github.com/rust-lang/rust/issues/36892
- [36894]: https://github.com/rust-lang/rust/pull/36894
- [36917]: https://github.com/rust-lang/rust/pull/36917
- [36993]: https://github.com/rust-lang/rust/pull/36993
- [37037]: https://github.com/rust-lang/rust/pull/37037
- [37064]: https://github.com/rust-lang/rust/pull/37064
- [37094]: https://github.com/rust-lang/rust/pull/37094
- [37108]: https://github.com/rust-lang/rust/pull/37108
- [37111]: https://github.com/rust-lang/rust/pull/37111
- [37161]: https://github.com/rust-lang/rust/pull/37161
- [37162]: https://github.com/rust-lang/rust/pull/37162
- [37167]: https://github.com/rust-lang/rust/pull/37167
- [37178]: https://github.com/rust-lang/rust/pull/37178
- [37200]: https://github.com/rust-lang/rust/pull/37200
- [37213]: https://github.com/rust-lang/rust/pull/37213
- [37221]: https://github.com/rust-lang/rust/pull/37221
- [37224]: https://github.com/rust-lang/rust/pull/37224
- [37230]: https://github.com/rust-lang/rust/pull/37230
- [37231]: https://github.com/rust-lang/rust/pull/37231
- [37247]: https://github.com/rust-lang/rust/pull/37247
- [37267]: https://github.com/rust-lang/rust/pull/37267
- [37270]: https://github.com/rust-lang/rust/pull/37270
- [37273]: https://github.com/rust-lang/rust/pull/37273
- [37280]: https://github.com/rust-lang/rust/pull/37280
- [37298]: https://github.com/rust-lang/rust/pull/37298
- [37306]: https://github.com/rust-lang/rust/pull/37306
- [37310]: https://github.com/rust-lang/rust/pull/37310
- [37312]: https://github.com/rust-lang/rust/pull/37312
- [37313]: https://github.com/rust-lang/rust/pull/37313
- [37315]: https://github.com/rust-lang/rust/pull/37315
- [37318]: https://github.com/rust-lang/rust/pull/37318
- [37322]: https://github.com/rust-lang/rust/pull/37322
- [37326]: https://github.com/rust-lang/rust/pull/37326
- [37351]: https://github.com/rust-lang/rust/pull/37351
- [37356]: https://github.com/rust-lang/rust/pull/37356
- [37367]: https://github.com/rust-lang/rust/pull/37367
- [37373]: https://github.com/rust-lang/rust/pull/37373
- [37378]: https://github.com/rust-lang/rust/pull/37378
- [37389]: https://github.com/rust-lang/rust/pull/37389
- [37392]: https://github.com/rust-lang/rust/pull/37392
- [37427]: https://github.com/rust-lang/rust/pull/37427
- [37439]: https://github.com/rust-lang/rust/pull/37439
- [37445]: https://github.com/rust-lang/rust/pull/37445
- [37470]: https://github.com/rust-lang/rust/pull/37470
- [37569]: https://github.com/rust-lang/rust/pull/37569
- [RFC 1492]: https://github.com/rust-lang/rfcs/blob/master/text/1492-dotdot-in-patterns.md
- [cargo/3175]: https://github.com/rust-lang/cargo/pull/3175
- [cargo/3220]: https://github.com/rust-lang/cargo/pull/3220
- [cargo/3243]: https://github.com/rust-lang/cargo/pull/3243
- [cargo/3249]: https://github.com/rust-lang/cargo/pull/3249
- [cargo/3259]: https://github.com/rust-lang/cargo/pull/3259
- [cargo/3280]: https://github.com/rust-lang/cargo/pull/3280
- Version 1.13.0 (2016-11-10)
- ===========================
- Language
- --------
- * [Stabilize the `?` operator][36995]. `?` is a simple way to propagate
- errors, like the `try!` macro, described in [RFC 0243].
- * [Stabilize macros in type position][36014]. Described in [RFC 873].
- * [Stabilize attributes on statements][36995]. Described in [RFC 0016].
- * [Fix `#[derive]` for empty tuple structs/variants][35728]
- * [Fix lifetime rules for 'if' conditions][36029]
- * [Avoid loading and parsing unconfigured non-inline modules][36482]
- Compiler
- --------
- * [Add the `-C link-arg` argument][36574]
- * [Remove the old AST-based backend from rustc_trans][35764]
- * [Don't enable NEON by default on armv7 Linux][35814]
- * [Fix debug line number info for macro expansions][35238]
- * [Do not emit "class method" debuginfo for types that are not
- DICompositeType][36008]
- * [Warn about multiple conflicting #[repr] hints][34623]
- * [When sizing DST, don't double-count nested struct prefixes][36351]
- * [Default RUST_MIN_STACK to 16MiB for now][36505]
- * [Improve rlib metadata format][36551]. Reduces rlib size significantly.
- * [Reject macros with empty repetitions to avoid infinite loop][36721]
- * [Expand macros without recursing to avoid stack overflows][36214]
- Diagnostics
- -----------
- * [Replace macro backtraces with labeled local uses][35702]
- * [Improve error message for missplaced doc comments][33922]
- * [Buffer unix and lock windows to prevent message interleaving][35975]
- * [Update lifetime errors to specifically note temporaries][36171]
- * [Special case a few colors for Windows][36178]
- * [Suggest `use self` when such an import resolves][36289]
- * [Be more specific when type parameter shadows primitive type][36338]
- * Many minor improvements
- Compile-time Optimizations
- --------------------------
- * [Compute and cache HIR hashes at beginning][35854]
- * [Don't hash types in loan paths][36004]
- * [Cache projections in trans][35761]
- * [Optimize the parser's last token handling][36527]
- * [Only instantiate #[inline] functions in codegen units referencing
- them][36524]. This leads to big improvements in cases where crates export
- define many inline functions without using them directly.
- * [Lazily allocate TypedArena's first chunk][36592]
- * [Don't allocate during default HashSet creation][36734]
- Stabilized APIs
- ---------------
- * [`checked_abs`]
- * [`wrapping_abs`]
- * [`overflowing_abs`]
- * [`RefCell::try_borrow`]
- * [`RefCell::try_borrow_mut`]
- Libraries
- ---------
- * [Add `assert_ne!` and `debug_assert_ne!`][35074]
- * [Make `vec_deque::Drain`, `hash_map::Drain`, and `hash_set::Drain`
- covariant][35354]
- * [Implement `AsRef<[T]>` for `std::slice::Iter`][35559]
- * [Implement `Debug` for `std::vec::IntoIter`][35707]
- * [`CString`: avoid excessive growth just to 0-terminate][35871]
- * [Implement `CoerceUnsized` for `{Cell, RefCell, UnsafeCell}`][35627]
- * [Use arc4rand on FreeBSD][35884]
- * [memrchr: Correct aligned offset computation][35969]
- * [Improve Demangling of Rust Symbols][36059]
- * [Use monotonic time in condition variables][35048]
- * [Implement `Debug` for `std::path::{Components,Iter}`][36101]
- * [Implement conversion traits for `char`][35755]
- * [Fix illegal instruction caused by overflow in channel cloning][36104]
- * [Zero first byte of CString on drop][36264]
- * [Inherit overflow checks for sum and product][36372]
- * [Add missing Eq implementations][36423]
- * [Implement `Debug` for `DirEntry`][36631]
- * [When `getaddrinfo` returns `EAI_SYSTEM` retrieve actual error from
- `errno`][36754]
- * [`SipHasher`] is deprecated. Use [`DefaultHasher`].
- * [Implement more traits for `std::io::ErrorKind`][35911]
- * [Optimize BinaryHeap bounds checking][36072]
- * [Work around pointer aliasing issue in `Vec::extend_from_slice`,
- `extend_with_element`][36355]
- * [Fix overflow checking in unsigned pow()][34942]
- Cargo
- -----
- * This release includes security fixes to both curl and OpenSSL.
- * [Fix transitive doctests when panic=abort][cargo/3021]
- * [Add --all-features flag to cargo][cargo/3038]
- * [Reject path-based dependencies in `cargo package`][cargo/3060]
- * [Don't parse the home directory more than once][cargo/3078]
- * [Don't try to generate Cargo.lock on empty workspaces][cargo/3092]
- * [Update OpenSSL to 1.0.2j][cargo/3121]
- * [Add license and license_file to cargo metadata output][cargo/3110]
- * [Make crates-io registry URL op…
Large files files are truncated, but you can click here to view the full file