| ▲ | jordan_bonecut an hour ago | |||||||||||||||||||||||||||||||
The compiler statically tracks “where” everything lives. It also knows “when” the “where” is valid. Each “where” is called a plane, which is a tree. The stack plane contains all your function calls memory, a structure allocated on the stack has a child plane for each field. The compiler tags which plane something is from at compile time and tracks when it dies. Things do get complicated in scenarios like: fn max(a: &usize, b: &usize) -> &usize {
}In such a scenario the compiler tags the result with both of the input planes. However, you cannot define add a postcondition ensures clause to make it more precise | ||||||||||||||||||||||||||||||||
| ▲ | tancop an hour ago | parent | next [-] | |||||||||||||||||||||||||||||||
Sounds a lot like group borrowing from Valen, but that one still has annotations like `entity in world.entities[] mut`. Are you tracking the same things implicitly with post conditions? | ||||||||||||||||||||||||||||||||
| ▲ | 0c3ca83 an hour ago | parent | prev [-] | |||||||||||||||||||||||||||||||
And what about allocations and threads? | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||