"The last feature": scope structs

Ary Borenszweig ary at esperanto.org.ar
Mon Feb 8 05:35:32 PST 2010


Andrei Alexandrescu wrote:
> Following work on typechecking synchronized methods, Walter and I were 
> discussing about managing escaping references to objects that wouldn't 
> actually agree to escaping. The problem is that today a value has no 
> idea that its address is being taken, so it has no saying in that.
> 
> To compensate for that, my idea was to allow @disable on opUnary!"&". 
> Walter suggested allowing "scope" as a property of a struct:
> 
> scope struct Transitory
> {
>     ...
> }
> 
> A scope struct cannot have its address taken. You can take addresses of 
> its members (access permitting), but you can't take the address of any 
> other struct that has at least one scope struct as a direct member. For 
> example:
> 
> struct A
> {
>     int x;
>     Transitory tr;
> }
> 
> A will also be scope. So scope has this funny way of propagating 
> outwards, as opposed to qualifiers, which propagate inwards.
> 
> This is as much as we have in terms of a design right now, so definitely 
> it stands some more fleshing out. If gotten right, scope should allow 
> defining a number of useful idioms, such as pass-down values, 
> unique/lent objects, and the such.
> 
> Working against escapes has long been a problem, and with scope we're 
> hoping to strike a balance between useful and simple.
> 
> Please share any thoughts you might have.

Why is this useful?



More information about the Digitalmars-d mailing list