The Rust team is happy to announce a new version of Rust, 1.23.0. Rust is a systems programming language focused on safety, speed, and concurrency.
If you have a previous version of Rust installed via rustup, getting Rust 1.23.0 is as easy as:
rustup update stable
If you don't have it already, you can get rustup
from the
appropriate page on our website, and check out the detailed release notes for
1.23.0 on GitHub.
What's in 1.23.0 stable
New year, new Rust! For our first improvement today, we now avoid some unnecessary
copies in certain situations.
We've seen memory usage of using rustc
to drop 5-10% with this change; it may
be different with your programs.
The documentation team has been on a long journey to move rustdoc
to use
CommonMark. Previously, rustdoc
never guaranteed which markdown rendering
engine it used, but we're finally committing to CommonMark. As part of this
release, we render the documentation with our previous renderer, Hoedown,
but also render it with a CommonMark compliant renderer, and warn if there
are any differences. There should be a way for you to modify the syntax you
use to render correctly under both; we're not aware of any situations where
this is impossible. Docs team member Guillaume Gomez has written a blog post
showing some common differences and how to solve them. In a future release,
we will switch to using the CommonMark renderer by default. This warning
landed in nightly in May of last year, and has been on by default since
October of last year, so many crates have already fixed any issues that
they've found.
In other documentation news, historically, Cargo's docs have been a bit strange.
Rather than being on doc.rust-lang.org,
they've been at doc.crates.io.
With this release, that's changing.
You can now find Cargo's docs at doc.rust-lang.org/cargo.
Additionally, they've been converted to the same format as our other long-form documentation.
We'll be adding a redirect from doc.crates.io
to this page, and you can expect to see more
improvements and updates to Cargo's docs throughout the year.
See the detailed release notes for more.
Library stabilizations
As of Rust 1.0, a trait named AsciiExt
existed to provide ASCII related functionality
on u8
, char
, [u8]
, and str
. To use it, you'd write code like this:
use std::ascii::AsciiExt;
let ascii = 'a';
let non_ascii = '❤';
let int_ascii = 97;
assert!(ascii.is_ascii());
assert!(!non_ascii.is_ascii());
assert!(int_ascii.is_ascii());
In Rust 1.23, these methods are now defined directly on those types, and so you no longer need to import the trait. Thanks to our stability guarantees, this trait still exists, so if you'd like to still support Rust versions before Rust 1.23, you can do this:
#[allow(unused_imports)]
use std::ascii::AsciiExt;
…to suppress the related warning. Once you drop support for older Rusts, you can remove both lines, and everything will continue to work.
Additionally, a few new APIs were stabilized this release:
- The various
std::sync::atomic types
now implementFrom
their non-atomic types. For example,let x = AtomicBool::from(true);
. ()
now implementsFromIterator<()>
; check the PR for a neat use-case.RwLock<T>
has had itsSend
restriction lifted
See the detailed release notes for more.
Cargo features
cargo check
can now check your unit tests.
cargo uninstall
can now uninstall more than one package in one command.
See the detailed release notes for more.
Contributors to 1.23.0
Many people came together to create Rust 1.23. We couldn't have done it without all of you. Thanks!