On Monday, 14 January 2013 at 17:52:32 UTC, bearophile wrote:
Maybe this thread shows the need for some design work, see the comments by Hara:

http://d.puremagic.com/issues/show_bug.cgi?id=8695

What's the meaning of "in" function arguments? What are the purposes of "scope" for function arguments that contain indirections, and how to implement that?

Bye,
bearophile

Well I think about it a lot, it is unclear what is the solution, but here is how I see it :

stack variable as marked as local.

value marked local are considered scope in any inner scope.
values marked local can be passed to function by value or via scope argument. values marked scope can be passed to function by value or via scope argument.

void foo() {
    int a; // a is local.

    {
        // a is scope here
    }
}

Everything accessed throw a scope value is scope.
scope are not referable throw any non scope.
local are not referable to scope.

each scope declaration introduce a new scope. different scope can never refers each others.

void foo(scope A a, scope B b) {
    // a and b are in different scopes.
    a.memeber; // Is in the same scope as a, but not as b.

    C c; // c is local.
    D d; // ditto.

    {
// c and d are in the same scope. a and b are in different scope.
        c.member = d; // OK
        c.member = a; // Error.
    }
}

I still have some trouble to figure out the proper definition of it. And what can't be defined clearly is probably not understood enough to create a feature.

Reply via email to