Live data from Hacker News

Continuations by example: Exceptions, time-traveling search, threads, and more

matt.might.net

11–19 of 19 posts

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#11

Earlier quoted context omitted.

Me to. Level failed, but then i found this cheat code from apache and at lest i now understand basics. http://commons.apache.org/sandbox/commons-javaflow/

AFAIK Javaflow's been inactive for over a decade. Newer implementations for the same concept include https://github.com/offbynull/coroutines and https://github.com/vsilaev/tascalate-javaflow/ . Full disclosure: I'm the one who built / owns the first project.

On the topic of inactive continuation implementations for Java: I implemented native support for both delimited (shift/reset) and non-delimited (call/cc) continuations in the Avian JVM. See https://github.com/ReadyTalk/avian/blob/master/test/extra/Co... for some mind-bending examples.

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#12
I was actually relieved when I found this article [1] which argues against call/cc as a core language feature. Alas, I think the argument does not dismiss _delimited continuations_, so now my burden has shifted from mastering call/cc to mastering shift/reset :-/ [2].

1: http://okmij.org/ftp/continuations/against-callcc.html

2: https://en.wikipedia.org/wiki/Delimited_continuation

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#14
post #10

I always start Matt Might articles thinking "Okay, THIS is the one I'm going to understand all the way to the very end without unlearning what I just read, else I die," and alas, I have again died.

I'm having an ADHD night and I had the same thought, except I haven't died yet. Felt like giving up three times already, but I did have a click moment after playing around with a scheme repl for a couple of minutes. I understand the first example of call/cc now! (display (call/cc (lambda (cc) (display "I got here.\n") (cc "This string was passed to the continuation.\n") (display "But not here.\n")))) Edit: Tried play…

It seems that MIT-Scheme needs the cc function to be a function of 1 argument (the return value for the continuation)[0]

Changing it to the following should work:

  (let ((start #f))
    (if (not start)
      (call/cc (lambda (cc)
                 (set! start cc))))
  
    (display "Going to invoke (start)\n")
    
    (start #f))
[0] https://www.gnu.org/software/mit-scheme/documentation/stable...

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#15
post #13

I think I've found a good use for continuations in a parser combinator library I'm writing, though I haven't gotten around to working on the corresponding feature yet. Has anyone used continuations in a serious/non-academic way?

I used to implement an equivalent of exit or return statement, like in this example.

  #lang racket

  ; implement sqrt in a very inefficient way
  (let/ec exit
    (for ([i 10])
      (when (= (* i i) 49)
        (exit i)))
    "not found :(")
  ;==> 7
 
There are more idiomatic and easy ways to write this, but when you have to many nested and not nested for's, sometimes it is useful to have a magical exit-everything-now.

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#16
post #10

I always start Matt Might articles thinking "Okay, THIS is the one I'm going to understand all the way to the very end without unlearning what I just read, else I die," and alas, I have again died.

I'm having an ADHD night and I had the same thought, except I haven't died yet. Felt like giving up three times already, but I did have a click moment after playing around with a scheme repl for a couple of minutes. I understand the first example of call/cc now! (display (call/cc (lambda (cc) (display "I got here.\n") (cc "This string was passed to the continuation.\n") (display "But not here.\n")))) Edit: Tried play…

For what it's worth, almost any time Matt writes about Scheme he's likely using Racket so it'd be worth trying that for his posts!

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#17
post #13

I think I've found a good use for continuations in a parser combinator library I'm writing, though I haven't gotten around to working on the corresponding feature yet. Has anyone used continuations in a serious/non-academic way?

You could dispute "serious", but I've used it in a not!lisp for various control flow purposes.

  func a0 a1 = callcc \return:
    # ...
    callcc (again =)
      # ...
      x ?? return y
    again again

Re: Continuations by example: Exceptions, time-traveling search, threads, and more

#18
post #13

I think I've found a good use for continuations in a parser combinator library I'm writing, though I haven't gotten around to working on the corresponding feature yet. Has anyone used continuations in a serious/non-academic way?

Continuations can be implicitly used. If you have a language that is compiled using transformation to CPS. Then continuations are everywhere under the hood.
Post reply on HN