DIP 1002 (TryElseExpression) added to the queue
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Wed Sep 28 15:40:12 PDT 2016
On 9/28/16 7:17 AM, pineapple wrote:
> These were not documented as a requirement anywhere that I saw. I'd have
> been happy to comply, if I had known this was the practice.
Yah, we're also learning the ropes. Bear with us - this is one of the
first DIPs using the new flow.
> I don't know enough about how D is compiled to speak meaningfully about
> implementation details.
I'll formalize this in DIP guide, but some level of implementation
discussion is necessary - the more, the better. It has happened in the
past (in various languages) that things that seemed sensible were
proposed and partially implemented without a clear handle on
implementation issues. It would improve the DIP a lot if you
collaborated with somebody fluent with implementation issues.
> I am clearly not the only one who's convinced this is a useful feature.
> I welcome you or anyone else who can more effectively express the idea
> to make their own contributions to the DIP.
> If catch and finally don't continue the scope of try, then neither
> should else.
Then I'd say the DIP should discuss the relative advantages and
disadvantages compared to the incarnations in other languages. My
understanding is it is important for the "else" branch to continue work
initiated in the "try" branch. How well does the feature fare without
this amenity? It's the kind of question the DIP should address.
> That said, it might be preferable if they all did continue try's scope.
> But this would be a distinct and separate change.
The short answer is that will never happen.
>> * The "Breaking changes" section should include how the following
>> change in semantics would be addressed. Consider:
>>
>> try
>> if (expression)
>> try { ... }
>> catch (Exception) { ... }
>> else { ... }
>> finally { ... }
>>
>> This code is currently legal and binds the "else" clause to the "if"
>> and the "finally" to the first "try". The proposed feature will bind
>> the "else" and the "finally" to the second try and then probably fail
>> to compile because there is no "catch" or "finally" matching the first
>> "try".
>
> This possibility hadn't occurred to me. Is that really legal?
>
> If so, I'd argue the old behavior should be maintained and also that
> people shouldn't write such ambiguous code.
For a DIP to be successful, its authors need to be fluent with
syntactical matters and be able to enumerate them and how they are
supposed to be handled ("else" also works with "static if", "version",
and since DIP 1002 itself, other "try" statements).
Andrei
More information about the Digitalmars-d
mailing list