Would this constitute "threaded execution"? I recall being told how
Forth dispatches in a clever way at the end of each operation and the
use of "NEXT" seems similar (to my vague memory of the description).
One other trick users of C and C++ should consider is function
references in variables and parameters. Some time back I made a "simple
pin change" library to give folks three more interrupts with the
Atmega328, the one used with the Arduino Uno and Nano and others
(warning: only tested with that chip). It uses an array of functions
that resolve to either a dummy internal function or the user's desired
interrupt handler. If anybody is interested the code is here:
https://bitbucket.org/petesoper/simplepinchange
The C syntax for pointers to functions gets my vote for hardest to remember.
-Pete
On 7/1/20 7:18 PM, Jon Wolfe via TriEmbed wrote:
In an interesting coincidence, the place where I recall seeing the use
of goto I described was also in a bytecode interpreter, for the “Pawn
Scripting language” (which is really cool by the way, I’ve got it to
run on 8 bit AVR, arm cortex-M and also transpiled to JavaScript using
emscripten, and run inside a browser. It is extremely fast for a
bytecode interpreter)
Check out line 208:
https://github.com/compuphase/pawn/blob/master/amx/amxexec_gcc.c
That ‘NEXT’ macro is using a goto behind the scenes. Each block of
code in between that labels (ie the semantic ‘case statement’
equivalents) ends with a NEXT macro, so it may actually be faster than
even a compiler optimized switch-case because there is no ‘loop’ logic
needed, to cycle back around to the ‘switch’. Its really just a
devilish jumping around inside that function.
One could argue that ‘break’ and ‘continue’ statements used inside
loops are really just dressed up ‘gotos’ with specific jump
destinations. I’ve been writing code almost daily for close to 30
years, and much of that time doing C or C++, and I’d estimate the time
in between occasions where I used the goto keyword to be 2-5 years, so
in other words, pretty rare. One of those uses can be for “breaking’
out of a nested loop. Java has a “break <label>” statement that you
can use to break out of an outer loop from within an inner loop.
Standard C/C++ doesn’t have anything like that so you have to either
use a flag, restructure your loops, or use a goto statement. I think
it’s a matter of option, on a case by case basis which technique will
lead to cleaner, easier to follow code in any particular situation.
_______________________________________________
Triangle, NC Embedded Computing mailing list
To post message: [email protected]
List info: http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
TriEmbed web site: http://TriEmbed.org
To unsubscribe, click link and send a blank message:
mailto:[email protected]?subject=unsubscribe