Work around some nonconforming behavior in GCL
[maxima.git] / README.lisps
blob488e6d8b2d13c81e017e6cdbc2343457aaa1c054
1 Notes on Lisp implementations for Maxima:
3 Clisp, CMUCL, Scieneer Common Lisp (SCL), GCL (ANSI-enabled only),
4 ECL, ABCL and SBCL can compile and execute Maxima.
5 Allegro Common Lisp and OpenMCL might also work, but have not
6 been fully tested.
8 Ports to other ANSI Common Lisps should be straightforward
9 and are welcome; please post a message on the Maxima mailing list
10 if you are interested in working on a port.
12 When Maxima is recompiled, the Lisp implementation is selected by
13 an argument of the form `--enable-foolisp' for the configure script.
14 `./configure --help' shows a list of the Lisp types recognized by
15 configure (among other options). It is possible to specify several
16 Lisp type(s) you want maxima to be built with at the same time.
17 configure tries to autodetect the Lisp type if it is not specified,
18 but it has been reported that autodetection can fail.
20 --------------------------------------------------------------------
21 Comparison of execution times (in seconds) for the run_testsuite()
22 function for Maxima 5.36.0 as reported on the Maxima mailing list:
23               
24 64 Bit (Gentoo Linux):
26 gcl-2.6.12    152
27 sbcl-1.2.10   155
28 ccl-1.10      313
29 ecl-15.3.7    559
30 clisp-2.49   1060
32 32 Bit (Gentoo Linux)
33 sbcl-1.2.10  170
34 gcl-2.6.12   177
35 cmucl-20e    253
36 ccl-1.10     293
37 ecl-15.3.7   556
38 clisp-2.49   844
41 --------------------------------------------------------------------
42 Clisp <http://clisp.org>
44         Clisp can be built with readline support, so Maxima has 
45 advanced command-line editing facilities when built with it.
47 Clisp is compiled to bytecodes, so Maxima running on Clisp is
48 substantially slower than on Lisps compiled to machine instructions. 
49 On the other hand, Clisp contains code from CLN <http://www.ginac.de/CLN/>,
50 a library for efficient computations with all kinds of numbers in 
51 arbitrary precision. Another advantage of clisp is that byte code 
52 resulting in compiling a program on one computer might work on a
53 computer running a different Clisp version. Also Clisp uses an
54 extremely efficient memory handling which means it might not run
55 out of memory where ECL, SBCL and GCL do.
57 CLISP version 2.49 has a bug that causes it to output garbled data
58 if the front-end is fast enough to acknowledge a data packet while
59 the next data packet is still being prepared.
61 There are Clisp implementations for many platforms including 
62 MS Windows and Unix-like systems. 
64 Maxima compiled with a typical linux install of clisp 2.49.92
65 typically depends on the following libraries:
67  * libc
68  * libffcall
69  * libreadline
70  * libsigsegv
71  * libtinfo
72  * libunistring
74 --------------------------------------------------------------------
75 CMUCL <http://www.cons.org/cmucl/>
77         CMUCL is a fast option for Maxima on platforms where it is
78 available. The rmaxima front-end provides advanced line-editing
79 facilities for Maxima when compiled with CMUCL. rlwrap is available
80 from <https://github.com/hanslub42/rlwrap> .
82 CMUCL versions: 18e and 19a and later are known to work.
84 There are CMUCL implementations only for Unix-like systems
85 (not MS Windows).
87 --------------------------------------------------------------------
88 Scieneer Common Lisp (SCL) <http://www.scieneer.com/scl/>
90         Scieneer Common Lisp (SCL) is a fast option for Maxima for a
91 range of Linux and Unix platforms.  The SCL 1.2.8 release and later
92 are supported.  SCL offers a lower case, case sensitive, version which
93 avoids the Maxima case inversion issues with symbol names.  Tested
94 front end options are: maxima emacs mode available in the
95 interfaces/emacs/ directory, the emacs imaxima mode available from
96 https://sites.google.com/site/imaximaimath/, and TeXmacs available from
97 http://www.texmacs.org/
99 --------------------------------------------------------------------
100 GCL <http://savannah.gnu.org/projects/gcl/>
102         GCL versions starting with 2.4.3 can be built with readline
103 support, so Maxima has advanced command-line editing facilities
104 when built with it. GCL produces a fast Maxima exectuable that
105 profit from GCL's fast bignum algorithms.
107 Only the ANSI-enabled version of GCL works with Maxima, i.e.,
108 when GCL is built, it must be configured with the --enable-ansi flag,
109 i.e., execute ``./configure --enable-ansi'' in the build directory
110 before executing make.
112 Whether GCL is ANSI-enabled or not can be determined by 
113 inspecting the banner which is printed when GCL is executed;
114 if ANSI-enabled, the banner should say "ANSI".
115 Also, the special variable *FEATURES* should include the keyword :ANSI-CL.
117 There are GCL implementations for many platforms
118 including MS Windows and Unix-like systems.
120 Maxima compiled using a typical linux install using gcl 2.6.12
121 typically depends on:
123  * libc
124  * libgmp
125  * libreadline
126  * libx11
127  * gcc
129 --------------------------------------------------------------------
130 SBCL <http://www.sbcl.org>
132         SBCL is a fork of CMUCL which differs in some minor details,
133 but most notably, it is simpler to rebuild SBCL than CMUCL.
134 For many tasks a maxima compiled with SBCL is considerably faster than
135 GCL. For other tasks GCL is faster than SBCL.
137 As sbcl doesn't use readline it is recommended to use rmaxima for using
138 a command-line maxima with SBCL. For common details of SBCL and CMUCL
139 See CMUCL above.
141 Maxima compiled using a typical linux install using sbcl 1.4.10
142 typically depends on:
144  * libc
145  * zlib
147 --------------------------------------------------------------------
148 Allegro Common Lisp <http://franz.com/products/allegro-common-lisp/>
150         Maxima should work with Allegro Common Lisp, but
151 only limited testing has been done with these Lisp
152 implementations. User feedback would be welcome.
154 --------------------------------------------------------------------
155 CCL <http://ccl.clozure.com/>
157         CCL, formerly known as OpenMCL, is known to work with maxima on
158 all platforms where ccl runs including Linux, Mac OSX, and Windows.
159 There are appear to be some bugs in the 32-bit version of ccl,  but
160 the 64-bit version passes all tests.
162 --------------------------------------------------------------------
163 ECL <https://common-lisp.net/project/ecl/>
164     
165         ECL is known to work with maxima and passes the testsuite.  ECL
166 runs on many platforms and OSes and is the lisp compiler used for
167 maxima on android. It is faster than CLISP, but seems to tend more
168 towards fragmenting the available memory. ECL tends to be slower 
169 than GCL or SBCL but faster than CLISP.
171 ECL must be configured to use the C compiler, building Maxima with the
172 ECL bytecode compiler is (currently) not possible.  So do *not* use the
173 option "--with-cmp=no" when building ECL.
175 Maxima compiled using a typical linux install using ecl 16.1.2
176 typically only depends on:
178  * libc
180 --------------------------------------------------------------------
181 Armed Bear Common Lisp (ABCL) <https://common-lisp.net/project/armedbear/>
183 ABCL's main feature is that is tightly integrated into java.
184 That also means that it is an interpreter running in a virtual machine
185 which makes it even slower than clisp. Also java doesn't automatically
186 convert tail-recursive function calls to loops which means that in a
187 few functions might run out of stack space faster than other lisps.