I haven't included Scheme implementations written in Java because I've never found a decent free Java.
Originally, I was looking for a Lisp that would do fast bignum operations -- either natively, or by linking to some library such as GNU gmp or OpenSSL via some extension mechanism. Why I wanted to do this is too complicated to get into. Another requirement was that it work on Windows as well as *nix. Anyway, I investigated lots of implementations, and of course went overboard doing so. I've accumulated my research here, and still occasionally update it when I learn something interesting. Of course, I still obsessively update my shopping-for-wristwatches page despite having settled on a nice watch years ago, so what does that tell you ...
As of Jan 2004, the only systems that do everything that I originally wanted, and are tolerably fast, are
This first table shows those implementations that might have all my favorite criteria -- indicated by the tildes in the column headers. (Those are there merely to get the columns to sort the way I want.) They're ordered with the fastest ones first.
Note: the version numbers you see below aren't meant to indicate the latest version available; they're just the version that I tried.
Note: when the column about bignums refers to speed, it's talking about the speed of the native implementation, not the speed of some math library like GNU gmp or OpenSSL that I might link in.
| _implementation | gui-friendly | has-profiler | notes | threads | unicode | ~bignums | ~windoze-ffi | ~xml-parsing |
|---|---|---|---|---|---|---|---|---|
| guile 1.8 (from CVS) | Nope | yes | Uses GNU gmp, hence very fast: about twice as fast as Clisp. | Didn't build cleanly on Cygwin as of May 2004 (missing declaration for siginterrupt, and the built binary immediately dies with a Windows popup). | SSAX | |||
| Perl 5.8.2 | Easy access to lots of toolkits | Not a Lisp at all, of course | Don't think so | You betcha | GNU gmp | Not that I know of, but not needed. One problem, however: Math::Bignum::GMP doesn't currently build on Cygwin | Approximately one million options | |
| recent Python | Easy access to lots of toolkits | Not a Lisp at all, of course | built-in | Probably not needed. | Presumably | |||
| Clisp | Don't think so | Dan Barlow says it has "very fast bignum support"; my tests confirm this This site might have some FFI tips | Don't think so | UCS-4 | yes; about twice as fast as mzscheme | Both Cygwin and Win32, but I haven't figured it out | xmls looks promising | |
| mzscheme | MrEd -- slick | Well, DrScheme does; I don't know if it's accessible from mzscheme |
| yes | Yes, starting with version 300 | yes; about twice as fast as | yes, but I haven't yet figured out how to load extensions on Windows. version 300 has a remarkably sophisticated system, which promises to be very easy to use | both SSAX and a built-in library. It generated this page, for what that's worth. |
| guile 1.6 | has some GTK |
| yes, although I dimly recall them being unreliable | yes; about twice as fast as gambit, and half as fast as mzscheme | OK with Cygwin. In fact, this is the only Lisp with which I haven't had the usual I-can't-dlopen-a-DLL-on-Windows trouble. | I suspect SSAX will work | ||
| gambit 4.0 | Guillaume Germain's 'statprof' | yes | yes | Haven't yet tried | ||||
| Petit Larceny | Worked only on Sparc and Mac OS X for a long time; the x86 support is new as of January 2006, and I haven't yet tried it. | yes | ||||||
| Jazz Scheme | I know nothing about it other than what I gleaned from a quick glance at its home page |
The following table includes implementations that seem to lack at least one of the qualities I most want. They're not in any particular order.
| _implementation | gui-friendly | has-profiler | notes | threads | unicode | ~bignums | ~ffi | ~windoze | ~xml-parsing |
|---|---|---|---|---|---|---|---|---|---|
| lush | Appears to have frighteningly-sophisticated graphics bindings | By an amazing coincidence, this software has the same name as my wife's all-time favorite store | surprisingly, no | Cygwin | |||||
| Maxima | A computer algebra system implemented in Common Lisp. Unfortunately there's no way to directly access Lisp from it, never mind that the manual says that you can. | GNU gmp, so they say | |||||||
| scheme48/scsh | apparently not |
| Apparently they're pre-emptive, even on POSIX systems that don't themselves provide threads. Presumably the magic happens inside the VM, between virtual instructions.Here's a paper describing how it all works | yes, but too slow | almost OK with Cygwin, except my call to (dynamic-load "./bignums.so")hangs | yes, although scsh-0.6.6 didn't build on Cygwin (May 2006) | straightforward via SSAX | ||
| Tiny Scheme | Sure is tiny. | no | |||||||
| CMU Common Lisp | Has some rather ancient bindings, I think; "CLX" comes to mind | probably | don't think so | yes | Yes, but I haven't figured out how to use it :( | no; x86 unix only | |||
| Steel Bank Common Lisp | Has some rather ancient bindings, I think; "CLX" comes to mind | Dan Barlow seems to be working hard on it, and there seems to be a genuine community using it | in recent versions; may not be stable | doubt it | yes | Haven't figured it out either, but I'm encouraged to read here: sb-grovel : Tool for extracting constants and structures from C headers, for use in ~FFI code | doubt it | ||
| Sparse-to-nonexistent documentation | probably | yes | |||||||
| MIT 7.7.1 | "a simple two-dimensional line-graphics interface" |
| (apropos 'thread) yields a lot of interesting-looking hits | Apparently not | yes | ||||
| bigloo 2.5c | biglook | supposedly | coop | yes | no | yes | yes | ||
chickenVersion 2, Build 206 | `There's a Gtk binding somewhere for it, I think.', says Riastradh | Yes, according to Riastradh |
| SRFI-18, says Riastradh | yes, with this standalone gmp binding | Yes: "straightforward" and "easy", according to the home page A remarkably simple-looking alternate FFI is available from here | |||
| gauche 0.6.8 | Has GTK and OpenGL bindings, for what that's worth | supposedly | Supports lots o' SRFIs. | yes -- SRFI-18 on pthreads | yes | Apparently not | yes | ||
| scm 5d6 | probably not | Apparently not | moribund (1996) port | ||||||
| Rscheme v0.7.3.3-b20u, 2004-04-02 | no, even though it uses GNU gmp for something or other. | ||||||||
| stklos 0.57 | yes -- gtk | apparently not | yes; probably fast since the code appears to incorporate GNU gmp | no (fails to build), even though the file PORTING-NOTES implies that it can be made to build on Cygwin | |||||
| Stk | moribund: September 1999; presumably StkLos is its successor | ||||||||
| stalin 0.9 | hard to figure out how to use it | ||||||||
| Goo 0.153 | Apparently | A new language inspired by scheme. Unlike Arc, goo is "particularly object-oriented". | "experimental" | Apparently, in versions 155 and later | Apparently not | Apparently; a kludge to get it to talk to GTK is here | |||
| oaklisp | moribund: Jan 2000 | ||||||||
| petit chez | yes | not obviously free | |||||||
| Pico Lisp |
|
And these don't even exist yet.
| _implementation | gui-friendly | notes | threads | unicode | ~bignums | ~ffi | ~windoze |
|---|---|---|---|---|---|---|---|
| Minor Scheme | gtk 2.0 |
| yes indeed | yes | yes | yes indeed | no -- IA-32 Linux only |
| arc | Doesn't yet exist, at least not for public consumption | presumably | one would hope | presumably | I'd be surprised, although perhaps on Cygwin |
The main SRFI page has a list showing which implementations support which SRFIs.
Google's directories of scheme and Common Lisp
Ed Watkeys describes how different implementations handle threads.
Paul Graham has a list of lisps.
So what we have now is a zillion Schemes, about three of which [MIT, Chez, & Scheme48] are good bases left over from the eighties (excluding the Yale dialect), and most of the rest of which are kludges piled on top of kludges to try to make toy interpreters useful. There are a few other decent ones, too, like Gambit, Chicken, & Stalin.
-- Riastradh
In finest nerdly tradition, this page was generated by mzscheme from $Id: lisps.scm 3623 2007-05-24 21:13:05Z erich $.