[phobos] Exceptions in Phobos

Jonathan M Davis jmdavisProg at gmx.com
Mon Feb 11 23:03:07 PST 2013


On Tuesday, February 12, 2013 07:46:47 Lars Tandle Kyllingstad wrote:
> Hi,
> 
> Some time last year, I noticed there was at least one huge discussion
> about exceptions, and about how Phobos' exception hierarchy should be
> structured.  Did that discussion lead to any conclusions, or any kind of
> consensus?  (Please don't make me read through hundreds of old forum
> messages; I'm just looking for a quick summary.)
> 
> The reason I'm asking is that I'm putting the final polish on the new
> std.process(*), and I need to decide whether each function should simply
> throw Exception on failure, or whether some of them should throw more
> specialised exceptions.

I think that it was agreed upon that we should have a more organized hierarchy 
than we do, but I don't believe that the specifics were ever agreed upon (and 
certainly, nothing has come of it yet; I suppose that I should put it on my 
todo list - I'd forgotten about it). There were also some ideas about putting 
a Variant[] in Exception in order to be able to add more stuff which was 
specific to a program to any exception.

As for std.process, the main question is whether anyone would want to catch 
and act on specific errors from std.process. If so, there there should be 
exception types specific to those errors. If it's generally the case that only 
one exception is going to be thrown per function, and you won't need to 
distinguish, then a single exception type is probably enough. Regardless, I 
think that throwing Exception is generally a bad idea. It's too generic to be 
useful beyond knowing that "something went wrong." And it could be the case 
that std.process ended up throwing something like a UTFException when 
processing a string that it was given (or even some other exception type that 
you couldn't know about if it operates on ranges or other user-defined types). 
If all it did was throw Exception, then you wouldn't be able to distinguish 
between that and something going wrong with the actual operation that was 
being attempted.

So, unless there's another exception type in Phobos that would make a lot of 
sense for std.process to throw (and I can't think of one), then std.process 
should declare its own exception type, and whether it should have multiple 
exception types depends entirely on whether it has errors which may need to be 
distinguished from one another when catching them. And I can't answer that, 
because I don't know what the error conditions that it has are.

- Jonathan M Davis


More information about the phobos mailing list