Sutter's ISO C++ Trip Report - The best compliment is when someone else steals your ideas....
John Carter
john.carter at taitradio.com
Wed Jul 11 23:56:46 UTC 2018
On Wednesday, 11 July 2018 at 12:45:40 UTC, crimaniak wrote:
> The error should be maximally localized, and the programmer
> should be able to respond to any type of errors. The very
> nature of the work of WEB applications contributes to this. As
> a rule, queries are handled by short-lived tasks that work with
> thread-local memory, and killing only the task that caused the
> error, with the transfer of the exception to the calling task,
> would radically improve the situation.
Hmm. The fun fun fun thing about undefined behaviour in the
absence of MMU's is the effects are maximally _unlocalized_.
ie. It can corrupt _any_ part of the system.
A use after free for example, or an index out of bounds on the
heap, can corrupt all and any subsystem sharing the same virtual
address space.
Part of the reason why Walter is pushing so hard for memory
safety.
Memory Safety is truly a huge step away from the world of pain
that is C/C++.... it removes a truly huge class of defects.
However, it also removes a common terminology. Odds on you know
what I mean when I say "use after free" or "index out of bounds".
Now in the levels above the language and the library, humans are
equally capable of screwing up and corrupting our own work....
except the language can no longer help you.
Above the language and the library, we no longer have a common
terminology for describing the myriad ways you can shoot yourself
in the foot.
The language can, through encapsulation "minimize the blast
radius", but can't stop you.
I disagree with Bjarne Stroustrup on many things.... but in this
article he is absolutely spot on.
https://www.artima.com/intv/goldilocks3.html
Please read it, it's probably the most important article on
Object Oriented Design you'll find.
Now the problem with "unexpected" exceptions is, odds on you are
left with a broken invariant.
ie. Odds on you are left with an object you now cannot reasonably
expect to function.
ie. Odds on that object you cannot expect to function, is part of
a larger object or subsystem you now cannot reasonably expect to
function.
ie. You left with a system that will progressively become flakier
and flakier and less responsive and less reliable.
The only sane response really is to reset to a defined state as
quickly as possible. ie. Capture a backtrace, exit process and
restart.
Your effort in trying to catch and handle unexpected events to
achieve uptime is misplaced, you are much better served by Chaos
Monkeys.
ie. Deliberately randomly "hard kill" your running systems at
random moments and spend your efforts on designing for no
resulting corruption and rapid and reliable reset.
I certainly wouldn't unleash Chaos Monkeys on a production system
until I was really comfortable with the behaviour of on a test
system....
More information about the Digitalmars-d
mailing list