Rust versions / 1.44
Rust release · Jun 4, 2020
Rust 1.44: what's new, what was stabilized
Short answerRust 1.44 was released on Jun 4, 2020: 12 newly stable APIs (PathBuf::with_capacity, PathBuf::capacity, PathBuf::clear, PathBuf::reserve, ...); 6 compatibility notes that can affect existing code. Point release: 1.44.1 (Jun 18, 2020).
← Rust 1.43All versionsRust 1.45 →
12 APIs stabilized
PathBuf::with_capacity, PathBuf::capacity, PathBuf::clear, PathBuf::reserve, PathBuf::reserve_exact, PathBuf::shrink_to_fit, f32::to_int_unchecked, f64::to_int_unchecked, Layout::align_to, Layout::pad_to_align, Layout::array, Layout::extend
Can it break my build?
The release lists these compatibility notes. Most only affect rare code, but read them before you raise your toolchain in CI:
- [Rustc now correctly generates static libraries on Windows GNU targets with
- [Removed the
-C no_integrated_asflag from rustc.][70345] - [The
file_nameproperty in JSON output of macro errors now points the actual - [The minimum required external LLVM version has been bumped to LLVM 8.][71147]
- [
mem::{zeroed, uninitialised}will now panic when used with types that do - [In 1.45.0 (the next release) converting a
f64tou32using theas
Use it
rustup update stable # get the newest release
rustup install 1.44 # or exactly this one
rustup override set 1.44 # pin a project to itTo require at least this version from users of your crate, set rust-version = "1.44" under [package] in Cargo.toml. Cargo then refuses to build it on older compilers with a clear message, and with resolver 3 (the default on the 2024 edition, Rust 1.85+) it also prefers dependency versions that support it.
Full release notes
Language
- [You can now use
async/.awaitwith#[no_std]enabled.][69033] - [Added the
unused_braceslint.][70081]
**Syntax-only changes**
- [Expansion-driven outline module parsing][69838]
#[cfg(FALSE)]
mod foo {
mod bar {
mod baz; // `foo/bar/baz.rs` doesn't exist, but no error!
}
}
These are still rejected semantically, so you will likely receive an error but these changes can be seen and parsed by macros and conditional compilation.
Compiler
- [Rustc now respects the
-C codegen-unitsflag in incremental mode.][70156] Additionally when in incremental mode rustc defaults to 256 codegen units. - [Refactored
catch_unwindto have zero-cost, unless unwinding is enabled and a panic is thrown.][67502] - [Added tier 3\* support for the
aarch64-unknown-noneandaarch64-unknown-none-softfloattargets.][68334] - [Added tier 3 support for
arm64-apple-tvosandx86_64-apple-tvostargets.][68191]
Libraries
- [Special cased
vec![]to map directly toVec::new().][70632] This allowsvec![]to be able to be used inconstcontexts. - [
convert::Infalliblenow implementsHash.][70281] - [
OsStringnow implementsDerefMutandIndexMutreturning a&mut OsStr.][70048] - [Unicode 13 is now supported.][69929]
- [
Stringnow implementsFrom<&mut str>.][69661] - [
IoSlicenow implementsCopy.][69403] - [
Vec<T>now implementsFrom<[T; N]>.][68692] WhereNis at most 32. - [
proc_macro::LexErrornow implementsfmt::DisplayandError.][68899] - [
from_le_bytes,to_le_bytes,from_be_bytes,to_be_bytes,from_ne_bytes, andto_ne_bytesmethods are nowconstfor all integer types.][69373]
Stabilized APIs
- [
PathBuf::with_capacity] - [
PathBuf::capacity] - [
PathBuf::clear] - [
PathBuf::reserve] - [
PathBuf::reserve_exact] - [
PathBuf::shrink_to_fit] - [
f32::to_int_unchecked] - [
f64::to_int_unchecked] - [
Layout::align_to] - [
Layout::pad_to_align] - [
Layout::array] - [
Layout::extend]
Cargo
- [Added the
cargo treecommand which will print a tree graph of your dependencies.][cargo/8062] E.g. ``mdbook v0.3.2 (/Users/src/rust/mdbook) ├── ammonia v3.0.0 │ ├── html5ever v0.24.0 │ │ ├── log v0.4.8 │ │ │ └── cfg-if v0.1.9 │ │ ├── mac v0.1.1 │ │ └── markup5ever v0.9.0 │ │ ├── log v0.4.8 (*) │ │ ├── phf v0.7.24 │ │ │ └── phf_shared v0.7.24 │ │ │ ├── siphasher v0.2.3 │ │ │ └── unicase v1.4.2 │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5 ...`You can also display dependencies on multiple versions of the same crate withcargo tree -d(short forcargo tree --duplicates`).
Misc
- [Rustdoc now allows you to specify
--crate-versionto have rustdoc include the version in the sidebar.][69494]
Compatibility Notes
- [Rustc now correctly generates static libraries on Windows GNU targets with the
.aextension, rather than the previous.lib.][70937] - [Removed the
-C no_integrated_asflag from rustc.][70345] - [The
file_nameproperty in JSON output of macro errors now points the actual source file rather than the previous format of<NAME macros>.][70969] **Note:** this may not point to a file that actually exists on the user's system. - [The minimum required external LLVM version has been bumped to LLVM 8.][71147]
- [
mem::{zeroed, uninitialised}will now panic when used with types that do not allow zero initialization such asNonZeroU8.][66059] This was previously a warning. - [In 1.45.0 (the next release) converting a
f64tou32using theasoperator has been defined as a saturating operation.][71269] This was previously undefined behaviour, but you can use the{f64, f32}::to_int_uncheckedmethods to continue using the current behaviour, which may be desirable in rare performance sensitive situations.
Internal Only
These changes provide no direct user facing benefits, but represent significant improvements to the internals and overall performance of rustc and related tools.
- dep_graph Avoid allocating a set on when the number reads are small.
- Replace big JS dict with JSON parsing.
1.44.1 (Jun 18, 2020)
Release notes from the Rust project's RELEASES.md (MIT or Apache-2.0); summaries above are ours.
Up next
Next releaseRust 1.45Released Jul 16, 2020.Read it next →Also worth your time
Did this answer your question?