3 ms·
Really good article. Interesting to see what the issues were with Scheme back then. Funny that they loved continuations, but still hadn't figured out how to d
by MycroftJones 9y ago
Really good article. Interesting to see what the issues were with Scheme back then. Funny that they loved continuations, but still hadn't figured out how to do them "in the general case". It is the general case of continuations that makes Scheme inefficient, just like lazy evaluation is Haskell's Achilles heel.
The TI comments about lexical and dynamic scoping are also interesting; makes me appreciate how newLisp dealt with it. Although newLisp is officially "dynamically" scoped, I recently realized that Lutz snuck Lexical scoping in there; the dynamic scoping is actually limited by the lexical scope. And by Lexical scope, I'm not talking about the context/module system, although that is a part of it. I mean real lexical scope.
If not for continuations, I wonder if Scheme would have taken off more than it has. Also it was interesting seeing that T and NIL hadn't become #true and #false yet.
- ruricolist 9y agoI don't think the author was talking about the general case of continuations -- he was talking about the general case of unwind-protect in the presence of continuations -- what Schemers nowadays call dynamic-wind.
- Johnny_Brahms 9y agoSome schemes now have delimited continuations [1], and with Dybvig behind the wheel of Chez scheme I wouldn't be surprised if they show up there as well. It is a superior construct in every way. The performance and memory usage, even for the simplest usage, is way better, and because they are delimited they are easier to reason about. 1: guile, scheme48, racket's scheme lang (using rackets native delimited continuations together with their r6rs Lang)
- MycroftJones 9y agoThanks for the reference, I'll look into that. How does the performance and memory usage of deliminted continuations compare to implementing the control flow constructs directly?
- Johnny_Brahms 9y agoWhich are you comparing to? They are quite specialised, and are probably expensive as far as control operators go, but delimited continuations beat undelimited continuations every day of the week. I remember benchmarking the coroutine generator from srfi-125 (??), and already for the simplest case the delimited continuations in guile (compared to the undelimited ones in the reference implementation) were about 3x faster.