Rust 1.23.0
Language
- Arbitrary
auto
traits are now permitted in trait objects. - rustc now uses subtyping on the left hand side of binary operations. Which should fix some confusing errors in some operations.
Compiler
- Enabled
TrapUnreachable
in LLVM which should mitigate the impact of undefined behavior. - rustc now suggests renaming import if names clash.
- Display errors/warnings correctly when there are zero-width or wide characters.
- rustc now avoids unnecessary copies of arguments that are simple bindings This should improve memory usage on average by 5-10%.
- Updated musl used to build musl rustc to 1.1.17
Libraries
- Allow a trailing comma in
assert_eq/ne
macro - Implement Hash for raw pointers to unsized types
- impl
From<*mut T>
forAtomicPtr<T>
- impl
From<usize/isize>
forAtomicUsize/AtomicIsize
. - Removed the
T: Sync
requirement forRwLock<T>: Send
- Removed
T: Sized
requirement for{<*const T>, <*mut T>}::as_ref
and<*mut T>::as_mut
- Optimized
Thread::{park, unpark}
implementation - Improved
SliceExt::binary_search
performance. - impl
FromIterator<()>
for()
- Copied
AsciiExt
trait methods to primitive types. Use ofAsciiExt
is now deprecated.
Stabilized APIs
Cargo
- Cargo now supports uninstallation of multiple packages eg.
cargo uninstall foo bar
uninstallsfoo
andbar
. - Added unit test checking to
cargo check
- Cargo now lets you install a specific version using
cargo install --version
Misc
- Releases now ship with the Cargo book documentation.
- rustdoc now prints rendering warnings on every run.
Compatibility Notes
- Changes have been made to type equality to make it more correct, in rare cases this could break some code. Tracking issue for further information
char::escape_debug
now uses Unicode 10 over 9.- Upgraded Android SDK to 27, and NDK to r15c. This drops support for Android 9, the minimum supported version is Android 14.
- Bumped the minimum LLVM to 3.9