Email me

Rust versions / 1.8

Rust release · Apr 14, 2016

Rust 1.8: what's new, what was stabilized

Short answerRust 1.8 was released on Apr 14, 2016: 9 compatibility notes that can affect existing code.

Apr 14, 2016release date
0language stabilizations
0APIs stabilized
-new edition

← Rust 1.7All versionsRust 1.9 →

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:

  • [Unstable compiler flags have been further restricted][1.8u]. Since
  • [It is no longer possible to match on empty enum variants using
  • The Unix-specific MetadataExt traits, including
  • [Modules sourced from the filesystem cannot appear within arbitrary
  • [--cfg compiler flags are parsed strictly as identifiers][1.8c].
  • On Unix, [stack overflow triggers a runtime abort instead of a
  • [Command::spawn and its equivalents return an error if any of
  • [Tuple and unit enum variants from other crates are in the type
  • [On Windows rustc emits .lib files for the staticlib library

Use it

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

To require at least this version from users of your crate, set rust-version = "1.8" 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

  • Rust supports overloading of compound assignment statements like += by implementing the [AddAssign], [SubAssign], [MulAssign], [DivAssign], [RemAssign], [BitAndAssign], [BitOrAssign], [BitXorAssign], [ShlAssign], or [ShrAssign] traits. [RFC 953].
  • Empty structs can be defined with braces, as in struct Foo { }, in addition to the non-braced form, struct Foo;. [RFC 218].

Libraries

  • Stabilized APIs:
  • [str::encode_utf16] (renamed from utf16_units)
  • [str::EncodeUtf16] (renamed from Utf16Units)
  • [Ref::map]
  • [RefMut::map]
  • [ptr::drop_in_place]
  • [time::Instant]
  • [time::SystemTime]
  • [Instant::now]
  • [Instant::duration_since] (renamed from duration_from_earlier)
  • [Instant::elapsed]
  • [SystemTime::now]
  • [SystemTime::duration_since] (renamed from duration_from_earlier)
  • [SystemTime::elapsed]
  • Various Add/Sub impls for Time and SystemTime
  • [SystemTimeError]
  • [SystemTimeError::duration]
  • Various impls for SystemTimeError
  • [UNIX_EPOCH]
  • [AddAssign], [SubAssign], [MulAssign], [DivAssign], [RemAssign], [BitAndAssign], [BitOrAssign], [BitXorAssign], [ShlAssign], [ShrAssign].
  • [The write! and writeln! macros correctly emit errors if any of their arguments can't be formatted][1.8w].
  • [Various I/O functions support large files on 32-bit Linux][1.8l].
  • [The Unix-specific raw modules, which contain a number of redefined C types are deprecated][1.8r], including os::raw::unix, os::raw::macos, and os::raw::linux. These modules defined types such as ino_t and dev_t. The inconsistency of these definitions across platforms was making it difficult to implement std correctly. Those that need these definitions should use the libc crate. [RFC 1415].
  • The Unix-specific MetadataExt traits, including os::unix::fs::MetadataExt, which expose values such as inode numbers [no longer return platform-specific types][1.8r], but instead return widened integers. [RFC 1415].
  • [btree_set::{IntoIter, Iter, Range} are covariant][1.8cv].
  • [Atomic loads and stores are not volatile][1.8a].
  • [All types in sync::mpsc implement fmt::Debug][1.8mp].

Performance

  • [Inlining hash functions lead to a 3% compile-time improvement in some workloads][1.8h].
  • When using jemalloc, its symbols are [unprefixed so that it overrides the libc malloc implementation][1.8h]. This means that for rustc, LLVM is now using jemalloc, which results in a 6% compile-time improvement on a specific workload.
  • [Avoid quadratic growth in function size due to cleanups][1.8cu].

Misc

  • [32-bit MSVC builds finally implement unwinding][1.8ms]. i686-pc-windows-msvc is now considered a tier-1 platform.
  • [The --print targets flag prints a list of supported targets][1.8t].
  • [The --print cfg flag prints the cfgs defined for the current target][1.8cf].
  • [rustc can be built with an new Cargo-based build system, written in Rust][1.8b]. It will eventually replace Rust's Makefile-based build system. To enable it configure with configure --rustbuild.
  • [Errors for non-exhaustive match patterns now list up to 3 missing variants while also indicating the total number of missing variants if more than 3][1.8m].
  • [Executable stacks are disabled on Linux and BSD][1.8nx].
  • The Rust Project now publishes binary releases of the standard library for a number of tier-2 targets: armv7-unknown-linux-gnueabihf, powerpc-unknown-linux-gnu, powerpc64-unknown-linux-gnu, powerpc64le-unknown-linux-gnu x86_64-rumprun-netbsd. These can be installed with tools such as [multirust][1.8mr].

Cargo

  • [cargo init creates a new Cargo project in the current directory][1.8ci]. It is otherwise like cargo new.
  • [Cargo has configuration keys for -v and --color][1.8cc]. verbose and color, respectively, go in the [term] section of .cargo/config.
  • [Configuration keys that evaluate to strings or integers can be set via environment variables][1.8ce]. For example the build.jobs key can be set via CARGO_BUILD_JOBS. Environment variables take precedence over config files.
  • [Target-specific dependencies support Rust cfg syntax for describing targets][1.8cfg] so that dependencies for multiple targets can be specified together. [RFC 1361].
  • [The environment variables CARGO_TARGET_ROOT, RUSTC, and RUSTDOC take precedence over the build.target-dir, build.rustc, and build.rustdoc configuration values][1.8cfv].
  • [The child process tree is killed on Windows when Cargo is killed][1.8ck].
  • [The build.target configuration value sets the target platform, like --target][1.8ct].

Compatibility Notes

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

← Rust 1.7All versionsRust 1.9 →

Up next

Next releaseRust 1.9Released May 26, 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