digitalmars.D - DIP1000 questions
- Yuxuan Shui (27/50) Jan 05 2017 I was trying to read DIP1000, and I've made about half way
I was trying to read DIP1000, and I've made about half way through it. I found it confusing/hard to follow, and sometimes inconsistent. So I want to ask for some clarification. Help would be appreciated.A garbage collected language is inherently memory safe.I think in order for this sentence to make sense, we need to define what is a "garbage collected language". Does any language that supports GC count? Because there's Boehm GC for C. Does D count? Because dmd has this compiler switch: -boundscheck=off, which clearly makes the language not memory safe.[...] We also define lifetime for each value, which is the extent during which a value can be safely used.OK.* For an unrestricted pointer, [...] lifetime is dictated by the lifetime of the data to which the pointer points to.Why? The pointer itself can be used safely in its lexical scope just like a value type. It's *pointer which has the lifetime of the data. Maybe 'using' a pointer means dereferencing it?[...] expression lifetime notes *e ∞ Lifetime is not transitiveHuh? I guess this is true if *e is a value type, since then it would be copied. But what about: int a; int *b = &a; int **c = &b; *c = b so lifetime(*c) = lifetime(b), right? And then as per the example givenif (...) { int x; p = &x; // lifetime(p) is now equal to lifetime(x) }lifetime(b) = lifetime(a). So lifetime(*c) = lifetime(a) != ∞. Maybe that example is poorly written? Because:[...] scope int* a = &global_var; // OK per rule 1, lifetime(&global_var) > lifetime(a) a = &global_var; // OK per rule 1, lifetime(&global_var) > lifetime(a)As per the previous example. lifetime(a) will become lifetime(&global_var) after first assignment. Would it be better if we say lifetime(&global_var) > reachability(a)? BTW, reachability() is defined at the beginning of this DIP, but never used afterwards. Why bother defining it?
Jan 05 2017