Future of Scheme

- Alex Alejandre

Late 2026

While interviewing Peter Bex I also spent some time in #scheme on IRC, even attending an R7RS meeting. I think these answers add valuable context/color:

People argue Common Lisp’s many implementations are a strength, but Go basically went to only 1. Besides portability to other platforms, why have so many Scheme implementations?

retropikzel: I just think they’re neat. And I want more of them. Some day maybe I’ll make one myself Hopefully also Scheme can offer an ecosystem to tap into. If someone is implementing a lisp, we could get more schemers by saying “Hey add RnRS support and here is libraries you can use”

Wolfgang Corcoran-Mathe: Personally, I do not like the situation the Haskell language is in. (One de-facto-standard implementation that’s much too big to fail.) I appreciate having a lot of implementations to choose from. The implementations have different goals. e.g. chibi is aimed at low memory usage, CHICKEN at integration with C, Guile at being a huge ball of mud, I mean, flexible …

phm: In my opinion, a single implementation can cover many use cases but the implementation itself can become very complex in doing so. Having multiple implementations cover a similar set of use-cases is easier because most people only need to cover a few use-cases. There are also use-cases that are very difficult to reconcile in one thing, like embeddable (Chibi Scheme) vs featureful (Racket). I can go into the code of Chibi, Gambit, and CHICKEN and have an idea what’s going on. It would take me a lot longer to do so with LLVM, even though I have written C(++) for much, much longer than I have Scheme. Even Chez and Racket’s source code isn’t that bad, and they’re also very fancy.

Which implementations do you normally use?

Wolfgang Corcoran-Mathe: Chez, mostly, these days. But I’ve been using Gauche a lot for R7RS stuff.

retropikzel: I test my r7rs only code usually on chibi, chicken, gauche, kawa, mosh, racket, sagittarius, skint, stklos, tr7 and ypsilon. Also using akku-r7rs, I often test on chezscheme, ikarus, ironscheme, racket(r6rs), sagittarius(r6rs), ypsilon(r6rs). Akku mirrors snow-fort packages so I want to confirm it works. Then there are implementations I test less often, cyclone, gambit, guile, larceny, loko, meevax and mit-scheme. Mostly because they dont have good enough r7rs support to not be annoying to work with sometimes. A combination of those will give you enough of combined error messages to make debugging easier and if something works on those it will probably work on most.

What do you actually want scheme to be? I know a few e.g. write Clojure at work but prefer Scheme. I know traditionally there’s the “elegant minimalism” vs. “we need to be able to write actual software” dichotomy…

aeth: There’s always a few directions pulling at Scheme designs. Let’s copy what CL is doing (but make it fit Scheme’s more minimal sensibilities), let’s reject what CL is doing because we’re not CL, let’s do what’s trendy in FP. There’s kind of three tensions particularly Scheme-ish because Scheme is academic. Beginners/students, CS research, the software industry. Separately, scripting vs. application is a big tension. CL is all about being an all CL application, most other Lisps are limited by their major implementation (e.g. elisp is obviously a scripting language). Scheme seems to split along the lines of embedding a little scripting language vs being its own standalone thing.

Wolfgang Corcoran-Mathe: I think we’d be fooling ourselves if we adopted the goal of making Scheme trendy. The language has a tradition of The Right Thing, which I would like to continue.

phm: I want Standard Scheme to be something expressive enough where you can write portable code for many implementations, such that you can choose one to write your practical software.

phm: I like thinking of Scheme as a low-level functional language. Which sounds weird to say, but in a way that a low level language is “close to the hardware,” Scheme is close to its theoretical underpinnings, with call/cc and all that. If you want an actual low-level Scheme, CHICKEN and Gambit are both Scheme -> C compilers that allow you to splice in C code anywhere. So you can do some fun stuff with it.

On r7rs large or even r8rs

https://www.gnu.org/software/guile/manual/html_node/Guile-and-Scheme.html

With R6RS and R7RS, the unified Scheme standardization process appears to have more or less run its course.

for future directions, Guile takes inspiration from other related language communities: Racket, Clojure, Concurrent ML

we recommend using the parts of Guile that are useful in solving the problem at hand, regardless of whether they proceed from a standard or whether they are Guile-specific.

From #scheme:

03:31:24 PM - wingo: guile’s r7rs implementation should be fine. it is not a main focus however. most people that write scheme programs tend to target one implementation. targetting a standard is possible but not the easiest thing to do 03:32:04 PM - wingo: my pov is http://wingolog.org/archives/2013/01/07/an-opinionated-guide-to-scheme-implementations, see the “you and your scheme” section