On Tuesday, 2 April 2013 at 10:37:08 UTC, deadalnix wrote:
On Monday, 1 April 2013 at 11:08:16 UTC, Lars T. Kyllingstad
wrote:
It's time to clean up this mess.
http://wiki.dlang.org/DIP33
Several things.
First the usage of enums isn't the right path. This makes it
hard to extend in general, and it is a poor man replacement for
sub classes in general.
Phobos/druntime devs can always add to the enums. Users still
have the option of subclassing if strictly necessary.
As a rule of thumb, when you use switch in OOP code, you are
likely to do something wrong.
I'm not sure I agree with that rule. And anyway, D's final
switch mitigate some of the problems with classic switch.
Second, many of you error are recoverable here. It isn't quite
satisfying.
RangeError is a very bad thing IMO. It completely hides why the
range fails in the first place. Trying to access front when not
possible for instance, is an error for a reason (which is range
dependent). That reason must be the source of the
error/exception.
No. To call front on an empty range is a programming error,
plain and simple. It's like trying to access the first element
of an empty array. The fact that some ranges may allow it anyway
does not change anything.
In general the hierarchy is weird. Why isn't
NetworkingException (why not NetworkException ?) a subclass of
IOException ?
Because they are supposed to signal different error conditions.
OutOfMemoryError on its own isn't good IMO. The Error hierarchy
is made for error that aren't recoverable (or may not be
recoverable). It include a whole class of problem, and OOM is
only one of them (another example is Stack overflow errors).
The DIP sort of redefines Error to mean "programming error".
Lars