On 9/27/2016 2:30 AM, Dicebot wrote:
https://github.com/dlang/DIPs/blob/master/DIPs/DIP1002.md
PR: https://github.com/dlang/DIPs/pull/43
Abstract:
In Python, the try/catch/finally syntax is augmented with an additional clause,
termed else. It is a fantastically useful addition to the conventional syntax.
It works like this:
```
try:
do_something()
except Exception as e:
pass # Runs when an error inheriting from Exception was raised
else:
pass # Runs when no error was raised
finally:
pass # Runs unconditionally, evaluates last
```
The DIP says that a state variable is currently necessary, but that is
incorrect:
try
{
scope (exit)
{
Runs unconditionally, evaluates last
}
scope (success)
{
runs when no error was raised
}
do_something();
}
catch (Exception e)
{
Runs when an error inheriting from Exception was raised
}
Implementation:
The try/catch/else/finally could be 'lowered' into the above form.
These references should be included in the DIP:
http://dlang.org/spec/statement.html#ScopeGuardStatement
http://dlang.org/exception-safe.html
My opinion:
Due to the existence of the ScopeGuardStatement, I feel this new syntax is
redundant and needs a much better justification.