summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2018-06-03 13:42:07 +0800
committerJohn Hodge <tpg@mutabah.net>2018-06-03 13:42:07 +0800
commit1d136695352a7e3059952f50e7b0bef5b8465205 (patch)
tree503c080169fb21336dfeb57560cfc78ee98df11e
parentb0b12e57c1aae298141836b43ab72541cc9c6ad3 (diff)
downloadmrust-1d136695352a7e3059952f50e7b0bef5b8465205.tar.gz
Notes - Borrowck planning
-rw-r--r--Notes/BorrowChecker.md22
1 files changed, 22 insertions, 0 deletions
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