← Back to all releases

Rust 1.23.0

Released on January 4, 2018

What's Changed

  • [Arbitrary auto traits are now permitted in trait objects.][45772]
  • [rustc now uses subtyping on the left hand side of binary operations.][45435]

  • [Enabled TrapUnreachable in LLVM which should mitigate the impact of
  • [rustc now suggests renaming import if names clash.][45660]
  • [Display errors/warnings correctly when there are zero-width or
  • [rustc now avoids unnecessary copies of arguments that are
  • [Updated musl used to build musl rustc to 1.1.17][45393]

  • [Allow a trailing comma in assert_eq/ne macro][45887]
  • [Implement Hash for raw pointers to unsized types][45483]
  • [impl From<*mut T> for AtomicPtr][45610]
  • [impl From for AtomicUsize/AtomicIsize.][45610]
  • [Removed the T: Sync requirement for RwLock: Send][45267]
  • [Removed T: Sized requirement for {<const T>, <mut T>}::as_ref
  • [Optimized Thread::{park, unpark} implementation][45524]
  • [Improved SliceExt::binary_search performance.][45333]
  • [impl FromIterator<()> for ()][45379]
  • [Copied AsciiExt trait methods to primitive types.][44042] Use of AsciiExt

  • [Cargo now supports uninstallation of multiple packages][cargo/4561]
  • [Added unit test checking to cargo check][cargo/4592]
  • [Cargo now lets you install a specific version

  • [Changes have been made to type equality to make it more correct,
  • [char::escape_debug now uses Unicode 10 over 9.][45571]
  • [Upgraded Android SDK to 27, and NDK to r15c.][45580] This drops support for
  • [Bumped the minimum LLVM to 3.9][45326]

  • [Releases now ship with the Cargo book documentation.][45692]
  • [rustdoc now prints rendering warnings on every run.][45324]
Full Changelog

Language

--------

- [Arbitrary auto traits are now permitted in trait objects.][45772]

- [rustc now uses subtyping on the left hand side of binary operations.][45435]

Which should fix some confusing errors in some operations.

Compiler

--------

- [Enabled TrapUnreachable in LLVM which should mitigate the impact of

undefined behavior.][45920]

- [rustc now suggests renaming import if names clash.][45660]

- [Display errors/warnings correctly when there are zero-width or

wide characters.][45711]

- [rustc now avoids unnecessary copies of arguments that are

simple bindings][45380] This should improve memory usage on average by 5-10%.

- [Updated musl used to build musl rustc to 1.1.17][45393]

Libraries

---------

- [Allow a trailing comma in assert_eq/ne macro][45887]

- [Implement Hash for raw pointers to unsized types][45483]

- [impl From<*mut T> for AtomicPtr][45610]

- [impl From for AtomicUsize/AtomicIsize.][45610]

- [Removed the T: Sync requirement for RwLock: Send][45267]

- [Removed T: Sized requirement for {<const T>, <mut T>}::as_ref

and <*mut T>::as_mut][44932]

- [Optimized Thread::{park, unpark} implementation][45524]

- [Improved SliceExt::binary_search performance.][45333]

- [impl FromIterator<()> for ()][45379]

- [Copied AsciiExt trait methods to primitive types.][44042] Use of AsciiExt

is now deprecated.

Stabilized APIs

---------------

Cargo

-----

- [Cargo now supports uninstallation of multiple packages][cargo/4561]

eg. cargo uninstall foo bar uninstalls foo and bar.

- [Added unit test checking to cargo check][cargo/4592]

- [Cargo now lets you install a specific version

using cargo install --version][cargo/4637]

Misc

----

- [Releases now ship with the Cargo book documentation.][45692]

- [rustdoc now prints rendering warnings on every run.][45324]

Compatibility Notes

-------------------

- [Changes have been made to type equality to make it more correct,

in rare cases this could break some code.][45853] [Tracking issue for

further information][45852]

- [char::escape_debug now uses Unicode 10 over 9.][45571]

- [Upgraded Android SDK to 27, and NDK to r15c.][45580] This drops support for

Android 9, the minimum supported version is Android 14.

- [Bumped the minimum LLVM to 3.9][45326]

[44042]: https://github.com/rust-lang/rust/pull/44042

[44932]: https://github.com/rust-lang/rust/pull/44932

[45267]: https://github.com/rust-lang/rust/pull/45267

[45324]: https://github.com/rust-lang/rust/pull/45324

[45326]: https://github.com/rust-lang/rust/pull/45326

[45333]: https://github.com/rust-lang/rust/pull/45333

[45379]: https://github.com/rust-lang/rust/pull/45379

[45380]: https://github.com/rust-lang/rust/pull/45380

[45393]: https://github.com/rust-lang/rust/pull/45393

[45435]: https://github.com/rust-lang/rust/pull/45435

[45483]: https://github.com/rust-lang/rust/pull/45483

[45524]: https://github.com/rust-lang/rust/pull/45524

[45571]: https://github.com/rust-lang/rust/pull/45571

[45580]: https://github.com/rust-lang/rust/pull/45580

[45610]: https://github.com/rust-lang/rust/pull/45610

[45660]: https://github.com/rust-lang/rust/pull/45660

[45692]: https://github.com/rust-lang/rust/pull/45692

[45711]: https://github.com/rust-lang/rust/pull/45711

[45772]: https://github.com/rust-lang/rust/pull/45772

[45852]: https://github.com/rust-lang/rust/issues/45852

[45853]: https://github.com/rust-lang/rust/pull/45853

[45887]: https://github.com/rust-lang/rust/pull/45887

[45920]: https://github.com/rust-lang/rust/pull/45920

[cargo/4561]: https://github.com/rust-lang/cargo/pull/4561

[cargo/4592]: https://github.com/rust-lang/cargo/pull/4592

[cargo/4637]: https://github.com/rust-lang/cargo/pull/4637