Hacker News new | ask | show | jobs
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.

1 comments

I don't happen to agree with you on eliminating NIL. I don't understand what the royal pain is.

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).