Email me

Rust versions / 1.6

Rust release · Jan 21, 2016

Rust 1.6: what's new, what was stabilized

Short answerRust 1.6 was released on Jan 21, 2016: 5 compatibility notes that can affect existing code.

Jan 21, 2016release date
0language stabilizations
0APIs stabilized
-new edition

← Rust 1.5All versionsRust 1.7 →

Can it break my build?

The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:

  • The compiler no longer makes use of the [RUST_PATH][1.6rp]
  • [A number of bugs were fixed in the privacy checker][1.6p] that
  • [Modules and unit/tuple structs may not share the same name][1.6ts].
  • [Bugs in pattern matching unit structs were fixed][1.6us]. The tuple
  • A bug was fixed that causes [rustc not to apply default type

Use it

rustup update stable        # get the newest release
rustup install 1.6          # or exactly this one
rustup override set 1.6     # pin a project to it

To require at least this version from users of your crate, set rust-version = "1.6" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.

Full release notes

Language

  • The #![no_std] attribute causes a crate to not be linked to the standard library, but only the [core library][1.6co], as described in [RFC 1184]. The core library defines common types and traits but has no platform dependencies whatsoever, and is the basis for Rust software in environments that cannot support a full port of the standard library, such as operating systems. Most of the core library is now stable.

Libraries

  • Stabilized APIs: [Read::read_exact], [ErrorKind::UnexpectedEof] (renamed from UnexpectedEOF), [fs::DirBuilder], [fs::DirBuilder::new], [fs::DirBuilder::recursive], [fs::DirBuilder::create], [os::unix::fs::DirBuilderExt], [os::unix::fs::DirBuilderExt::mode], [vec::Drain], [vec::Vec::drain], [string::Drain], [string::String::drain], [vec_deque::Drain], [vec_deque::VecDeque::drain], [collections::hash_map::Drain], [collections::hash_map::HashMap::drain], [collections::hash_set::Drain], [collections::hash_set::HashSet::drain], [collections::binary_heap::Drain], [collections::binary_heap::BinaryHeap::drain], [Vec::extend_from_slice] (renamed from push_all), [Mutex::get_mut], [Mutex::into_inner], [RwLock::get_mut], [RwLock::into_inner], [Iterator::min_by_key] (renamed from min_by), [Iterator::max_by_key] (renamed from max_by).
  • The [core library][1.6co] is stable, as are most of its APIs.
  • [The assert_eq! macro supports arguments that don't implement Sized][1.6ae], such as arrays. In this way it behaves more like assert!.
  • Several timer functions that take duration in milliseconds [are deprecated in favor of those that take Duration][1.6ms]. These include Condvar::wait_timeout_ms, thread::sleep_ms, and thread::park_timeout_ms.
  • The algorithm by which Vec reserves additional elements was [tweaked to not allocate excessive space][1.6a] while still growing exponentially.
  • From conversions are [implemented from integers to floats][1.6f] in cases where the conversion is lossless. Thus they are not implemented for 32-bit ints to f32, nor for 64-bit ints to f32 or f64. They are also not implemented for isize and usize because the implementations would be platform-specific. From is also implemented from f32 to f64.
  • From<&Path> and From<PathBuf> are implemented for Cow<Path>.
  • From<T> is implemented for Box<T>, Rc<T> and Arc<T>.
  • IntoIterator is implemented for &PathBuf and &Path.
  • [BinaryHeap was refactored][1.6bh] for modest performance improvements.
  • Sorting slices that are already sorted [is 50% faster in some cases][1.6s].

Cargo

  • Cargo will look in $CARGO_HOME/bin for subcommands [by default][1.6c].
  • Cargo build scripts can specify their dependencies by emitting the [rerun-if-changed][1.6rr] key.
  • crates.io will reject publication of crates with dependencies that have a wildcard version constraint. Crates with wildcard dependencies were seen to cause a variety of problems, as described in [RFC 1241]. Since 1.5 publication of such crates has emitted a warning.
  • cargo clean [accepts a --release flag][1.6cc] to clean the release folder. A variety of artifacts that Cargo failed to clean are now correctly deleted.

Misc

  • The unreachable_code lint [warns when a function call's argument diverges][1.6dv].
  • The parser indicates [failures that may be caused by confusingly-similar Unicode characters][1.6uc]
  • Certain macro errors [are reported at definition time][1.6m], not expansion.

Compatibility Notes

Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.

← Rust 1.5All versionsRust 1.7 →

Up next

Next releaseRust 1.7Released Mar 3, 2016.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ