-
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
Store a Symbol in InternedString #46972
Conversation
r? @pnkfelix (rust_highfive has picked a reviewer for you, use r? to override) |
c758e13
to
100c61b
Compare
r? @jseyfried (I don't think we want these changes but we probably need a wider discussion) EDIT: |
☔ The latest upstream changes (presumably #46899) made this pull request unmergeable. Please resolve the merge conflicts. |
100c61b
to
4cda813
Compare
☔ The latest upstream changes (presumably #46803) made this pull request unmergeable. Please resolve the merge conflicts. |
4cda813
to
c3ab779
Compare
@bors try |
☀️ Test successful - status-travis |
@Mark-Simulacrum I'd like a perf run on this |
Perf run queued. |
ping @Mark-Simulacrum, do we have perf results now perchance? |
(Also, Note that @jseyfried has not yet weighed in on whether they want these changes.) |
review ping @jseyfried ! |
Review ping for you @jseyfried! Also cc @rust-lang/compiler. |
Can somebody summarize (a) what is being done here so I don't have to read the diffs and (b) why I should care? |
@nikomatsakis This is reverting an API change @jseyfried (I believe) did. |
What's the point of So far I didn't look carefully at @Zoxc's multithreading-related PRs and mostly seen them as something quite unfortunate, but maybe necessary after all. |
It has
My branch has a interner per compilation session which is behind a lock. There is no parallelism during parsing there though, so all symbols are identical to what happens on |
This seems to be slowing things down quite a bit (as per the perf run above). Is this a soundness fix? Is there an alternative implementation that allows us to keep using direct string references? |
I believe we can just require that the interner outlives the threads that use it. |
@michaelwoerister I suspect the slowdown is due to the usages of @eddyb I think that spawning a thread for the interner should work. Not terribly elegant though. |
@Zoxc I mean you already have the threads, you just have to own the interner outside of them. |
It seems pretty important to resolve this, no? |
Thanks for the PR, @Zoxc ! Since we haven't heard from you in a few weeks, I'm going to close this for now. Please feel free to reopen once you address the merge conflicts and the last round of feedback! |
…woerister Rename InternedString to LocalInternedString and introduce a new thread-safe InternedString This is an allocation-free alternative to rust-lang#46972.
Remove usages of Term::as_str and mark it for removal Returning references to rustc internal data structures is a bad idea since their lifetimes are unrelated to the lifetimes of proc_macro values. See rust-lang#46972 and the `Taming thread-local storage` section of https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606 r? @alexcrichton
Remove usages of Term::as_str and mark it for removal Returning references to rustc internal data structures is a bad idea since their lifetimes are unrelated to the lifetimes of proc_macro values. See #46972 and the `Taming thread-local storage` section of https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606 r? @alexcrichton
No description provided.