DIP 1002 (TryElseExpression) added to the queue

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 27 21:23:56 PDT 2016


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.


More information about the Digitalmars-d mailing list