7 ms·
This won't be a very deep answer, but to connect with the original post, programming in CPS is more closely related to delimited continuations than call/cc is b
by maxiepoo 5y ago
This won't be a very deep answer, but to connect with the original post, programming in CPS is more closely related to delimited continuations than call/cc is because the continuations are just ordinary functions in the host language, unlike call/cc continuations which are a bit more complex.
As for why delimited continuations are not more popular, many people find shift/reset a bit difficult to program with. In particular the type systems for them are a bit odd and some variants like prompt/control don't have nice type systems for them. Currently, the closely related notion of (algebraic) effect handlers is quite popular in the functional language design community as something quite similar in expressive power but more intuitive for programming and with very natural typing. The Koka language has a lot of nice introductory resources if you are interested in learning more: https://github.com/koka-lang/koka https://github.com/koka-lang/koka . There's even a serious proposal for adding something based on these to webassembly: https://github.com/effect-handlers/wasm-effect-handlers https://github.com/effect-handlers/wasm-effect-handlers .
- cryptonector 5y agocall/cc can be built entirely out of CPS and closures of indefinite extent (i.e., allocated on the heap). Using CPS with closures of dynamic extent (i.e., allocated on the stack, either explicitly, or because that's all you get, or because the compiler is smart enough to figure out that these closures don't leak out) is a lot more like delimited continuations (but easier to use).