-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Remove InternedString
#65657
Remove InternedString
#65657
Conversation
This avoids the needs for various conversions, and makes the code slightly faster, because `Symbol` comparisons and hashing is faster.
It's a full conversion, except in `DefKey::compute_stable_hash()` where a `Symbol` now is converted to an `InternedString` before being hashed. This was necessary to avoid test failures.
This requires changing the `PartialOrd`/`Ord` implementations to look at the chars rather than the symbol index.
This is a straightforward replacement except for two places where we have to convert to `LocalInternedString` to get a stable sort.
By using `LocalInternedString` instead for the few remaining uses.
@bors try (for perf) |
Remove `InternedString` This PR removes `InternedString` by converting all occurrences to `Symbol`. There are a handful of places that need to use the symbol chars instead of the symbol index, e.g. for stable sorting; local conversions `LocalInternedString` is used in those places. r? @eddyb
Oh, btw, I think |
I agree! I was planning to rename in a follow-up. I had thought of |
BTW, you can now do |
☀️ Try build successful - checks-azure |
@rust-timer queue |
Awaiting bors try build completion |
Queue needs to be run before the try build completes; @rust-timer build c7f7350 |
Queued c7f7350 with parent 1ba7b4e, future comparison URL. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Finished benchmarking try commit c7f7350, comparison URL. |
Instruction counts look good, lots of small reductions of up to 1%. That's not surprising; hashing and ordering the symbol index is clearly cheaper than the symbol chars (which also involve a TLS lookup). |
Just to be sure: |
For |
Great! Thanks for confirming, @nnethercote. |
📌 Commit 08e2f05 has been approved by |
🌲 The tree is currently closed for pull requests below priority 1000, this pull request will be tested once the tree is reopened |
…rly, r=eddyb Remove `InternedString` This PR removes `InternedString` by converting all occurrences to `Symbol`. There are a handful of places that need to use the symbol chars instead of the symbol index, e.g. for stable sorting; local conversions `LocalInternedString` is used in those places. r? @eddyb
…rly, r=eddyb Remove `InternedString` This PR removes `InternedString` by converting all occurrences to `Symbol`. There are a handful of places that need to use the symbol chars instead of the symbol index, e.g. for stable sorting; local conversions `LocalInternedString` is used in those places. r? @eddyb
Rollup of 12 pull requests Successful merges: - #64178 (More Clippy fixes for alloc, core and std) - #65144 (Add Cow::is_borrowed and Cow::is_owned) - #65193 (Lockless LintStore) - #65479 (Add the `matches!( $expr, $pat ) -> bool` macro) - #65518 (Avoid ICE when checking `Destination` of `break` inside a closure) - #65583 (rustc_metadata: use a table for super_predicates, fn_sig, impl_trait_ref.) - #65641 (Derive `Rustc{En,De}codable` for `TokenStream`.) - #65648 (Eliminate `intersect_opt`.) - #65657 (Remove `InternedString`) - #65691 (Update E0659 error code long explanation to 2018 edition) - #65696 (Fix an issue with const inference variables sticking around under Chalk + NLL) - #65704 (relax ExactSizeIterator bound on write_bytes) Failed merges: r? @ghost
This PR removes
InternedString
by converting all occurrences toSymbol
. There are a handful of places that need to use the symbol chars instead of the symbol index, e.g. for stable sorting; local conversionsLocalInternedString
is used in those places.r? @eddyb