Based on DIP25/35 but slightly simplified, these rules would make "ref" safe, would minimise code breakage, and only marginally restricts the usage of "ref". The notion of "lifetime" is purely a tool for simplifying the explanation of the rules.

Lifetimes
0 = temporary/rvalue
1 = local variable/non-ref parameter/scope-ref parameter
2 = ref parameter
3 = static/heap allocated value

A value with any lifetime may be passed as any parameter into a function.

The & operator is safe only for lifetime >= 3, in other cases it is unsafe or system

Only values with lifetime >= 2 can be returned by ref

The lifetime of a return value is determined by the caller as follows: - Take the lifetimes of all values passed in using "ref" without the "scope" qualifier - The lifetime of the return value is the minimum lifetime of these values

OPTIONAL:
- A return value marked as "out" is guaranteed to have a lifetime >= 3 (equivalent to all ref parameters being marked "scope") - Marking a method as "scope" is equivalent to marking the "this" parameter as such

Reply via email to