Language
- The
#![no_std]
attribute causes a crate to not be linked to the standard library, but only the core library, as described in RFC 1184. The core library defines common types and traits but has no platform dependencies whatsoever, and is the basis for Rust software in environments that cannot support a full port of the standard library, such as operating systems. Most of the core library is now stable.
Libraries
- Stabilized APIs:
Read::read_exact
,ErrorKind::UnexpectedEof
(renamed fromUnexpectedEOF
),fs::DirBuilder
,fs::DirBuilder::new
,fs::DirBuilder::recursive
,fs::DirBuilder::create
,os::unix::fs::DirBuilderExt
,os::unix::fs::DirBuilderExt::mode
,vec::Drain
,vec::Vec::drain
,string::Drain
,string::String::drain
,vec_deque::Drain
,vec_deque::VecDeque::drain
,collections::hash_map::Drain
,collections::hash_map::HashMap::drain
,collections::hash_set::Drain
,collections::hash_set::HashSet::drain
,collections::binary_heap::Drain
,collections::binary_heap::BinaryHeap::drain
,Vec::extend_from_slice
(renamed frompush_all
),Mutex::get_mut
,Mutex::into_inner
,RwLock::get_mut
,RwLock::into_inner
,Iterator::min_by_key
(renamed frommin_by
),Iterator::max_by_key
(renamed frommax_by
). - The core library is stable, as are most of its APIs.
- The
assert_eq!
macro supports arguments that don't implementSized
, such as arrays. In this way it behaves more likeassert!
. - Several timer functions that take duration in milliseconds are deprecated in favor of those that take
Duration
. These includeCondvar::wait_timeout_ms
,thread::sleep_ms
, andthread::park_timeout_ms
. - The algorithm by which
Vec
reserves additional elements was tweaked to not allocate excessive space while still growing exponentially. From
conversions are implemented from integers to floats in cases where the conversion is lossless. Thus they are not implemented for 32-bit ints tof32
, nor for 64-bit ints tof32
orf64
. They are also not implemented forisize
andusize
because the implementations would be platform-specific.From
is also implemented fromf32
tof64
.From<&Path>
andFrom<PathBuf>
are implemented forCow<Path>
.From<T>
is implemented forBox<T>
,Rc<T>
andArc<T>
.IntoIterator
is implemented for&PathBuf
and&Path
.BinaryHeap
was refactored for modest performance improvements.- Sorting slices that are already sorted is 50% faster in some cases.
Cargo
- Cargo will look in
$CARGO_HOME/bin
for subcommands by default. - Cargo build scripts can specify their dependencies by emitting the
rerun-if-changed
key. - crates.io will reject publication of crates with dependencies that have a wildcard version constraint. Crates with wildcard dependencies were seen to cause a variety of problems, as described in RFC 1241. Since 1.5 publication of such crates has emitted a warning.
cargo clean
accepts a--release
flag to clean the release folder. A variety of artifacts that Cargo failed to clean are now correctly deleted.
Misc
- The
unreachable_code
lint warns when a function call's argument diverges. - The parser indicates failures that may be caused by confusingly-similar Unicode characters
- Certain macro errors are reported at definition time, not expansion.
Compatibility Notes
- The compiler no longer makes use of the
RUST_PATH
environment variable when locating crates. This was a pre-cargo feature for integrating with the package manager that was accidentally never removed. - A number of bugs were fixed in the privacy checker that could cause previously-accepted code to break.
- Modules and unit/tuple structs may not share the same name.
- Bugs in pattern matching unit structs were fixed. The tuple struct pattern syntax (
Foo(..)
) can no longer be used to match unit structs. This is a warning now, but will become an error in future releases. Patterns that share the same name as a const are now an error. - A bug was fixed that causes rustc not to apply default type parameters when resolving certain method implementations of traits defined in other crates.