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

Add a per-tree cache into the obligation forest #31349

Merged

Conversation

nikomatsakis
Copy link
Contributor

Have the ObligationForest keep some per-tree state (or type T) and have it give a mutable reference for use when processing obligations. In this case, it will be a hashmap. This obviously affects the work that @soltanmm has been doing on snapshotting. I partly want to toss this out there for discussion.

Fixes #31157. (The test in question goes to approx. 30s instead of 5 minutes for me.)
cc #30977.
cc @aturon @arielb1 @soltanmm

r? @aturon who reviewed original ObligationForest

@nikomatsakis
Copy link
Contributor Author

cc @jroesch

@soltanmm
Copy link

soltanmm commented Feb 3, 2016

@nikomatsakis
The following comment assumes that this PR is going to go in and that the snapshotting PR (#31175) will need to handle it somehow:

I believe you raised a point earlier that you were considering fully persistent hash maps in the per-tree state as a means to simplify the interface between the ObligationForest and other code (I guess by just making the bounds on the per-tree state include Clone), but do you feel particularly strongly about that? I mean as opposed to having bounds on the per-tree state, e.g. Snapshottable (wc?) or perhaps something that can push undo actions into the forest.

It seems like using a HashMap-like-thing will result in similar added complexity on the part of the (aspiring-to-be-performant) client whether it ends up using a fully persistent structure or one that provides snapshotting in some form. Although, going down the Clone route does make it plausible to postpone implementing a fully persistent hash map (by just taking the cloning hit on every snapshot), so, I'unno.

@nikomatsakis
Copy link
Contributor Author

@soltanmm

I believe you raised a point earlier that you were considering fully persistent hash maps in the per-tree state as a means to simplify the interface between the ObligationForest and other code (I guess by just making the bounds on the per-tree state include Clone), but do you feel particularly strongly about that? I mean as opposed to having bounds on the per-tree state, e.g. Snapshottable (wc?) or perhaps something that can push undo actions into the forest.

Not very strongly. Something like snapshottable might be better, though we'd have to think about how it works (in particular, how the actions are accumulated -- maybe you could create a "handle" to the main value that also collects the undo actions locally or something). The other option would be just hard-coding the fact that the per-tree state is a map, and parameterizing ObligationForest with and K and V value for this map. This would allow the undo log to be tightly tied to the ObligationForest data structure itself.

@aturon
Copy link
Member

aturon commented Feb 5, 2016

Sorry for the delay reviewing. This looks basically fine to me -- at little hacky, but well-documented as such :)

@bors: r+

@bors
Copy link
Contributor

bors commented Feb 5, 2016

📌 Commit 35d6efb has been approved by aturon

@bors
Copy link
Contributor

bors commented Feb 5, 2016

⌛ Testing commit 35d6efb with merge 6dc112d...

bors added a commit that referenced this pull request Feb 5, 2016
…he, r=aturon

Have the `ObligationForest` keep some per-tree state (or type `T`) and have it give a mutable reference for use when processing obligations. In this case, it will be a hashmap. This obviously affects the work that @soltanmm has been doing on snapshotting. I partly want to toss this out there for discussion.

Fixes #31157. (The test in question goes to approx. 30s instead of 5 minutes for me.)
cc #30977.
cc @aturon @arielb1 @soltanmm

r? @aturon who reviewed original `ObligationForest`
@bors bors merged commit 35d6efb into rust-lang:master Feb 5, 2016
@nikomatsakis nikomatsakis added beta-nominated Nominated for backporting to the compiler in the beta channel. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Feb 8, 2016
@nikomatsakis
Copy link
Contributor Author

Nominating for beta since this regression was pretty significant.

@nikomatsakis nikomatsakis added the beta-accepted Accepted for backporting to the compiler in the beta channel. label Feb 11, 2016
@nikomatsakis
Copy link
Contributor Author

Approving for backport, although another option might to revert the change that introduced the ObligationForest. This would also fix the regression in #31299, at least for a little while. ;)

@White-Oak
Copy link
Contributor

@nikomatsakis beta is going to become stable in 10 days, will this one this be backported until then?

@nikomatsakis
Copy link
Contributor Author

I opted to revert the change on beta, because this did not backport entirely cleanly: #31851

@brson brson removed the beta-nominated Nominated for backporting to the compiler in the beta channel. label Feb 25, 2016
@nikomatsakis nikomatsakis deleted the issue-31157-obligation-forest-cache branch March 30, 2016 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
beta-accepted Accepted for backporting to the compiler in the beta channel. 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.

6 participants