On Sunday, 25 November 2018 at 19:22:36 UTC, sclytrack wrote:
There are 4 rules listed.

https://github.com/dlang/DIPs/blob/master/DIPs/DIP1000.md




What is rule 5?


int* global_ptr;

void abc() {
    scope int* a;
    int* b;
    scope int* c = a;      // Error, rule 5
    scope int* d = b;      // Ok
    int* i = a;            // Ok, scope is inferred for i
global_ptr = d; // Error, lifetime(d) < lifetime(global_ptr) global_ptr = i; // Error, lifetime(i) < lifetime(global_ptr)
    int* j;
    global_ptr = j;        // Ok, j is not scope
}


---

Are the following assumptions correct?


lifetime(a) < lifetime(b)
Means that b is older and lives longer than a. Or better, the data that b is pointing to is older and lives longer than the one that a is pointing too. With the exception of the null pointer which gets unlimited lifetime because it does not corrupt memory.

---

scope int * a;

The variable gets unlimited lifetime because the value it is pointing is assigned null. And that throws exception when trying to access the memory and because it does not corrupt memory it is assigned unlimited lifetime. Also once a variable is assigned unlimited lifetime, then it retains that unlimited lifetime during
the entire reachability of the variable.

scope int * c = a;

The above is allowed. You are assigning a variable that according to the compiler has unlimited lifetime. Therefore the variable c will be handled like it has
unlimited lifetime by the compiler.
lifetime(c) <= lifetime(a)
The dip talks about longer and shorter, but is equal okay too?

int * c = a;

The above can not be inferred because scope is only inferred when it is assigned
a limited lifetime. So it is an error.

---
How is a person able to understand this DIP?
---

How many DIP manager are there?
When is a DIP assigned a number?

---






Reply via email to