Find a file
bors 86d0aef804 Auto merge of #137944 - davidtwco:sized-hierarchy, r=oli-obk
Sized Hierarchy: Part I

This patch implements the non-const parts of rust-lang/rfcs#3729. It introduces two new traits to the standard library, `MetaSized` and `PointeeSized`. See the RFC for the rationale behind these traits and to discuss whether this change makes sense in the abstract.

These traits are unstable (as is their constness), so users cannot refer to them without opting-in to `feature(sized_hierarchy)`. These traits are not behind `cfg`s as this would make implementation unfeasible, there would simply be too many `cfg`s required to add the necessary bounds everywhere. So, like `Sized`, these traits are automatically implemented by the compiler.

RFC 3729 describes changes which are necessary to preserve backwards compatibility given the introduction of these traits, which are implemented and as follows:

- `?Sized` is rewritten as `MetaSized`
- `MetaSized` is added as a default supertrait for all traits w/out an explicit sizedness supertrait already.

There are no edition migrations implemented in this,  as these are primarily required for the constness parts of the RFC and prior to stabilisation of this (and so will come in follow-up PRs alongside the const parts). All diagnostic output should remain the same (showing `?Sized` even if the compiler sees `MetaSized`) unless the `sized_hierarchy` feature is enabled.

Due to the use of unstable extern types in the standard library and rustc, some bounds in both projects have had to be relaxed already - this is unfortunate but unavoidable so that these extern types can continue to be used where they were before. Performing these relaxations in the standard library and rustc are desirable longer-term anyway, but some bounds are not as relaxed as they ideally would be due to the inability to relax `Deref::Target` (this will be investigated separately).

It is hoped that this is implemented such that it could be merged and these traits could exist "under the hood" without that being observable to the user (other than in any performance impact this has on the compiler, etc). Some details might leak through due to the standard library relaxations, but this has not been observed in test output.

**Notes:**

- Any commits starting with "upstream:" can be ignored, as these correspond to other upstream PRs that this is based on which have yet to be merged.
- This best reviewed commit-by-commit. I've attempted to make the implementation easy to follow and keep similar changes and test output updates together.
  - Each commit has a short description describing its purpose.
  - This patch is large but it's primarily in the test suite.
- I've worked on the performance of this patch and a few optimisations are implemented so that the performance impact is neutral-to-minor.
- `PointeeSized` is a different name from the RFC just to make it more obvious that it is different from `std::ptr::Pointee` but all the names are yet to be bikeshed anyway.
- `@nikomatsakis` has confirmed [that this can proceed as an experiment from the t-lang side](https://rust-lang.zulipchat.com/#narrow/channel/435869-project-goals/topic/SVE.20and.20SME.20on.20AArch64.20.28goals.23270.29/near/506196491)
- FCP in https://github.com/rust-lang/rust/pull/137944#issuecomment-2912207485

Fixes rust-lang/rust#79409.

r? `@ghost` (I'll discuss this with relevant teams to find a reviewer)
2025-06-17 15:08:50 +00:00
.github Only run citool tests on the auto branch 2025-06-10 08:00:13 +02:00
compiler Auto merge of #137944 - davidtwco:sized-hierarchy, r=oli-obk 2025-06-17 15:08:50 +00:00
library Auto merge of #137944 - davidtwco:sized-hierarchy, r=oli-obk 2025-06-17 15:08:50 +00:00
LICENSES Synchronize Unicode license text from unicode.org 2024-11-20 00:54:12 -08:00
src Auto merge of #137944 - davidtwco:sized-hierarchy, r=oli-obk 2025-06-17 15:08:50 +00:00
tests Auto merge of #137944 - davidtwco:sized-hierarchy, r=oli-obk 2025-06-17 15:08:50 +00:00
.clang-format Add .clang-format 2024-06-26 05:56:00 +08:00
.editorconfig Don't apply editorconfig to llvm 2025-02-09 16:21:14 -05:00
.git-blame-ignore-revs git: ignore 60600a6fa4 for blame purposes 2025-04-17 11:50:24 +08:00
.gitattributes Mark .pp files as Rust 2025-03-29 12:39:06 +01:00
.gitignore change config.toml to bootstrap.toml for bootstrap module 2025-03-17 12:56:41 +05:30
.gitmodules Lowercase git url for rust-lang/enzyme.git 2025-05-15 21:37:49 +00:00
.ignore change config.toml to bootstrap.toml for bootstrap module 2025-03-17 12:56:41 +05:30
.mailmap Add some missing mailmap entries 2025-06-13 17:51:27 +00:00
bootstrap.example.toml Rename tool-config to tool and add docs 2025-06-12 13:58:38 +02:00
Cargo.lock Uplift BoundVarReplacer 2025-06-13 17:54:45 +00:00
Cargo.toml move test-float-parse tool into src/tools dir 2025-06-03 11:05:51 +03:00
CODE_OF_CONDUCT.md Remove the code of conduct; instead link https://www.rust-lang.org/conduct.html 2019-10-05 22:55:19 +02:00
configure Ensure ./configure works when configure.py path contains spaces 2024-02-16 18:57:22 +00:00
CONTRIBUTING.md Improve CONTRIBUTING.md grammar and clarity 2025-05-23 23:03:06 +02:00
COPYRIGHT dist: Re-work how we describe the licence of Rust in our distributions 2024-12-09 10:18:55 +00:00
INSTALL.md mention about x.py setup in INSTALL.md 2025-04-24 09:15:53 +03:00
LICENSE-APACHE Remove appendix from LICENCE-APACHE 2019-12-30 14:25:53 +00:00
license-metadata.json Update license metadata 2025-02-15 16:48:37 +01:00
LICENSE-MIT dist: Re-work how we describe the licence of Rust in our distributions 2024-12-09 10:18:55 +00:00
README.md Update Rust Foundation links in Readme 2025-03-16 19:03:40 -07:00
RELEASES.md Rollup merge of #140879 - pthariensflame:patch-1, r=pietroalbini 2025-05-10 16:26:04 +02:00
REUSE.toml change config.toml to bootstrap.toml for bootstrap module 2025-03-17 12:56:41 +05:30
rust-bors.toml Increase timeout for new bors try builds 2025-05-30 15:59:14 +02:00
rustfmt.toml Do not run rustfmt on the compiler-builtins subtree 2025-05-18 15:42:35 +00:00
triagebot.toml Rollup merge of #142408 - WaffleLapkin:rotates-itself, r=WaffleLapkin 2025-06-12 22:09:45 +02:00
x Look for python3 first on MacOS, not py 2025-02-13 10:24:54 -05:00
x.ps1 use & instead of start-process in x.ps1 2023-12-09 09:46:16 -05:00
x.py Reformat Python code with ruff 2024-12-04 23:03:44 +01:00

This is the main source code repository for Rust. It contains the compiler, standard library, and documentation.

Why Rust?

  • Performance: Fast and memory-efficient, suitable for critical services, embedded devices, and easily integrated with other languages.

  • Reliability: Our rich type system and ownership model ensure memory and thread safety, reducing bugs at compile-time.

  • Productivity: Comprehensive documentation, a compiler committed to providing great diagnostics, and advanced tooling including package manager and build tool (Cargo), auto-formatter (rustfmt), linter (Clippy) and editor support (rust-analyzer).

Quick Start

Read "Installation" from The Book.

Installing from Source

If you really want to install from source (though this is not recommended), see INSTALL.md.

Getting Help

See https://www.rust-lang.org/community for a list of chat platforms and forums.

Contributing

See CONTRIBUTING.md.

License

Rust is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.

Trademark

The Rust Foundation owns and protects the Rust and Cargo trademarks and logos (the "Rust Trademarks").

If you want to use these names or brands, please read the Rust language trademark policy.

Third-party logos may be subject to third-party copyrights and trademarks. See Licenses for details.