W dniu 01.06.2013 23:55, Jonathan M Davis pisze:
The guarantees of @safe hold only so long as there are no holes in it, but any
and all holes we find get fixed. Making ref be truly @safe has been a large part
of the recent ref discussions, as you can currently get away with doing
something like

ref int id(ref int i) { return i; }

ref int foo()
{
     int j;
     return id(j);
}

I know that introducing another type qualifier may complicate things
but this would be a compile time solution.

I mean _scope_ type qualifier, so your example could be rewritten as:

ref int id(ref int i) { return i; }

ref int foo()
{
    int j;
    return id(j); // error: could not pass scope(int) as ref int parameter
}

Taking an address of local variable would always yield a scope
qualified type, scope(int) in this example.

Obviously, scope qualified type could be passed to functions taking
scope parameters:

void bar(scope ref int i) { i = 10; }

void foo()
{
    int j = 0;
    bar(j); // ok
    assert(i == 10);
}

I think this could fill the @safety holes.

Reply via email to