Well, Lua coroutines uses longjmp and they're not "fairly simple" in any way.
I don't think it is a circular reasoning. There's always the good and the bad way to use something, even C++ exceptions.
I don't think it is a circular reasoning. There's always the good and the bad way to use something, even C++ exceptions.
I'm not sure your example is a counterexample either. Implementing part of a fairly simple runtime (like Lua's) using longjmp is an example of a good use of longjmp, in my opinion.