Rust 1.24.0
Language
- External
sysv64
ffi is now available. eg.extern "sysv64" fn foo () {}
Compiler
- rustc now uses 16 codegen units by default for release builds. For the fastest builds, utilize
codegen-units=1
. - Added
armv4t-unknown-linux-gnueabi
target. - Add
aarch64-unknown-openbsd
support
Libraries
str::find::<char>
now uses memchr. This should lead to a 10x improvement in performance in the majority of cases.OsStr
'sDebug
implementation is now lossless and consistent with Windows.time::{SystemTime, Instant}
now implementHash
.- impl
From<bool>
forAtomicBool
- impl
From<{CString, &CStr}>
for{Arc<CStr>, Rc<CStr>}
- impl
From<{OsString, &OsStr}>
for{Arc<OsStr>, Rc<OsStr>}
- impl
From<{PathBuf, &Path}>
for{Arc<Path>, Rc<Path>}
- float::from_bits now just uses transmute. This provides some optimisations from LLVM.
- Copied
AsciiExt
methods ontochar
- Remove
T: Sized
requirement onptr::is_null()
- impl
From<RecvError>
for{TryRecvError, RecvTimeoutError}
- Optimised
f32::{min, max}
to generate more efficient x86 assembly [u8]::contains
now uses memchr which provides a 3x speed improvement
Stabilized APIs
The following functions can now be used in a constant expression. eg. let buffer: [u8; size_of::<usize>()];
, static COUNTER: AtomicUsize = AtomicUsize::new(1);
AtomicBool::new
AtomicUsize::new
AtomicIsize::new
AtomicPtr::new
Cell::new
{integer}::min_value
{integer}::max_value
mem::size_of
mem::align_of
ptr::null
ptr::null_mut
RefCell::new
UnsafeCell::new
Cargo
- Added a
workspace.default-members
config that overrides implied--all
in virtual workspaces. - Enable incremental by default on development builds. Also added configuration keys to
Cargo.toml
and.cargo/config
to disable on a per-project or global basis respectively.
Misc
Compatibility Notes
- Floating point types
Debug
impl now always prints a decimal point. Ipv6Addr
now rejects superfluous::
's in IPv6 addresses This is in accordance with IETF RFC 4291 §2.2.- Unwinding will no longer go past FFI boundaries, and will instead abort.
Formatter::flags
method is now deprecated. Thesign_plus
,sign_minus
,alternate
, andsign_aware_zero_pad
should be used instead.- Leading zeros in tuple struct members is now an error
column!()
macro is one-based instead of zero-basedfmt::Arguments
can no longer be shared across threads- Access to
#[repr(packed)]
struct fields is now unsafe - Cargo sets a different working directory for the compiler