|
|
|
|
|
by eadmund
3136 days ago
|
|
As someone who's spent the last week implementing two different Schemes atop two different languages (Lua & Go), I think I can explain why GNU Guile didn't take off: Scheme. The problem with Scheme is that it's an utterly lovely little language with some wonderfully neat concepts which is great for teaching students about continuations … and it happens to have some broken features, like DYNAMIC-WIND instead of UNWIND-PROTECT, and some design decisions seemed wise at the time but in retrospect were foolish (Lisp-1 seems really awesome, right until you have to use it every day; eliminating NIL and making '() truthy seems very elegant and orthogonal but is actually a right royal pain — and don't even get me started about forbidding (car '())). Scheme pursued a foolish simplicity, foregoing the complexity necessary to deal with the real world. It's a wonderful language for implementing language interpreters, but I wouldn't want to write large programs in it. For that, the only thing worth using is Common Lisp. |
|
And dynamic-wind is the price you have to pay for call/cc. UNWIND-PROTECT is not the same thing. Multi-shot continuations is he reason. One way would be having explicit one-shot continuations and escape continuations. Those are faster and will make UNWIND-PROTECT work.
I am more in favour of delimited continuations though.
Delimited continuations makes that a bit simpler (since you can easily implement something like dynamic wind using them).