5 ms·
Well, i would love to see some applications of delimited continuations other than those mentioned here: http://matt.might.net/articles/programming-with-continua
by xfer 9y ago
Well, i would love to see some applications of delimited continuations other than those mentioned here: http://matt.might.net/articles/programming-with-continuations--exceptions-backtracking-search-threads-generators-coroutines/ http://matt.might.net/articles/programming-with-continuation... .
Most languages have support for these applications.
The only thing other than that i have seen work is continuation based web servers.
- tyoverby 9y agoThe page that you linked to shows off some features that are not really found in any major programming langauge. Time-traveling search is a big one for me. Many languages have exceptions, but with shift/reset, you can implement your own exception handling behavior trivially, including things like resumable exceptions. Some languages have async/await, but almost all of those implementations are state-machine based, which means that they don't compose well when used with more complex language features like generics and higher order functions. But more than that, in continuation-based asynchronous programming, "async" functions are just normal functions that execute in an async prompt. Here's an example of a multi-user asynchronous TCP echo server in my toy language with tagged delimited continuations: async { loop { let conn = accept_connection("localhost", 9999) async { loop { let data = conn.next_data() conn.send(data) } } } } Where all of those asyncrhonous constructs (including `async` itself) are really short wrappers around delimited continuation machinery. You'll notice that the nested calls to `async` indicate that there are two asyncrhonous contexts 1. Connection acceptance happen on their own "thread" of control 2. Each connection gets their own context in which everything is internally asyncrhonous
- xfer 9y agotime-travelling search can be done with recursion. Otherwise, i agree that they don't compose well with each other in some languages. However, it is harder to implement efficiently as far as i understand; time will tell if they are widely understood to be implemented in future languages.
- tyoverby 9y agoAnother thing that I should mention is that most langauges, features like generators / async / exceptions don't compose well at all. In a language where these features are implemented through continuations, it's really easy to pick how they interact, leading to some really powerful tricks!
- srean 9y agoCould you list some these (main stream) languages. I know a few but I am surely missing the others you know of.