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.

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)]usestd::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 implement From their non-atomic types. For example, let x = AtomicBool::from(true);.