Emulating Goto in Scheme with Continuations

(terezi.pyrope.net)

17 points | by usually 4 days ago ago

5 comments

  • taeric an hour ago

    I confess I like Common Lisp's TAGBODY far more than I feel like I should. Having constrained GOTO semantics to a short section of the codebase is surprisingly useful.

    • kccqzy 44 minutes ago

      Constrained GOTO semantics sounds a lot like delimited continuations. Indeed I think Scheme continuations are a little too powerful for regular use by having the possibility of global effect (like longjmp). Delimited continuations make the effect more local.

      • taeric 7 minutes ago

        Delimited continuations always bounced off of me. In theory, they should be a lot like coroutines? I think, in practice, I just never really internalized all that goes into managing the current "environment" for a piece of code that is managed by the call state.

        Like, I have a few partial mental models for everything that they pull together. I haven't really tried to build on that, though. Should put some time to that.

        • mikkupikku 4 minutes ago

          You could implement coroutines with deliminated continuations, which is probably the best way to use deliminated continuations.

      • richdougherty 10 minutes ago

        If you'll excuse the self-post, here's a blog post on goto with delimited continuations.

        https://rd.nz/2009/03/goto-in-scala.html

        It uses an experimental compiler plugin for the Scala compiler. It's typesafe at compile time. At runtime unfortunately it relies on exceptions for control flow.