Skip to content
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

Use compile-time assertions to deny ZSTy DSTs #1154

Merged
merged 1 commit into from
May 1, 2024
Merged

Use compile-time assertions to deny ZSTy DSTs #1154

merged 1 commit into from
May 1, 2024

Conversation

jswrenn
Copy link
Collaborator

@jswrenn jswrenn commented Apr 30, 2024

Presently, we deny ZSTy DSTs in our APIs via panicking at runtime. However, the ZSTiness of a DST is statically detectable and can be denied instead at compile time. This PR replaces our ZSTy DST panics with compile-time assertions. Doing gives us the freedom later provide meaningful runtime semantics in such cases.

Partially addresses #325
Closes #1149

src/util.rs Outdated
Comment on lines 597 to 607
const DST_IS_NOT_ZST: bool = {
assert!(!Self::DST_IS_ZST);
!Self::DST_IS_ZST
};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn't we just do this based on the existing KnownLayout::LAYOUT const rather than introducing new machinery in KnownLayout?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@jswrenn jswrenn force-pushed the zesty branch 3 times, most recently from 024c37a to e4c0450 Compare May 1, 2024 16:12
@jswrenn jswrenn marked this pull request as ready for review May 1, 2024 16:13
@jswrenn jswrenn enabled auto-merge May 1, 2024 16:14
@jswrenn jswrenn requested a review from joshlf May 1, 2024 16:14
@jswrenn jswrenn changed the title Emit postmonomorphization errors when DST is a ZST Use compile-time assertions to deny ZSTy DSTs May 1, 2024
@jswrenn jswrenn force-pushed the zesty branch 2 times, most recently from 0b22ac7 to d3c2576 Compare May 1, 2024 16:56
@jswrenn jswrenn disabled auto-merge May 1, 2024 16:56
///
/// # Compile-Time Assertions
///
/// This method cannot yet be used on unsized types whose dynamically-sized
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// This method cannot yet be used on unsized types whose dynamically-sized
/// This method cannot be used on unsized types whose dynamically-sized

IMO we shouldn't imply that we'll lift this restriction in the future. We might, but it's not guaranteed, and it's also pointless cognitive burden for users to think about our long-term plans when there's no specific timeline and so there's no meaningful difference between "you can't yet" and "you can't."

Same elsewhere in this PR.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't want folks relying on this function as a compile-time assert on DST ZSTiness so the "yet" is load-bearing.

@joshlf joshlf added this pull request to the merge queue May 1, 2024
@joshlf joshlf removed this pull request from the merge queue due to a manual request May 1, 2024
Presently, we deny ZSTy DSTs in our APIs via panicking at runtime. However, the
ZSTiness of a DST is statically detectable and can be denied instead at compile
time. This PR replaces our ZSTy DST panics with compile-time assertions. Doing
gives us the freedom later provide meaningful runtime semantics in such cases.

Partially addresses #325
Closes #1149
@joshlf joshlf enabled auto-merge May 1, 2024 18:09
@joshlf joshlf added this pull request to the merge queue May 1, 2024
Merged via the queue into main with commit fb51cad May 1, 2024
210 checks passed
@joshlf joshlf deleted the zesty branch May 1, 2024 18:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Consider compiler-erroring instead of panicking in DST APIs
2 participants