[HN Gopher] Continuations by example: Exceptions, time-traveling... ___________________________________________________________________ Continuations by example: Exceptions, time-traveling search, threads, and more Author : alschwalm Score : 111 points Date : 2020-07-16 14:25 UTC (8 hours ago) (HTM) web link (matt.might.net) (TXT) w3m dump (matt.might.net) | verytrivial wrote: | 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. | vincnetas wrote: | 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/ | offbynull wrote: | 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. | joel_dice wrote: | 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. | dlo wrote: | Love it. Lmk if you never need a hand. I was on the core | analysis team at Fortify. | sjtindell wrote: | Thanks for sharing this background and cool project. | azeirah wrote: | 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 playing around with mit-scheme, but it doesn't work | with the ctrl-v'ing the examples. Chezscheme does work. | hencq wrote: | 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... | [deleted] | [deleted] | jolmg wrote: | 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? | gus_massa wrote: | 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. | emmanueloga_ wrote: | 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 | [deleted] ___________________________________________________________________ (page generated 2020-07-16 23:01 UTC)