Exceptions (was Re: Structs (was RE: Record selectors))

Richard Carlsson <>
Thu Jan 16 18:47:39 CET 2003

On 16 Jan 2003, Luke Gorrie wrote:

>   InputStream		file = null;
>   try {
>       file = new FileInputStream(...);
>       read from file;
>   } finally {
>       if (file != null)
>           file.close();
>   }

Ah! Of course - I'd forgotten about 'finally'. (Note that what "finally"
does in the case there was an exception is exactly what Shawn's code
did: catch E, execute finally-body, re-throw E.)

Interestingly, "finally" does not mix well with Erlang (and other
functional languages), mainly because of tail recursion. If an exception
occurs in the try-body, the finally-body is supposed to be executed
*after* the catch-body has its say. But the catch-body might do a tail
call, possibly never indended to return. If so: should we insert a call
to the finally-code *before* the tail call (possibly making the code
hard to understand), or should we force those calls to be non-tail
recursive, always returning to perform the cleanup code afterwards (does
not seem like a good idea either).


Richard Carlsson ()   (This space intentionally left blank.)
E-mail: 	WWW: http://user.it.uu.se/~richardc/

More information about the erlang-questions mailing list