- ~1200 changes, numerous bugfixes
Highlights
- Windows builds targeting the 64-bit MSVC ABI and linker (instead of GNU) are now supported and recommended for use.
Breaking Changes
- Several changes have been made to fix type soundness and improve the behavior of associated types. See RFC 1214. Although we have mostly introduced these changes as warnings this release, to become errors next release, there are still some scenarios that will see immediate breakage.
- The
str::lines
andBufRead::lines
iterators treat\r\n
as line breaks in addition to\n
. - Loans of
'static
lifetime extend to the end of a function. str::parse
no longer introduces avoidable rounding error when parsing floating point numbers. Together with earlier changes to float formatting/output, "round trips" like f.to_string().parse() now preserve the value of f exactly. Additionally, leading plus signs are now accepted.
Language
use
statements that import multiple items can now rename them, as inuse foo::{bar as kitten, baz as puppy}
.- Binops work correctly on fat pointers.
pub extern crate
, which does not behave as expected, issues a warning until a better solution is found.
Libraries
- Many APIs were stabilized:
<Box<str>>::into_string
,Arc::downgrade
,Arc::get_mut
,Arc::make_mut
,Arc::try_unwrap
,Box::from_raw
,Box::into_raw
,CStr::to_str
,CStr::to_string_lossy
,CString::from_raw
,CString::into_raw
,IntoRawFd::into_raw_fd
,IntoRawFd
,IntoRawHandle::into_raw_handle
,IntoRawHandle
,IntoRawSocket::into_raw_socket
,IntoRawSocket
,Rc::downgrade
,Rc::get_mut
,Rc::make_mut
,Rc::try_unwrap
,Result::expect
,String::into_boxed_str
,TcpStream::read_timeout
,TcpStream::set_read_timeout
,TcpStream::set_write_timeout
,TcpStream::write_timeout
,UdpSocket::read_timeout
,UdpSocket::set_read_timeout
,UdpSocket::set_write_timeout
,UdpSocket::write_timeout
,Vec::append
,Vec::split_off
,VecDeque::append
,VecDeque::retain
,VecDeque::split_off
,rc::Weak::upgrade
,rc::Weak
,slice::Iter::as_slice
,slice::IterMut::into_slice
,str::CharIndices::as_str
,str::Chars::as_str
,str::split_at_mut
,str::split_at
,sync::Weak::upgrade
,sync::Weak
,thread::park_timeout
,thread::sleep
. - Some APIs were deprecated:
BTreeMap::with_b
,BTreeSet::with_b
,Option::as_mut_slice
,Option::as_slice
,Result::as_mut_slice
,Result::as_slice
,f32::from_str_radix
,f64::from_str_radix
. - Reverse-searching strings is faster with the 'two-way' algorithm.
std::io::copy
allows?Sized
arguments.- The
Windows
,Chunks
, andChunksMut
iterators over slices all overridecount
,nth
andlast
with an O(1) implementation. Default
is implemented for arrays up to[T; 32]
.IntoRawFd
has been added to the Unix-specific prelude,IntoRawSocket
andIntoRawHandle
to the Windows-specific prelude.Extend<String>
andFromIterator<String
are both implemented forString
.IntoIterator
is implemented for references toOption
andResult
.HashMap
andHashSet
implementExtend<&T>
whereT: Copy
as part of RFC 839. This will cause type inference breakage in rare situations.BinaryHeap
implementsDebug
.Borrow
andBorrowMut
are implemented for fixed-size arrays.extern fn
s with the "Rust" and "C" ABIs implement common traits includingEq
,Ord
,Debug
,Hash
.- String comparison is faster.
&mut T
whereT: std::fmt::Write
also implementsstd::fmt::Write
.- A stable regression in
VecDeque::push_back
and other capacity-altering methods that caused panics for zero-sized types was fixed. - Function pointers implement traits for up to 12 parameters.
Miscellaneous
- The compiler no longer uses the 'morestack' feature to prevent stack overflow. Instead it uses guard pages and stack probes (though stack probes are not yet implemented on any platform but Windows).
- The compiler matches traits faster when projections are involved.
- The 'improper_ctypes' lint no longer warns about use of
isize
andusize
. - Cargo now displays useful information about what its doing during
cargo update
.