On Monday, 12 January 2015 at 07:09:54 UTC, Tobias Müller wrote:
Walter Bright <newshou...@digitalmars.com> wrote:
On 1/11/2015 5:06 AM, Dicebot wrote:
What is your opinion of approach advertised by various
functional languages and
now also Rust? Where you return error code packed with actual
data and can't
access data without visiting error code too, compiler simply
won't allow it.
It's a great question. I have a lot of experience with error
codes, and
with exceptions. I have zero with the packed scheme, though
that doesn't
stop me from having an opinion :-)
Perhaps I misunderstand, but given A calls B calls C,
A => B => C
and C detects an error, and A knows what to do with the error.
B then
becomes burdened with checking for the error, invoking some
sort of
cleanup code, and then propagating it.
Wouldn't this be uglifying B's source code?
With exceptions, C throws, A catches, and B's cleanup happens
automatically.
This matters very much for pipeline style programming (i.e.
ranges and algorithms).
- Error codes are automatically ignored
- Exceptions are automatically propagated
IMO both are not ideal and lead to sloppy programming.
Ignoring errors is of course worse than aborting where you
could have
handled the error.
Rust-style "packed" errors are nice because you are forced to
think about
the correct handling.
There's nothing stopping you from just throwing errors out in
Rust(last I used it anyways) via empty match statements and/or
unwrap.