Merge branch 'rtoy-wrap-option-args'
[maxima.git] / README-lisps.md
blobdfdf7ecebaacfe228277e37e178bc0e089b3a1db
1 Notes on Lisp implementations for Maxima:
2 =========================================
4 Clisp, CMUCL, Scieneer Common Lisp (SCL), GCL (ANSI-enabled only),
5 ECL, ABCL and SBCL can compile and execute Maxima.
6 Allegro Common Lisp (ACL) and CCL might also work, but have not
7 been fully tested.
9 Ports to other ANSI Common Lisps should be straightforward
10 and are welcome; please post a message on the Maxima mailing list
11 if you are interested in working on a port.
13 When Maxima is recompiled, the Lisp implementation is selected by
14 an argument of the form `--enable-foolisp` for the configure script.
15 `./configure --help` shows a list of the Lisp types recognized by
16 configure (among other options). It is possible to specify several
17 Lisp type(s) you want Maxima to be built with at the same time.
18 configure tries to autodetect the Lisp type if it is not specified,
19 but it has been reported that autodetection can fail.
22 Comparison of execution times (in seconds)
23 ------------------------------------------
25 As of 2023-05-18 (using the current development version of Maxima)
26 the `run_testsuite()` function needed the following times for
27 these different Lisp versions and produced so many testsuite failures:
29 ### Ubuntu 20.04, 64 bit
31     Lisp            run time (real)   testsuite failures
32     sbcl-2.3.0        85              none
33     gcl-2.6.14       160              none
34     cmucl-21d        209              none
35     ccl-1.12.1       291              none
36     acl-10.1         372              183
37     ecl-21.2.1       546              none
38     clisp-2.49.92    853              1
39     abcl-1.9.1      1320              10
42 Clisp <http://clisp.org>
43 ------------------------
45 Clisp can be built with readline support, so Maxima has
46 advanced command-line editing facilities when built with it.
48 Clisp is compiled to bytecodes, so Maxima running on Clisp is
49 substantially slower than on Lisps compiled to machine instructions.
50 On the other hand, Clisp contains code from CLN <https://www.ginac.de/CLN/>,
51 a library for efficient computations with all kinds of numbers in
52 arbitrary precision. Another advantage of Clisp is that byte code
53 resulting in compiling a program on one computer might work on a
54 computer running a different Clisp version. Also Clisp uses an
55 extremely efficient memory handling which means it might not run
56 out of memory where ECL, SBCL and GCL do.
58 CLISP version 2.49 has a bug that causes it to output garbled data
59 if the front-end is fast enough to acknowledge a data packet while
60 the next data packet is still being prepared.
62 There are Clisp implementations for many platforms including
63 MS Windows and Unix-like systems.
66 CMUCL <https://cmucl.org/>
67 --------------------------
69 CMUCL is a fast option for Maxima on platforms where it is
70 available. The rmaxima front-end provides advanced line-editing
71 facilities for Maxima when compiled with CMUCL. rlwrap is available
72 from: <https://github.com/hanslub42/rlwrap>
74 CMUCL versions: 18e and 19a and later are known to work.
76 There are CMUCL implementations only for Unix-like systems
77 (not MS Windows).
80 Scieneer Common Lisp (SCL) <https://web.archive.org/web/20171014210404/http://www.scieneer.com/scl/>
81 ----------------------------------------------------------------------------------------------------
83 Scieneer Common Lisp (SCL) is a fast option for Maxima for a
84 range of Linux and Unix platforms.  The SCL 1.2.8 release and later
85 are supported.  SCL offers a lower case, case sensitive, version which
86 avoids the Maxima case inversion issues with symbol names.  Tested
87 front end options are: Maxima emacs mode available in the
88 interfaces/emacs/ directory, the Emacs imaxima mode available from
89 <https://sites.google.com/site/imaximaimath/>, and TeXmacs available from
90 <https://www.texmacs.org>
93 GCL <https://www.gnu.org/software/gcl/>
94 ---------------------------------------
96 GCL >= 2.6.14 is required to build Maxima.
98 GCL can be built with readline support, so Maxima has advanced
99 command-line editing facilities when built with it.
100 GCL produces a fast Maxima executable that profit from GCL's
101 fast bignum algorithms.
103 Only the ANSI-enabled version of GCL works with Maxima, i.e.,
104 when GCL is built, it must be configured with the `--enable-ansi` flag,
105 i.e., execute `./configure --enable-ansi` in the build directory
106 before executing make.
108 Whether GCL is ANSI-enabled or not can be determined by
109 inspecting the banner which is printed when GCL is executed;
110 if ANSI-enabled, the banner should say `ANSI`.
111 Also, the special variable `*FEATURES*` should include the keyword `:ANSI-CL`.
113 On Debian based Linux distributions you can enable/disable the ANSI version using:
114 dpkg-reconfigure gcl
116 There are GCL implementations for many platforms
117 including MS Windows and Unix-like systems.
120 SBCL <https://www.sbcl.org>
121 --------------------------
123 SBCL is a fork of CMUCL which differs in some minor details,
124 but most notably, it is simpler to rebuild SBCL than CMUCL.
125 For many tasks a Maxima compiled with SBCL is considerably faster than
126 GCL. For other tasks GCL is faster than SBCL.
128 As SBCL doesn't use readline it is recommended to use rmaxima for using
129 a command-line Maxima with SBCL. For common details of SBCL and CMUCL
130 See CMUCL above.
133 Allegro Common Lisp <https://franz.com/products/allegro-common-lisp/>
134 ---------------------------------------------------------------------
136 Maxima should work with Allegro Common Lisp, but
137 only limited testing has been done with these Lisp
138 implementations. User feedback would be welcome.
141 CCL <https://ccl.clozure.com/>
142 ------------------------------
144 CCL, formerly known as OpenMCL, is known to work with Maxima on
145 all platforms where ccl runs including Linux, Mac OSX, and Windows.
146 There are appear to be some bugs in the 32-bit version of CCL, but
147 the 64-bit version passes all tests.
150 ECL <https://common-lisp.net/project/ecl/>
151 ------------------------------------------
153 ECL is known to work with Maxima and passes the testsuite. ECL
154 runs on many platforms and OSes and is the lisp compiler used for
155 Maxima on Android. It is faster than CLISP, but seems to tend more
156 towards fragmenting the available memory. ECL tends to be slower
157 than GCL or SBCL but faster than CLISP.
159 ECL must be configured to use the C compiler, building Maxima with the
160 ECL bytecode compiler is (currently) not possible.  So do **not** use the
161 option `--with-cmp=no` when building ECL.
164 Armed Bear Common Lisp (ABCL) <https://www.abcl.org>
165 ----------------------------------------------------
167 ABCL's main feature is that is tightly integrated into Java.
168 That also means that it is an interpreter running in a virtual machine
169 which makes it even slower than Clisp. Also Java doesn't automatically
170 convert tail-recursive function calls to loops which means that in a
171 few functions might run out of stack space faster than other Lisps.