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