What does Scheme do well? What does Scheme (not just RnRS Scheme, but Scheme more broadly) have that no one else has? It isn’t lexical scope – everyone but elisp has that, these days. It isn’t real first-class functions – lots of languages have that too. It isn’t proper tail calls – ML does that right. It’s not advanced compilers for functional languages – those are a dime a dozen. It’s not even first-class control, which a few other languages have. And the REPL – even Python has that.
It’s macros. Since 1986, Scheme has had a macro system that other languages can’t compete with, and haven’t succeeded in matching in the last 23 years. And over those 23 years, Scheme hasn’t stood still – Schemers have developed a vastly more expressive system in which huge numbers of new and powerful language extensions are possible.
So I say, press our advantage. Improve the macro system. Show the programming language world what the real power of “a very small number of rules for forming expressions” is.
That’s not to say that we should neglect the other things that make Scheme a high-quality programming language. They are important, and Scheme needs a community that cares about all her aspects. But this is not the tail wagging the dog – it’s knowing where our strengths lie.
– Sam T.H.
4 thoughts on “What does Scheme do well?”
ummm, common lisp has had macros since the early 80’s.
First, quoting Gabriel and Steele, “The simple but powerful macro facility on which DEFMACRO is based was introduced in MacLisp in the mid-1960’s.”
Second, 1986 was not the year that the first macros were written in Scheme – it was when the papers “Macro by Example” and “Hygenic Macro Expansion” were published. Prior to that, Scheme had macros, but not better macros than the rest of Lisp.
I can’t speak for Sam. I don’t know CL or its history.
Maybe he means hygienic macros?
First, Lisp has had macros since the 60s. To quote Gabriel and Steele:
“Macros appear to have been introduced into Lisp by Timothy P. Hart in 1963”
Second, 1986 was when Scheme developed better macros than Lisp, not when Scheme developed macros.