Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Though it's equivalent, I think it's worse than just using gotos.

I'm not sure I could judge what it would look like just using gotos, because I've never seen it that way. I think in virtual machine implementations, this may actually be the most rational structure for solving the problem at hand.

I agree with your general point, though. When you remove something essential from a programming language, you are forced to reinvent it; actually, more complex version(s) of it.



Using gotos, it would look something like this:

    state1:
      /* do some stuff */
      if (/* something or other */)
        goto state2;
      else
        goto state3;
    state2:
      /* do some stuff */
      goto state1;
    state3:
       ...
The labels represent states, and the gotos represent transitions.

You're right that this isn't particularly good for implementing virtual machines, but for more "fixed" types of state machines this can be a pretty clear way of representing them in code. Mike Pall wrote a good overview of various virtual machine techniques here: http://lua-users.org/lists/lua-l/2011-02/msg00742.html (while he knocks the performance of the switch-based approach, I'd like to note that it's the most portable).

> When you remove something essential from a programming language, you are forced to reinvent it; actually, more complex version(s) of it.

That's a good way of phrasing it. It almost sounds like a lemma to Greenspun's Tenth Rule :)




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: