[Dlang-internal] DIP1000 discussion and testing

Walter Bright via Dlang-internal dlang-internal at puremagic.com
Sun Dec 18 09:56:26 PST 2016


On 12/18/2016 9:28 AM, Martin Nowak wrote:
> Let me suggest a reason, transitive scope checking would be more complex
> to implement, is it that?

It's a heluva lot more complicated for the user. And since it is not necessary, 
why pay such a large bill?


> - How certain are we that this is enough? In other words, why is `tmp =
> &a.b; tmp2 = &tmp.c; tmp2.d.e` not necessary.

It would be necessary in order to build non-trivial data structures on the 
stack. How necessary is that? I've never needed to in decades of programming. I 
don't think there are any instances in Phobos or dmd.

If one really wants to do that, there's always @system code.

Is it worth burdening everything with a feature when the use case for it is 
rare? I don't think so.

For example, consider 'volatile' in C++. The use case for it is rare (very 
rare). But there's an enormous amount of spec verbiage and thought dedicated to 
how to weave it into the type system, overloading rules, conversion rules, 
casting rules, promotion rules, mangling rules, deduction rules, on and on. It's 
just not worth it.


> - Let's imagine for a short moment, what it would mean to make scope
> transitive at a later point, if we'd ever find enough reasons to do so.
> Maximizing future options is always good.

This kind of annotation system was first proposed 10 years ago. I've been 
thinking about how to make it simpler ever since, and the original has not 
improved with age.

I also have a lot of experience with transitive const, and how disruptive that 
was, and how many years it took to work the problems out (Andrei says they're 
still a problem).



More information about the Dlang-internal mailing list