-
Notifications
You must be signed in to change notification settings - Fork 14k
Make explicit that TypeId's layout and size are unstable
#148394
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make explicit that TypeId's layout and size are unstable
#148394
Conversation
Or worded differently, explicitly remark non-stable-guarantee of `TypeId` layout and size.
|
let's wait for #148265 (comment) |
|
Happy to see this merge while we figure out if we want to commit some guarantees. |
|
Since we've changed the size in the past, and this text is explicitly not making a promise, I'm happy to merge this for now. We can always remove or change the text in the future as people and teams make further decisions. (In particular, if 148265 changes it even right after this merges, that's fine too.) @bors r+ rollup |
Rollup merge of #148394 - jieyouxu:remark-typeid-no-layout-guarantees, r=scottmcm Make explicit that `TypeId`'s layout and size are unstable Or worded differently, explicitly remark non-stable-guarantee of `TypeId` layout and size. This PR makes no *additional* guarantees or non-guarantees, it only emphasizes that `TypeId`'s size and layout are unstable like any other `#[repr(Rust)]` types. This was discussed during [#t-compiler/meetings > [weekly] 2025-10-30 @ 💬](https://rust-lang.zulipchat.com/#narrow/channel/238009-t-compiler.2Fmeetings/topic/.5Bweekly.5D.202025-10-30/near/547949347), where the compiler team discussed a request #148265 to have the standard library (and language) commit to `TypeId` guaranteeing a size upper bound of 16 bytes. In the meeting, the consensus was: - We were sympathetic to the use case discussed in the request PR, however we feel like this stability guarantee is premature, given that there are unresolved questions surrounding the intended purpose of `TypeId`, and concerns surrounding its collision-resistance properties #10389 and #129014. We would prefer not making any of such guarantee until the collision-resistance concerns are resolved. - Committing to a stability guarantee on the size upper bound now would close the door to making `TypeId` larger (even if unlikely for perf reasons). Given that we have previously broken people who asserted the size of `TypeId` is 8 bytes, it was also discussed in the meeting that we should *explicitly* note that the size and layout of `TypeId` is not a stable guarantee, and is subject to changes between Rust releases, and thus cannot be relied upon -- if breakage in people's code is due to that assumption, it will be considered a won't-fix. - So even if `#[repr(Rust)]` types have unstable size and layout, this PR makes it explicit for `TypeId` since this type can feel "special" and users can be lead into thinking its size and layout is something they can rely upon. r? `@scottmcm` (or libs/libs-api/lang)
Rollup of 3 pull requests Successful merges: - rust-lang/rust#146260 (add SliceIndex wrapper types Last and Clamp<Idx>) - rust-lang/rust#148394 (Make explicit that `TypeId`'s layout and size are unstable) - rust-lang/rust#148402 (stdarch subtree update) r? `@ghost` `@rustbot` modify labels: rollup
Or worded differently, explicitly remark non-stable-guarantee of
TypeIdlayout and size.This PR makes no additional guarantees or non-guarantees, it only emphasizes that
TypeId's size and layout are unstable like any other#[repr(Rust)]types.This was discussed during #t-compiler/meetings > [weekly] 2025-10-30 @ 💬, where the compiler team discussed a request #148265 to have the standard library (and language) commit to
TypeIdguaranteeing a size upper bound of 16 bytes. In the meeting, the consensus was:TypeId, and concerns surrounding its collision-resistance properties Collisions in type_id #10389 and type_id is not sufficiently collision-resistant #129014. We would prefer not making any of such guarantee until the collision-resistance concerns are resolved.TypeIdlarger (even if unlikely for perf reasons).Given that we have previously broken people who asserted the size of
TypeIdis 8 bytes, it was also discussed in the meeting that we should explicitly note that the size and layout ofTypeIdis not a stable guarantee, and is subject to changes between Rust releases, and thus cannot be relied upon -- if breakage in people's code is due to that assumption, it will be considered a won't-fix.#[repr(Rust)]types have unstable size and layout, this PR makes it explicit forTypeIdsince this type can feel "special" and users can be lead into thinking its size and layout is something they can rely upon.r? @scottmcm (or libs/libs-api/lang)