Skip to content

transmutability: remove NFA intermediate representation #139990

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

Merged
merged 1 commit into from
Apr 21, 2025

Conversation

jswrenn
Copy link
Member

@jswrenn jswrenn commented Apr 17, 2025

Prior to this commit, the transmutability analysis used an intermediate NFA representation of type layout. We then determinized this representation into a DFA, upon which we ran the core transmutability analysis. Unfortunately, determinizing NFAs is expensive. In this commit, we avoid NFAs entirely by observing that Rust unions are the only source of nondeterminism and that it is comparatively cheap to compute the DFA union of DFAs.

We also implement Graphviz DOT debug formatting of DFAs.

Fixes rust-lang/project-safe-transmute#23
Fixes rust-lang/project-safe-transmute#24

r? @compiler-errors

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Apr 17, 2025
@jswrenn jswrenn force-pushed the no-nfas branch 2 times, most recently from 0548619 to 0fec408 Compare April 17, 2025 23:15
Prior to this commit, the transmutability analysis used an intermediate
NFA representation of type layout. We then determinized this
representation into a DFA, upon which we ran the core transmutability
analysis. Unfortunately, determinizing NFAs is expensive. In this
commit, we avoid NFAs entirely by observing that Rust `union`s are the
only source of nondeterminism and that it is comparatively cheap to
compute the DFA union of DFAs.

We also implement Graphviz DOT debug formatting of DFAs.

Fixes rust-lang/project-safe-transmute#23
Fixes rust-lang/project-safe-transmute#24
@tmiasko
Copy link
Contributor

tmiasko commented Apr 20, 2025

Thanks.

r? tmiasko @bors r+ rollup

@bors
Copy link
Collaborator

bors commented Apr 20, 2025

📌 Commit 957b548 has been approved by tmiasko

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Apr 20, 2025
ChrisDenton added a commit to ChrisDenton/rust that referenced this pull request Apr 20, 2025
transmutability: remove NFA intermediate representation

Prior to this commit, the transmutability analysis used an intermediate NFA representation of type layout. We then determinized this representation into a DFA, upon which we ran the core transmutability analysis. Unfortunately, determinizing NFAs is expensive. In this commit, we avoid NFAs entirely by observing that Rust `union`s are the only source of nondeterminism and that it is comparatively cheap to compute the DFA union of DFAs.

We also implement Graphviz DOT debug formatting of DFAs.

Fixes rust-lang/project-safe-transmute#23
Fixes rust-lang/project-safe-transmute#24

r? `@compiler-errors`
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 20, 2025
…enton

Rollup of 3 pull requests

Successful merges:

 - rust-lang#139990 (transmutability: remove NFA intermediate representation)
 - rust-lang#140044 (rustc-dev-guide subtree update)
 - rust-lang#140051 (Switch exploit mitigations to mdbook footnotes)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 20, 2025
…enton

Rollup of 5 pull requests

Successful merges:

 - rust-lang#137953 (simd intrinsics with mask: accept unsigned integer masks, and fix some of the errors)
 - rust-lang#139990 (transmutability: remove NFA intermediate representation)
 - rust-lang#140044 (rustc-dev-guide subtree update)
 - rust-lang#140051 (Switch exploit mitigations to mdbook footnotes)
 - rust-lang#140054 (docs: fix typo change from inconstants to invariants)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 20, 2025
…enton

Rollup of 5 pull requests

Successful merges:

 - rust-lang#137953 (simd intrinsics with mask: accept unsigned integer masks, and fix some of the errors)
 - rust-lang#139990 (transmutability: remove NFA intermediate representation)
 - rust-lang#140044 (rustc-dev-guide subtree update)
 - rust-lang#140051 (Switch exploit mitigations to mdbook footnotes)
 - rust-lang#140054 (docs: fix typo change from inconstants to invariants)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 20, 2025
…enton

Rollup of 5 pull requests

Successful merges:

 - rust-lang#137953 (simd intrinsics with mask: accept unsigned integer masks, and fix some of the errors)
 - rust-lang#139990 (transmutability: remove NFA intermediate representation)
 - rust-lang#140044 (rustc-dev-guide subtree update)
 - rust-lang#140051 (Switch exploit mitigations to mdbook footnotes)
 - rust-lang#140054 (docs: fix typo change from inconstants to invariants)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 5a961da into rust-lang:master Apr 21, 2025
6 checks passed
@rustbot rustbot added this to the 1.88.0 milestone Apr 21, 2025
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Apr 21, 2025
Rollup merge of rust-lang#139990 - jswrenn:no-nfas, r=tmiasko

transmutability: remove NFA intermediate representation

Prior to this commit, the transmutability analysis used an intermediate NFA representation of type layout. We then determinized this representation into a DFA, upon which we ran the core transmutability analysis. Unfortunately, determinizing NFAs is expensive. In this commit, we avoid NFAs entirely by observing that Rust `union`s are the only source of nondeterminism and that it is comparatively cheap to compute the DFA union of DFAs.

We also implement Graphviz DOT debug formatting of DFAs.

Fixes rust-lang/project-safe-transmute#23
Fixes rust-lang/project-safe-transmute#24

r? ``@compiler-errors``
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Optimization: Remove NFAs, implement DFA union Visualize layouts with Graphviz
6 participants