On Wednesday, 28 September 2016 at 07:47:32 UTC, Andrei Alexandrescu wrote:
* Please remove colloquialisms. Characterizations such as "fantastically useful" are unlikely to be a convincing motivator and have no place in a DIP.

* The "Description" section should be more detailed and less casual. The grammar changes should be shown in a syntax similar to the current grammar definition.

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.

I don't know enough about how D is compiled to speak meaningfully about implementation details.

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.

On Wednesday, 28 September 2016 at 07:47:32 UTC, Andrei Alexandrescu wrote:
* I saw in the forum that the "else" clause is supposed to run in the scope of the "try" statement, but that is not mentioned in the proposal. Even though that is the semantics in Python, that should be explicit in the document. The proposal should be standalone and fully specified without knowing Python or perusing external links.

* The fact above (the "else" clause continues the scope of the statement after "try") is surprising, considering that the "catch" and "finally" clauses introduce their own scopes. The irregularity may confuse users. If the "else" clause is defined to introduce its own scope, it seems the advantages of the proposal are diminished.

It was an idea that was raised, yes.

If catch and finally don't continue the scope of try, then neither should else.

That said, it might be preferable if they all did continue try's scope. But this would be a distinct and separate change.

* 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.



Reply via email to