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.

Reply via email to