On 8/12/2016 2:03 PM, Timon Gehr wrote:
On 12.08.2016 22:22, Walter Bright wrote:
I believe it does track across function boundaries, because function
parameters can be annotated.
Yes, to some extent, but what the type system knows and makes use of at the call
site is more informative than what can be tracked around function boundaries.
The effect is that there are pieces of code that cannot be abstracted into their
own functions, which creates friction.

I don't understand your comment.


Aggregate boundaries, no, because annotating fields with 'scope' is not
allowed, like 'ref' fields are not allowed.
This rules out structs that wrap data and adapt it in some interesting way, a
very common idiom in (generic) D code.

Consider:

    struct S { int* a, b; }

    int x;
    S s;
    s.a = &x;

should be semantically equivalent, as far as scope rules go, to:

    int x;
    int* a;
    a = &x;

(Note that 'scope' is inferred here.)

What would not work is:

    int x;
    S* ps = new S;
    ps.a = &x;

Reply via email to