From 1d136695352a7e3059952f50e7b0bef5b8465205 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 3 Jun 2018 13:42:07 +0800 Subject: Notes - Borrowck planning --- Notes/BorrowChecker.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'Notes') diff --git a/Notes/BorrowChecker.md b/Notes/BorrowChecker.md index 78b46ff5..d01fcb40 100644 --- a/Notes/BorrowChecker.md +++ b/Notes/BorrowChecker.md @@ -1,3 +1,25 @@ + +Lifetime Annotations +==================== + +Problems +-------- + +Higher-ranked bounds (lifetimes) can be nested, and typecheck/inferrence can change that nesting after resolve +- Potential solution: each HRB block (`for<...>`) is numbered within one of three scopes, the impl scope, item scope, and body scope. + - Impl scope is for bounds that are visible for the entire `impl` or type block + - Item scope is for bounds visible within the current impl item (`fn`, `type`, ...) + - Body scope is for bounds within the body of a function (e.g. in type annotations) + - Each of these scopes specifies a prefix to the binding IDs, similar to how currently there's three prefixes for generics (impl, item, placeholder) + +Region inferrence +- To what extent does type inferrene play into lifetime inferrence? Can lifetimes be inferred as a second pass after + types are concretely known, or do they play into each other? + + +Notes on Borrowck +================= + - On borrow, calculate lifetime of asignment (using existing lifetime code) - Ignore reborrows? - Visit all statements in that lifetime and locate places where the borrow is propagated/stored -- cgit v1.2.3