-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
Description
This is a tracking issue for work on Field Projections.
The feature gate for the issue is #![feature(field_projections)].
This is a lang experiment at the moment and the feature is subject to change substantially over time.
We have an active project goal for this effort: rust-lang/rust-project-goals#390
About tracking issues
Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.
Discussion comments will get marked as off-topic or deleted.
Repeated discussions on the tracking issue may lead to the tracking issue getting locked.
Steps
-
Approve as lang experiment
- We accepted this experiment in the 2025-08-13 lang design meeting.
-
a-mir-formality: create a formal model of the borrow checker changes- familiarization & experimentation
- add our traits to the model
- do small experiments using the traits from the borrow checker
- wait for Niko's new expression based syntax
- Copy traits to new syntax
- Integrate
HasPlacewith place expressions and projections - Integrate
PlaceReadinto the borrow checker (forCopytargets only) - Integrate
PlaceWrite,PlaceDrop,DropHuskandPlaceRead(also for!Copy) into the borrow checker - Integrate
PlaceBorrowinto the borrow checker - Refine & Explore Model
- Comprehensive test-suite
- Ensure functionality of common patterns
- Author document for explaining the model
- familiarization & experimentation
-
Implementation: implement a compiler experiment
- add field reflection via field representing types (FRTs)
- add FRTs &
Fieldtrait: add field representing types #152730 - fix privacy violation add field representing types #152730 (comment)
- fix compiler hang Compiler hang due to field-representing types defining a struct in terms of itself. #153256
- support unsized base types (but only sized fields)
- support for unions & enums via extra trait
- figure out packed structs: direct support vs
Unaligned<T> - add
field_of!in expression position to improve ergonomics (reducing need for turbofish) - figure out if we actually want & need FRTs for projections
- add FRTs &
- Add operation and projection traits to
core - add manual projection desugaring macros
- syntax (require
unsafeto access) - borrow checker integration
- depends on
a-mir-formalitymodel
- depends on
- relax
unsaferequirement on syntax
- add field reflection via field representing types (FRTs)
-
Experimentation: stress-test the experiment in real code
- Linux Kernel
- replace Gary's pointer projection infrastructure
-
Untrusted<T> -
SeqLockRef<'_, T> -
MutexGuard<'_ ,T> -
Mutex<T>->Rcu<U> -
Arc<T> -
Box<T> -
ArcBorrow<'_, T>
- Standard Library
-
MappedMutexGuard<'_, T> -
UnsafeCell<T> -
Cell<T> -
ManuallyDrop<T> -
MaybeUninit<T> -
*const T&*mut T -
NonNull<T> -
Box<T> -
Arc<T> -
Rc<T> -
&[mut] T - coordinate with t-libs-api on the creation of:
-
ArcRef<T>&UniqueArcRef<T> -
ArcBorrow<'_, T> -
ArcBox<T>(?) -
WrappingPtr<T> -
MutexGuardRef<'_, T> -
MutexRef<'_, T> -
Own<'_, T>(aka&own T)
-
-
ArcRef<T>&UniqueArcRef<T> -
ArcBorrow<'_, T> -
ArcBox<T>(?) -
WrappingPtr<T> -
cell::Ref[Mut]<'_, T> -
MutexGuardRef<'_, T> -
MutexRef<'_, T> -
{btree_map,hash_map}::Entry@joshtriplett
-
-
pyo3@davidhewitt-
PyRef[Mut]<'_, T>
-
-
crubit@tmandry
- Linux Kernel
Unresolved Questions
- Should FRTs be provably (un)inhabited?
Making them inhabited would allow APIs to take their value to reduce the amount of turbo-fish syntax in codemy_fun(field_of!(Struct, field))instead ofmy_fun::<field_of!(Struct, field)>(). There currently is no known advantage for provably uninhabited FRTs.- Resolved: they should be inhabited ZSTs to allow reducing the amount of turbofish syntax required to use them.
Implementation history
Metadata
Metadata
Assignees
Labels
Type
Fields
Give feedbackProjects
Status