scope(exit) considered harmful
Lutger
lutger.blijdestijn at gmail.com
Sun Nov 8 14:19:45 PST 2009
Justin Johansson wrote:
...
> If scope(exit) is meant to be some mechanism for saving try/finally
> boiler-plate code, it is a can of worms, otherwise it is a can of
> i-dont-know-what-it's-good-for.
It is that, but also used where you could otherwise use RAII a la C++.
> To my way of thinking, and no doubt I should go back to remedial CS-101,
> semantics of scope(exit) should related to function scope and not
> curly-brace scope-statement scope.
I understand this could possible be tricky but consider this:
- it is in the docs
- the name says it almost literally: scope(exit) means: do this at scope
exit.
- it behaves the same as try/catch/finally (which introduces a new scope)
and destructors in C++.
It is also more expressive than it would be were scope be restricted to
function scope.
I can't come up with a real example, but suppose this:
A get_A_or_null()
{
auto a = null;
if (takeThisBranch)
{
a = new A;
scope(failure)
a.cleanup; // segfaults!
auto b = new B;
scope(exit)
b.cleanup(); // Undefined behaviour or compiler error?
}
return a;
}
More information about the Digitalmars-d
mailing list