On Tuesday, 2 August 2016 at 07:50:29 UTC, ketmar wrote:
On Monday, 1 August 2016 at 19:33:48 UTC, bitwise wrote:
'scope' keyword, for example, is legal in D syntax, but doesn't actually do anything.

sorry, but you are wrong here. of course, it does HAVE effect.

  `void foo (scope delegate () boo)`

this means that compiler should not allocate a closure for delegate, as `foo` is promising that it will not store `boo` anywhere.

  `scope a = new A();`

this does what you think it does, althru it is deprecated in favor of `scoped!` template.

I know about these cases, but didn't bother mentioning them, as they are outliers. Also, they do not make my point any less valid.

The following code compiles without errors(outputs 1):

class Foo{
        int val;
        this(){ val = 1; }
}
Foo x;
void bar(scope Foo foo) {
        x = foo;
}
void main() {
    bar(new Foo());
    writeln(x.val);
}


'scope' is clearly not functioning as advertised, as is the case for many aspects of D. Again, users shouldn't have to deal with this sort of thing. I doubt that anyone outside of would-be D contributors will continue to use the language beyond the point where they find a hole like this.

    Bit

Reply via email to