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

Remove InternedString #65657

Merged
merged 7 commits into from
Oct 24, 2019
Merged

Conversation

nnethercote
Copy link
Contributor

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

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.
@eddyb
Copy link
Member

eddyb commented Oct 21, 2019

@bors try (for perf)

@bors
Copy link
Contributor

bors commented Oct 21, 2019

⌛ Trying commit 08e2f05 with merge c7f7350...

bors added a commit that referenced this pull request Oct 21, 2019
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
@eddyb
Copy link
Member

eddyb commented Oct 21, 2019

Oh, btw, I think LocalInternedString would make more sense if it was called SymbolContents.

@nnethercote
Copy link
Contributor Author

Oh, btw, I think LocalInternedString would make more sense if it was called SymbolContents.

I agree! I was planning to rename in a follow-up. I had thought of SymbolChars but SymbolContents is also good.

@nnethercote
Copy link
Contributor Author

BTW, you can now do !bors try !rust-timer queue (but with @ instead of !) to queue a try run and a perf run in one command.

@Centril Centril added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Oct 21, 2019
@bors
Copy link
Contributor

bors commented Oct 21, 2019

☀️ Try build successful - checks-azure
Build commit: c7f7350 (c7f73500c3bcd5b6268b7c1ed4b14d78ee82ce59)

@eddyb
Copy link
Member

eddyb commented Oct 21, 2019

@rust-timer queue

@rust-timer
Copy link
Collaborator

Awaiting bors try build completion

@Mark-Simulacrum
Copy link
Member

Queue needs to be run before the try build completes; @rust-timer build c7f7350

@rust-timer
Copy link
Collaborator

Queued c7f7350 with parent 1ba7b4e, future comparison URL.

@eddyb

This comment has been minimized.

@rust-timer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking try commit c7f7350, comparison URL.

@nnethercote
Copy link
Contributor Author

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).

@michaelwoerister
Copy link
Member

Just to be sure: Hash and Eq are still based on the same data for each type? If the two disagree it can lead to subtle, hard to detect bugs.

@nnethercote
Copy link
Contributor Author

Just to be sure: Hash and Eq are still based on the same data for each type? If the two disagree it can lead to subtle, hard to detect bugs.

For Symbol both Hash and Eq are derived, and therefore both work with the index. And LocalInternedString doesn't implement Hash. So everything should be fine.

@michaelwoerister
Copy link
Member

Great! Thanks for confirming, @nnethercote.

@nnethercote
Copy link
Contributor Author

@eddyb gave me r+ on Discord.

@bors r=eddyb

@bors
Copy link
Contributor

bors commented Oct 22, 2019

📌 Commit 08e2f05 has been approved by eddyb

@bors
Copy link
Contributor

bors commented Oct 22, 2019

🌲 The tree is currently closed for pull requests below priority 1000, this pull request will be tested once the tree is reopened

@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 Oct 22, 2019
Centril added a commit to Centril/rust that referenced this pull request Oct 23, 2019
…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
Centril added a commit to Centril/rust that referenced this pull request Oct 23, 2019
…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
bors added a commit that referenced this pull request Oct 24, 2019
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
@bors bors merged commit 08e2f05 into rust-lang:master Oct 24, 2019
flip1995 added a commit to Mark-Simulacrum/rust-clippy that referenced this pull request Oct 24, 2019
@nnethercote nnethercote deleted the rm-InternedString-properly branch October 24, 2019 20:23
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.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants