[ Followups to COFF, as this is rapidly becoming a Unix tutorial ]
On Sun, 12 Mar 2023, Warner Losh wrote:
How often
would you call setjmp()/longjmp()?
Cheap enough for occasional error handling, way too expensive for a
generic exception handling system... processors with lots of registers
were more of a problem...
I've only ever used it when knee-deep in procedure calls, and I needed to
parachute back to the main loop when things went pear-shaped[*]; failure
was not an option :-)
On Sun, 12 Mar 2023, Steffen Nurpmeso wrote:
|> How often would you call setjmp()/longjmp()
Only on a Sunday!
Sometimes I did my best work outside of M-F 9-5 :-)
I never used these myself of free will.
(And never regulary at all until i took maintainership of a BSD Mail
clone, which is the examplary piece of software to show that BSD signal
handling and SA_RESTART are a terrible misconception, especially as soon
as the software gets larger. .. In my opinion. Once it was able to run
"24/6" i counted the number of system calls necessary for signal block /
release and installation / removal over a week, and i think the number
was way in the six digits. System calls them all! I should have taken
the OpenBSD variant instead, and simply take over what "was good", and
it would be much, much better by now. They did the work and reduced the
very messy part to two exactly locatable system call points of interest.
(I looked i guess 2014-<2017.) A very bad decision. But if i live long
enough i will make it, and another one i would really long for.)
I've never liked the concept of signals, especially for IPC; it's akin to
being hit over the head with a lump of 4x2. Hardware interrupts were one
thing, but it seemed to be a bit brutal in software.
And no, I don't have an elegant solution short of message-passing.
Heck, I still have nightmares about BSDi's "fdump" program using signals
to coordinate its various children, and completely screwing up my
backups as a result...
Even on a x86(-32) i have gnashed with my teeth. And
that with
a Cyrix from 1996 .. and not to think about i386 or even earlier
processors with so few memory and speed.
I remember _for sure_ looking at the jmpbuf structure by then, and
the assembler files (sheer magic by then) and x86 instructions.
You can read X86 assembler? I can only do that after a few stiff
drinks... I did buy the book (in order to debug a floating bug defect
in the optimiser -- hey, let's optimise this instruction right out! -- and
I've never trusted optimisers since).
[*]
Cue the saying about it being impossible to design a foolproof system.
-- Dave, the iconoclast