bearophile wrote:
Andrei Alexandrescu:
Agreed. I know how to fix it.
Can you tell the idea?
Either define an explicit Scope type, or use the alloca() as a default
parameter trick.
Another thing: currently somewhere in DMD there is some code that tests against
returning a scoped object:
class Foo {}
Foo bar() {
scope Foo f = new Foo;
return f;
}
void main() {}
That code generates the error:
test.d(4): Error: escaping reference to scope local f
While currently this doesn't generate a compile-time error:
class Foo {}
Foo bar() {
Foo f = scoped!Foo();
return f;
}
void main() {}
This bug report shows that 'scoped' can cause other bugs:
http://d.puremagic.com/issues/show_bug.cgi?id=4214
But catching some of the most common bugs is positive, so can the code present
in dmd used to catch and avoid the return of a scoped object be used to avoid
the return of the library-defined scoped!() object?
Bye,
bearophile
I think with memory safety it's a 0/1 proposition. The current "scope"
keyword being "somewhat pregnant" is worse than not at all because it
lulls its user into a false sense of security.
Andrei