<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>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). <br>
    </p>
    <p>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: <a moz-do-not-send="true"
        href="https://bitbucket.org/petesoper/simplepinchange">https://bitbucket.org/petesoper/simplepinchange</a></p>
    <p>The C syntax for pointers to functions gets my vote for hardest
      to remember.<br>
    </p>
    <p>-Pete<br>
    </p>
    <div class="moz-cite-prefix">On 7/1/20 7:18 PM, Jon Wolfe via
      TriEmbed wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:md5:o2pZ6R2v3sG%2Fn33Sf4VahQ==">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
      <div class="WordSection1">
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">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)</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Check out line 208:</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"> <a
            href="https://github.com/compuphase/pawn/blob/master/amx/amxexec_gcc.c"
            moz-do-not-send="true">https://github.com/compuphase/pawn/blob/master/amx/amxexec_gcc.c</a></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">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. </p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">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. </p>
        <br>
      </div>
    </blockquote>
  </body>
</html>