Start cutting down rustc_query_system#152160
Start cutting down rustc_query_system#152160nnethercote wants to merge 4 commits intorust-lang:mainfrom
rustc_query_system#152160Conversation
|
I'd prefer to apply the |
|
You can't move the entire file. Some parts of it are used by |
|
Not enough moved for git to pick up a rename? It could be moved to a |
|
Adding a few hundred more lines to I'm not sure whether this will work out in practice, but here's a potential approach:
That would produce an end result similar to the current state of this PR, but with the migrated code still in its own separate file, and preserving as much line history as possible. |
This comment has been minimized.
This comment has been minimized.
Why? The same few hundred lines are removed from
It would also result in an odd module structure that reflects historical evolution rather than what makes sense today. |
This comment has been minimized.
This comment has been minimized.
|
I tried prototyping my proposal, and while I still like it on paper, I came away with the distinct impression that it's probably not better enough to justify the extra fiddling and delay, compared to just moving forward with this PR. Ultimately, what's most important is unlocking the sorts of simplification and improvement that are impossible with the current module split. |
That's the only place it's used, so it no longer needs to be `pub`.
Instead of writing it by hand.
…umbing`. We are in the process of eliminating `rustc_query_system`. Chunks of it are unused by `rustc_middle`, and so can be moved into `rustc_query_info`. This commit does some of that. Mostly it's just moving code from one file to another. There are a couple of non-trivial changes. - `QueryState` and `ActiveKeyStatus` must remain in `rustc_query_system` because they are used by `rustc_middle`. But their inherent methods are not used by `rustc_middle`. So these methods are moved and converted to free functions. - The visibility of some things must increase. This includes `DepGraphData` and some of its methods, which are now used in `rustc_query_impl`. This is a bit annoying but seems hard to avoid. What little is left behind in `compiler/rustc_query_system/src/query/plumbing.rs` will be able to moved into `rustc_query_impl` or `rustc_middle` in the future.
The previous commit moved some code from `rustc_query_system`, which doesn't have access to `TyCtxt` and `QueryCtxt`, to `rustc_query_impl`, which does. We can now remove quite a bit of indirection. - Three methods in `trait QueryContext` are no longer needed (`next_job_id`, `current_query_job`, `start_query`). As a result, `QueryCtxt`'s trait impls of these methods are changed to inherent methods. - `qcx: Q::Qcx` parameters are simplified to `qcx: QueryCtxt<'tcx>`. - `*qcx.dep_context()` occurrences are simplified to `qcx.tcx`, and things like `qcx.dep_context().profiler()` become `qcx.tcx.prof`. - `DepGraphData<<Q::Qcx as HasDepContext>::Deps>` becomes `DepGraphData<DepsType>`. In short, various layers of indirection and abstraction are cut away. The resulting code is simpler, more concrete, and easier to understand. It's a good demonstration of the benefits of eliminating `rustc_query_system`, and there will be more to come.
I do want to push back on this a bit. Taking ~500 lines of code from system/plumbing and shoving it in impl/pluming is useful in the sense that it unlocks within-crate simplifications, but it's most certainly not a good module structure. One of the first things I'd want to do is take big chunks of that code and extract it into one or more separate modules, so that it isn't making the impl/plumbing macros significantly harder to deal with. And because the code has been isolated in a separate crate up to this point, it does represent a fairly “natural” boundary for the code that currently exists. IIRC, the main point of interaction between impl/plumbing and system/plumbing is through the (For comparison, look at middle/plumbing, where I made a point of taking some functions that exist to be called by macro-generated functions, and moved them out to a separate So my main motivation for wanting to move the code over in a separate file is not to preserve history (though that's nice if we can get it), but because I think it's genuinely a better module structure for the current state of the code. |
4f0dd45 to
d6218b6
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
My motivation is to get rid of all the different layers of indirection. I personally find that kind of thing much more of a barrier to understanding than module structure. I've added a new commit that starts to remove the indirection. It's nice! |
|
The cleanups are nice, and it will be nice to unlock even more, so let’s try to get this into the next big rollup when the tree reopens. @bors r+ |
The query system is implemented in
rustc_query_system,rustc_middle, andrustc_query_impl.rustc_query_systemis hamstrung by not having access toTyCtxt, and there seems to be consensus to eliminate it. It's contents can be moved into the other two crates. Moving as much stuff as possible torustc_query_implis preferred, becauserustc_middleis already so big.This PR starts this process. It moves one small function to
rustc_middleand a good chunk of code torustc_query_impl.Once
rustc_query_systemis gone (or at least shrunk down a lot more) some of the traits likeDepContext,QueryContext, andQueryDispatcherwill be removable.r? @Zalathar