Comparing Exceptions and Errors
Ola Fosheim Grøstad
ola.fosheim.grostad at gmail.com
Sun Jun 5 11:38:53 UTC 2022
On Sunday, 5 June 2022 at 11:13:48 UTC, Adam D Ruppe wrote:
> On Sunday, 5 June 2022 at 10:38:44 UTC, Ola Fosheim Grøstad
> wrote:
>> That is a workaround that makes other languages more
>> attractive.
>
> It is what a lot of real world things do since it provides
> additional layers of protection while still being pretty easy
> to use.
Yes, it is not a bad solution in many cases. It is a classic
solution for web servers, but web servers typically don't retain
a variety of mutable state of many different types (a webserver
can do well with just a shared memcache).
> My code did and still does simply catch Error and proceed. Most
> Errors are completely harmless; RangeError, for example, is
> thrown *before* the out-of-bounds write, meaning it prevented
> the damage, not just notified you of it. It was fully
> recoverable in practice before that silly Dec '17 dmd change,
> and tbh still is after it in a lot of code.
Yes, this is pretty much how I write validators of input in
Python web services. I don't care if the validator failed or if
the input failed, in either case the input has to be stopped, but
the service can continue. If there is a suspected logic failure,
log and/or send notification to the developer, but for the end
user it is good enough that they "for now" send some other input
(e.g. avoiding some unicode letter or whatever).
> Or perhaps redefine RangeError into RangeException,
> OutOfMemoryError as OutOfMemoryException, and such for the
> other preventative cases and carry on with joy, productivity,
> and correctness.
For a system level language such decisions ought to be in the
hand of the developer so that he can write his own runtime. Maybe
some kind of transformers so that libraries can produce Errors,
but have them transformed to something else at boundaries.
If I want to write an actor-based runtime and do all my
application code as 100% @safe actors that are fully «reliable»,
then that should be possible in a system level language.
The programmer's definition and evaluation of «reliability» in
the context of a «casual game server» should carry more weight
than some out-of-context-reasoning about «computer science» (it
isn't actually).
More information about the Digitalmars-d-learn
mailing list