Compiler
--------
-- [Stabilised the `-C link-self-contained=<yes|no>`][76158] Which tells `rustc` whether to link
- its own libraries or to rely on a external linker. (supported only on
- `windows-gnu`, `linux-musl`, and `wasi` platforms.)
+- [Stabilised the `-C link-self-contained=<yes|no>` compiler flag.][76158] This tells
+ `rustc` whether to link its own C runtime and libraries or to rely on a external
+ linker to find them. (Supported only on `windows-gnu`, `linux-musl`, and `wasi` platforms.)
- [You can now use `-C target-feature=+crt-static` on `linux-gnu` targets.][77386]
-- [Added tier 2\* support for `aarch64-unknown-linux-musl`.][76420]
+ Note: If you're using cargo you must explicitly pass the `--target` flag.
+- [Added tier 2\* support for `aarch64-unknown-linux-musl`.][76420]
\* Refer to Rust's [platform support page][forge-platform-support] for more
information on Rust's tiered platform support.
---------
- [`io::Write` is now implemented for `&ChildStdin` `&Sink`, `&Stdout`,
and `&Stderr`.][76275]
-- [All arrays now implement `TryFrom<Vec<T>>`.][76310]
+- [All arrays of any length now implement `TryFrom<Vec<T>>`.][76310]
- [The `matches!` macro now supports having a trailing comma.][74880]
- [`Vec<A>` now implements `PartialEq<[B]>` where `A: PartialEq<B>`.][74194]
-- [Nearly all of `Cell`'s panicking functions now use the `#[track_caller]`
- attribute.][77055]
+- [The `RefCell::{replace, replace_with, clone}` methods now all use `#[track_caller]`.][77055]
Stabilized APIs
---------------
Cargo
-----
-Misc
-----
-- [You can now link to different items in `rustdoc` using the intra-doc link
- syntax.][74430] E.g. ``/// Uses [`std::future`] `` will automatically generate
+Rustdoc
+-------
+- [You can now link to items in `rustdoc` using the intra-doc link
+ syntax.][74430] E.g. ``/// Uses [`std::future`]`` will automatically generate
a link to `std::future`'s documentation. See ["Linking to items by
name"][intradoc-links] for more information.
- [You can now specify `#[doc(alias = "<alias>")]` on items to add search aliases
when searching through `rustdoc`'s UI.][75740]
-- [You can now use `rustup install <major>.<minor>` to specify installing the
- latest availeble patch of that minor version of the toolchain.][76107] E.g.
- `rustup install 1.45` would install `1.45.2`, and `1.46` would install `1.46.0`.
Compatibility Notes
-------------------
-- [`const fn`s are now implicitly promoted to `const`.][75502] Meaning that it
- will only warn if your code fails `const` evaluation, and not produce an error.
+- [Promotion of references to `'static` lifetime inside `const fn` now follows the
+ same rules as inside a `fn` body.][75502] In particular, `&foo()` will not be
+ promoted to `'static` lifetime any more inside `const fn`s.
- [Associated type bindings on trait objects are now verified to meet the bounds
declared on the trait when checking that they implement the trait.][27675]
-- [When traits bounds on associated types or opaque types are ambiguous the
+- [When trait bounds on associated types or opaque types are ambiguous, the
compiler no longer makes an arbitrary choice on which bound to use.][54121]
-- [Fixed recursive nonterminals not being expended in macros during
+- [Fixed recursive nonterminals not being expanded in macros during
pretty-print/reparse check.][77153] This may cause errors if your macro wasn't
correctly handling recursive nonterminal tokens.
-- [`&mut` references to non zero-sized types are not longer promoted.][75585]
+- [`&mut` references to non zero-sized types are no longer promoted.][75585]
- [`rustc` will now warn if you use attributes like `#[link_name]` or `#[cold]`
in places where they have no effect.][73461]
- [Updated `_mm256_extract_epi8` and `_mm256_extract_epi16` signatures in
`arch::{x86, x86_64}` to return `i32` to match the vendor signatures.][73166]
-
+- [`mem::uninitialized` will now panic if any inner types inside a struct or enum
+ disallow zero-initialization.][71274]
+- [`#[target_feature]` will now error if used in a place where it has no effect.][78143]
+- [Foreign exceptions are now caught by `catch_unwind` and will cause an abort.][70212]
+ Note: This behaviour is not guaranteed and is still considered undefined behaviour,
+ see the [`catch_unwind`] documentation for further information.
+
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.
+
- [Building `rustc` from source now uses `ninja` by default over `make`.][74922]
You can continue building with `make` by setting `ninja=false` in
your `config.toml`.
+- [cg_llvm: `fewer_names` in `uncached_llvm_type`][76030]
+- [Made `ensure_sufficient_stack()` non-generic][76680]
+[78143]: https://github.com/rust-lang/rust/issues/78143
+[76680]: https://github.com/rust-lang/rust/pull/76680/
+[76030]: https://github.com/rust-lang/rust/pull/76030/
+[70212]: https://github.com/rust-lang/rust/pull/70212/
[27675]: https://github.com/rust-lang/rust/issues/27675/
-[54121]: https://github.com/rust-lang/rust/issues/54121/
+[54121]: https://github.com/rust-lang/rust/issues/54121/
+[71274]: https://github.com/rust-lang/rust/pull/71274/
[77386]: https://github.com/rust-lang/rust/pull/77386/
[77153]: https://github.com/rust-lang/rust/pull/77153/
[77055]: https://github.com/rust-lang/rust/pull/77055/
[76275]: https://github.com/rust-lang/rust/pull/76275/
[76310]: https://github.com/rust-lang/rust/pull/76310/
[76420]: https://github.com/rust-lang/rust/pull/76420/
-[76107]: https://github.com/rust-lang/rust/pull/76107/
[76158]: https://github.com/rust-lang/rust/pull/76158/
[75857]: https://github.com/rust-lang/rust/pull/75857/
[75585]: https://github.com/rust-lang/rust/pull/75585/
[73461]: https://github.com/rust-lang/rust/pull/73461/
[73166]: https://github.com/rust-lang/rust/pull/73166/
[intradoc-links]: https://doc.rust-lang.org/rustdoc/linking-to-items-by-name.html
+[`catch_unwind`]: https://doc.rust-lang.org/std/panic/fn.catch_unwind.html
[`Option::is_some`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.is_some
[`Option::is_none`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.is_none
[`Option::as_ref`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.as_ref
Internal Only
--------
+
- [Improved default settings for bootstrapping in `x.py`.][73964] You can read details about this change in the ["Changes to `x.py` defaults"](https://blog.rust-lang.org/inside-rust/2020/08/30/changes-to-x-py-defaults.html) post on the Inside Rust blog.
[1.47.0-cfg]: https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard