Just a quick note
I'm doing a little subroutine call over here from the T-compiler triage I'm doing
as to reduce noise over there
I'm going to take "two-phase-borrows need a specification" #46901 off Release milestone, and nominate for discussion at next meeting (Tuesday).
next "dropck: track order of destruction for r-value temporaries" #22323
this is tagged as NLL-fixed-by-NLL
Our policy has to keep such issues open, until NLL becomes the default ... at least for the 2018 release itself. I'm not sure whether we'll continue keeping them open until NLL becomes the default for 2015
But It certainly seems like keeping this open is just going to confuse people who are trying to figure out the Release milestone issues.
I think the right answer here is to remove NLL-fixed-by-NLL issues from the Release milestone, but continue to leave them open.
That seems like a sensible approach.
Looked next at "NLL reports "borrow used here in later iteration of loop" in cases outside of loop" #53773. It is still a problem.
@blitzerr do you think you'll have time to look at this in the near future? It does not appear to have been resolved by PR #54343, despite niko saying it should be
(i'm not being fair to niko there; he was really talking about a related issue and saying that a hypothetical ideal fix to it would also resolve this.)
@pnkfelix I will take a look.
it seems like i forgot to write a note here saying that I took "figure out how to integrate constants and the MIR type checker" #46702 off the Release milestone, (and simultaneously I-nominated it for discussion at NLL meeting on Tuesda)
what, if anything, is our most comprehensive source of information (documentation) on how NLL works and/or changes things?
The RFC (unless you consider the compiler "documentation"), maybe Niko's blog posts as well.
The original NLL RFC (https://rust-lang.github.io/rfcs/2094-nll.html). It's not comprehensive for all the bug fixes and contains position dependent outlives, but I don't think that anyone's written anything better.
hrm, so basically I'll need to pick niko's brain for a picture of the final design?
Pretty much. To give a very short (and possibly incomprehensible) version of the changes (maybe missing stuff)
Lifetime inference changes:
Lifetimes are now sets of points in the CFG and universal regions. (i.e. named or elided regions from the item signature)
* Lifetimes are the minimal sets in the CFG such that:
* They're a superset of any lifetime that they outlive
* They contain any point an initialized variable that has that lifetime in its type is live
* They contain any point where an initialized variable that has that lifetime as a dropck lifetime in its type may be dropped in the future
Borrows of a value start at the borrow expression and end when either
* The lifetime of the borrow ends
* The place being borrowed is behind a dereference of a reference and that reference gets assigned to
*xis borrowed is allowed.
Pis a place where some prefix has type
*Pmay not be borrowed when
matchguard in a way that potentially breaks exhaustiveness (usually there's an AST check that prevents this)
matchnow has edges for the case when a match guard evaluates false (so moving in a match guard is forbidden when it should be).
Fn::call(&self, _: Args)
Oh, and Box gets fully special cased
I think there's a comment on the tracking issue about this.
@Matthew Jasper good idea to post that on irlo or on the nll rfc/tracking issue :)
Just commit it with the message "come fight me"