On Saturday, 4 October 2014 at 03:21:23 UTC, ketmar via Digitalmars-d wrote:
  scope(exit) {
    some-cleanup-code
    thisCanThrow();
    some-more-cleanup-code
  }

and what we should do with "some-more-cleanup-code" if "thisCanThrow"
throws?

It is tricky if the throw implies that the caller to the cleanup should retry because of a timeout/deadlock, so the programmer have to analyze it and catch it if a retry is implied. So you need to catch in scope(exit) and check the coverage during semantic analysis.

The alternatives are:
1. formally forbid throwing in all functions that closes/frees resources and use return values instead, but that is inconsistent with having exceptions in the first place...

2. not free resources, but use a manager object that frees them in the background, but that defeats having scope(exit)

3. remove exceptions from the language.

Point 3 sounds nice. :-)

Reply via email to