You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Cleanup region hierarchy code, especially around closures #3696
This is a big that's been on the back of my mind for a while but I don't think it has a bug associated with it. When we build the region hierarchy, we assume that any ||-closure argument is limited to the lifetime of the call where it appears. However, since the more general form of fn& was implemented, I don't believe this is enforced. We should place an upper-bound on the || lifetime and add some tests. In an ideal world, maybe we would always infer the lifetime of an ||-closure, but this is tricky to do because the region hierarchy is built before region inference (and indeed it must be, in order to compute LUB/GLB and so forth).
The PR #12828 tries to apply variance rule to self type substitution, also part of #5781, but the following begins to fail:
pubfnmain(){let a = ~[~""];let b: ~[~[&str]] = a.map(|s| s.lines().collect());// error: cannot infer an appropriate lifetime for autoref due to conflicting requirements}
First of all, should this compile as it currently does? If yes, then how is the self type substitution intertwined with with closure lifetime inference?
@bkoropoff I'd love to talk over this issue with you if you're interested in looking at something else after #17403 :) -- I think the two are related, or at least touching pretty similar code.
I'm updating the title on this issue and repurposing it to also cover the fact that it would be nice if the representation of "free" regions did not always have them attached to a scope. Instead, a free region should just have a number, and we should indicate the relationship that A >= X for some scope X as an in-scope where clause.
So this is still a bug, but I hope that we will fix it for good once we fully move borrow/region-checking to MIR. The idea is that MIR has fully desugared closures. I am going to close this bug though because it's kind of vague and I don't see how having it open is helpful in any particular way.
Activity
bblum commentedon Oct 11, 2012
I had a weird idea a while ago, for a higher-order function involving returning a stack closure something like:
And then use it like:
I recall that I couldn't make it compile. This sounds like it might enable this (crazy, but cool) sort of thing.
nikomatsakis commentedon Mar 29, 2013
An example from #3283 that should not build but does (leading to segfaults):
emberian commentedon Jul 21, 2013
Could not get to compile with:
nikomatsakis commentedon Jul 24, 2013
I did fix some problems in this area though this is still an issue. I have to come up with a good representative test case.
catamorphism commentedon Oct 14, 2013
@nikomatsakis Does #2202 subsume this, or is there still something left to do?
Issue rust-lang#3696. Define region hierarchy around closures.
edwardw commentedon Mar 13, 2014
The PR #12828 tries to apply variance rule to self type substitution, also part of #5781, but the following begins to fail:
First of all, should this compile as it currently does? If yes, then how is the self type substitution intertwined with with closure lifetime inference?
nikomatsakis commentedon Oct 14, 2014
@bkoropoff I'd love to talk over this issue with you if you're interested in looking at something else after #17403 :) -- I think the two are related, or at least touching pretty similar code.
nikomatsakis commentedon Dec 9, 2014
@pnkfelix has been working on this
steveklabnik commentedon Feb 14, 2015
@nikomatsakis what's the state of this with the new closure stuff? is it still relevant?
Auto merge of #23109 - nikomatsakis:closure-region-hierarchy, r=pnkfelix
[-]Define region hierarchy for closures[/-][+]Cleanup region hierarchy code, especially around closures[/+]nikomatsakis commentedon Jul 31, 2015
I'm updating the title on this issue and repurposing it to also cover the fact that it would be nice if the representation of "free" regions did not always have them attached to a scope. Instead, a free region should just have a number, and we should indicate the relationship that
A >= Xfor some scopeXas an in-scope where clause.brson commentedon Jan 26, 2017
@nikomatsakis Still a bug?
nikomatsakis commentedon Jan 26, 2017
So this is still a bug, but I hope that we will fix it for good once we fully move borrow/region-checking to MIR. The idea is that MIR has fully desugared closures. I am going to close this bug though because it's kind of vague and I don't see how having it open is helpful in any particular way.
Auto merge of rust-lang#3696 - RalfJung:ci, r=oli-obk
Merge rust-lang#3696 rust-lang#3698 rust-lang#3703