Different Versions of Yale Haskell Compared
There are currently three different platforms running Yale Haskell.
Yale Haskell runs on Lucid Common Lisp, CMU Common Lisp, and AKCL. This
document describes the differences between these systems.
Differences in performance between the different versions of Yale
Haskell reflect the underlying Lisp systems. The better the Lisp
system, the better the Haskell system built on it. However, getting
optimal performance from our Haskell system on top of a Common Lisp
system requires careful attention to the underlying compiler. Small
changes in the optimization settings or the addition of crucial
declarations can make significant differences in performance. We have
been doing most of our work using the Lucid system and have tuned it
more than the others. These comparisons are greatly influenced by the
amount of time we have spent tuning the system: the CMU version has
been tuned only a little and the AKCL version hardly at all.
The following timings are only approximate. They were obtained using
the timing functions provided by the Common Lisp system. All timings
were done on an unloaded Sparc 1. No attempt was made to account for
garbage collection, differences in heap size, or similar factors. We
don't intend these benchmark results to be taken as an exhaustive
comparison of the different Lisp implementations involved.
We have had no trouble moving our system to different hardware
platforms under the same Lisp system. Since the release is in source
form, we expect that users will be able to build on any hardware
platform supported by one the Lisps we have ported to. Probably the
only real constraint on portability is the requirement for a large
virtual memory space.
From the comp.lang.lisp FAQ:
Lucid Common Lisp runs on a variety of platforms, including PCs (AIX),
Apollo, HP, Sun-3, Sparc, IBM RT, IBM RS/6000, Decstation 3100,
Silicon Graphics, and Vax.
CMU Common Lisp is free, and runs on Sparcs (Mach and SunOs),
DecStation 3100 (Mach), IBM RT (Mach) and requires 16mb RAM, 25mb disk.
Kyoto Common Lisp (KCL) is free, but requires a license. Conforms to CLtL1.
It is available by anonymous ftp from rascal.ics.utexas.edu [126.96.36.199],
cli.com [188.8.131.52], or [184.108.40.206] (a machine in Japan)
in the directory /pub. AKCL is in the file akcl-xxx.tar.Z (take the
highest value of xxx). To obtain KCL, one must first sign and mail a
copy of the license agreement to: Special Interest Group in LISP,
c/o Taiichi Yuasa, Department of Computer Science, Toyohashi
University of Technology, Toyohashi 441, JAPAN. Runs on Sparc,
IBM RT, RS/6000, DecStation 3100, hp300, hp800, Macintosh II (under AUX),
mp386, IBM PS2, Silicon Graphics 4d, Sun3, Sun4, Sequent Symmetry,
IBM 370, NeXT and Vax. A port to DOS is in beta test as
We have not yet completed ports of Yale Haskell to any other Lisp
implementations, although we are likely to do so in the future.
The overall size of the Haskell system depends on the size of the
underlying Lisp system and how much unnecessary Lisp overhead has been
removed for the system. We have removed large Lisp packages (like
CLOS or CLX), but have not attempted to do any tree shaking. The size
of the saved images (including the Lisp system, the Haskell compiler,
and the compiled prelude) is
Lucid 10 meg
CMU 18 meg
The larger size of the CMU system is probably an artifact of their way
of saving the system.
There are three possible ways to compile a Haskell program. All
Haskell programs must be translated into Lisp. The generated Lisp can
then be interpreted, using no additional compilation time; compiled
with a `fast' but nonoptimizing Lisp compiler; or compiled with the
`slow' compiler that aggressively attempts to perform as many
optimizations as possible.
To time the `fast', nonoptimizing compiler, we have been using
(PROCLAIM '(OPTIMIZE (SPEED 3) (SAFETY 0) (COMPILATION-SPEED 3)))
and for the `slow', fully optimizing compiler, we have been using
(PROCLAIM '(OPTIMIZE (SPEED 3) (SAFETY 0) (COMPILATION-SPEED 0)))
so that the only difference is in the COMPILATION-SPEED quality.
Lucid does, in fact, provide two completely different compilers that
correspond to these optimize settings. For all three implementations,
it appears that that the effect of a higher compilation speed setting
is primarily in being less aggressive about inlining and making use of
The Haskell system itself (including the Prelude) is normally built
with the fully optimizing compiler.
To show just the Haskell to Lisp compilation time, here are the times
needed to compile the Prelude (about 2500 lines of Haskell code).
This does not include the time in the Lisp compiler or starting up the