On Monday, 26 November 2018 at 09:10:23 UTC, sclytrack wrote:
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;

works


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;

works (compiles without error and is inferred scope)


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

Rule number 2 of the DIP1000 between quotes

"2. A variable is inferred to be scope if it is initialized with a value that has a non-∞ lifetime."

I made an error here. Once scope always scope. And will infer scope as much as possible. Rule two is more for local variables that haven't even been marked
with scope. A pointer to them needs to be inferred scope.



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


./dmd -betterC -dip1000 test.d

---

How many DIP manager are there?

I'll assume single person.

When is a DIP assigned a number?

---



Reply via email to