Rust considers richer type-size hierarchy in RFC 3729 update
Rust’s proposed Sized hierarchy could stop forcing slices, trait objects, and str into the same bucket, unlocking cleaner generic APIs.

A crate author writing one generic API for both fixed-size values and DSTs like slices or trait objects still has to fight Rust’s hard split between Sized and unsized types. RFC 3729 is trying to soften that split, and the payoff is bigger than compiler theory: cleaner abstractions for references, trait objects, str, and the awkward edge cases that keep forcing separate code paths today.
The proposal, discussed in LWN.net’s April 22 report and tracked in rust-lang/rust issue 144404, would replace the current all-or-nothing model with a richer hierarchy of size traits. Rust’s reference still describes the baseline clearly: slices, trait objects, and str are dynamically sized types, while pointers to them remain sized because they carry metadata such as lengths or vtables. RFC 3729 says that distinction is too coarse for some real-world APIs, especially when library authors need to express that a type’s size is known under one set of circumstances but not another.
That matters in practice because Rust’s current model often forces awkward workarounds. If an API wants to be generic over borrowed data, it can end up split into multiple impls, helper wrappers, or trait bounds that say more about the language’s limits than about the data itself. A richer hierarchy could let the compiler understand more precisely what a type promises, which should make it easier to write generic libraries without losing the safety guarantees that brought people to Rust in the first place.
The work is no longer just a design sketch. The tracking issue says the experimental implementation uses the feature gate sized_hierarchy, was approved for experimentation on Zulip, and is part of the Rust project’s Scalable Vectors goal for 2025h1 and 2025h2. It is being worked on by lqd and davidtwco, and the language team discussed it in meetings on 2024-11-13, 2025-02-05, 2026-03-18, and 2026-03-25.

The unstable Rust book already describes sized_hierarchy as introducing a hierarchy of Sized traits under RFC 3729, which is a strong signal that the idea has moved from abstract debate into active compiler work. That shift also lines up with broader language discussion inside Rust Internals. A November 21, 2024 post argued that ?Sized may be too blunt for future features like extern types and thin DSTs, while a March 2026 pre-RFC on thin pointers proposed a ValueSized concept so the compiler can distinguish between types whose size can be learned by reading the value and types whose size is unknowable.
That is why RFC 3729 matters beyond compiler internals. If Rust stops treating sized versus unsized as a single binary switch, crate authors get more expressive APIs, advanced users get fewer contortions around metadata and references, and the language gets a better model for the messy parts of systems programming without giving up its usual rigor.
Know something we missed? Have a correction or additional information?
Submit a Tip

