Here, for your interest, is a freshly-updated summary of the current state of
Haskell implementations, at least those known to us.
Simon Peyton Jones, Glasgow University.
Haskell: Current status
~~~~~~~~~~~~~~~~~~~~~~~~
[Simon Peyton Jones wrote the original version of this document, and
he still maintains it. Many others, including all the main
implementors, have helped. Please send corrections/comments to
[EMAIL PROTECTED]
Original version: April 1991; last checked: February 1993]
The Haskell language
~~~~~~~~~~~~~~~~~~~~
In the mid-1980s, there was no "standard" non-strict,
purely-functional programming language. A language-design committee
was set up in 1987, and the Haskell language is the result.
The Haskell committee released its report on 1 April 1990. A revised
"Version 1.2" appeared in SIGPLAN Notices 27(5) (May 1992), along with
a tutorial on Haskell by Hudak and Fasel. There is no further
language development happening right now.
You may learn more about the development of Haskell by consulting the
"haskell" mailing-list archive, in pub/haskell/list-archive (at least
at the Glasgow archive site).
The Haskell mailing list
~~~~~~~~~~~~~~~~~~~~~~~~
There is an electronic mailing list to discuss technical issues
related to Haskell. To join this list, send your request to
"[EMAIL PROTECTED]" (Europe and Australasia) or
"[EMAIL PROTECTED]" (rest of world) as appropriate.
Standard archive sites for Haskell stuff
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can use anonymous FTP (username: anonymous; password: your e-mail
address) to the following hosts, where you will find things in
"pub/haskell" and its subdirectories.
Site Host name Raw IP#s (these can change)
Chalmers ftp.cs.chalmers.se 129.16.225.66
Glasgow ftp.dcs.glasgow.ac.uk 130.209.240.50
Yale nebula.cs.yale.edu 128.36.13.1
UKUUG src.doc.ic.ac.uk 146.169.2.1
(languages/haskell mirrors Glasgow)
Note: Specialised material related to a specific implementation (e.g.,
HBC binaries for the Obscuro 1000) may only be at the implementation's
"home site".
Freely-available implementations of Haskell
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This information was mostly supplied by the implementors.
All of the systems are provided with sources, and often with pre-built
binaries for popular machines. It will be obvious if you peer into
one of the FTP sites...
The Glasgow Haskell compiler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Glasgow compiler has the following attributes:
* A batch compiler that runs under Unix. The current version is 0.10,
released in December, 1992 (the first usable public release).
* Known to work on Sun3s and Sun4s.
* Almost all of Haskell is implemented. In particular, the full range
of data types is supported: arbitrary precision integers, rationals,
double-precision floats, and "real" arrays with O(1) access time.
(The release notes list all unimplemented language features.)
* Written in Haskell, generates C as its target code -- hence some
chance of wide portability.
* Specifically designed to act as a "motherboard" into which others
can "plug in" their own strictness analyser, profiler, front end,
back end, or other special pass.
* An extensible I/O system is provided, based on a "monad". (The
standard Haskell I/O system is built on this foundation.)
* A number of significant language extensions are implemented:
- Fully fledged unboxed data types.
- Ability to write arbitrary in-line C-language code, using
the I/O monad to retain referential transparency.
- Incrementally-updatable arrays, also embedded in a monad.
- Mutable reference types.
* By default, the system uses a generational garbage collector which
lets you run programs whose live data is significantly larger than
the physical memory size before thrashing occurs. (Conventional
2-space GC starts thrashing when the live data gets to about half
the physical memory size.)
* A new profiling system is supplied, which enables you to find out
which bits of your program are eating both *time* and *space*.
* Good error messages. Well, fairly good error messages. Line
numbers are pretty accurate, and during type checking you get
several (accurate) error reports rather than just one.
* Execution performance: similar to Chalmers hbc.
* We have a pretty good test suite, and the current version (0.10)
passes practically all of it. (Yes, it can compile itself, too.) We
hope you will find the system to be robust.
* Highly configurable runtime system. Heavy use of C macros means
that you can modify much of the storage representation without
telling the compiler. For example, the system comes with 4
different garbage collectors! (all working)
* Internals: extensive use of the second-order lambda calculus as an
intermediate code; the Spineless Tagless G-machine as evaluation
model
Current status (February 1993):
If you are a Haskell programmer: the system is entirely
serviceable, but may exhibit some quirks (inevitable in a new
system). Don't bet the farm on it (just yet).
If you are a Haskell implementor: it is useful now and may be
the best Haskell for your purposes.
Contact:
Simon Peyton Jones
Department of Computing Science
Glasgow University
Glasgow, Scotland
G12 8QQ
[EMAIL PROTECTED]
The Glasgow Haskell distribution is available from the standard
archive sites, in pub/haskell/glasgow. It is also available by NIFTP
(UK only); please ask if you need details.
Some papers by members of the Glasgow FP group are in pub/glasgow-fp,
at ftp.dcs.glasgow.ac.uk (only).
The Chalmers compiler: hbc/hbi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Chalmers Haskell-B compiler implements full Haskell 1.2, as well
as some optional extensions. It is written by Lennart Augustsson, and
based on the classic LML compiler by Augustsson and Johnsson.
Status (February 1993):
* hbc is a batch compiler that runs on a Unix(-like) machine. The
current version is 0.999.3, released in February 1993.
* The interactive system hbi is an interpreter for Haskell, but it can
also load code compiled with hbc.
* Generates native code and runs on SUN4, DECstation, Sequent
Symmetry, SUN3, and PCs running Linux or 386BSD. (Unsupported
versions for NS32000, RT/PC, CRAY, SUN3, VAX, ARM, and RS6000.)
* Has several optional extensions to Haskell. The most interesting
ones are probably the existentially quantified types and the
extended set of I/O requests.
* Comes with a library of useful modules such as: list utilities, file
I/O utilities, pretty printing, parsing, bit manipulation, random
numbers, and more.
* Can generate code for both time and heap profiling.
* Haskell and LML code can be mixed.
* Comes with a nice (but as yet incomplete) interface to X windows.
This interface, called Fudgets, is written from the Xlib level and
up in LML, but it can be used from Haskell as well.
* Calling (side effect free) C functions from Haskell/LML is possible.
* Comes with three different garbage collectors, which may be choosen
at run time.
Contact:
Lennart Augustsson
Department of Computer Sciences
Chalmers University of Technology
S-412 96 Goteborg
SWEDEN
[EMAIL PROTECTED]
The hbc distribution is available from the standard archive sites, in
pub/haskell/chalmers.
The Yale compiler
~~~~~~~~~~~~~~~~~
The Yale Haskell compiler (Y2.0) has the following attributes:
* A compiler from Haskell to Lisp, built on top of Common Lisp. An
interactive, integrated Haskell programming environment. Supports
both large scale Haskell programming and educational use.
* Written in Lisp; ports to any machine supporting Lucid, CMU, or akcl
lisps. (A pre-built distribution for SPARC machines is available.)
* Generates Lisp as its target code -- hence highly portable.
* Interactive programming environment based on the Emacs editor.
Comes with an online Haskell tutorial.
* Easy to call out to Lisp (or C, depending on the Lisp being used)
functions.
* High quality code. The ultimate code quality will depend on the
underlying Lisp system but the Yale compiler will generate
declarations which will allow the more sophisticated Lisp systems to
produce the best possible code.
The next release (available March 93) is expected to include:
* Ports to all major Lisp systems
* Faster compilation
* New monad-based model for input/output, which allows calls to
non-Haskell procedures without losing referential transparency
* Compiler passes and data structures will be accessable from Haskell,
allowing new or different phases written in Haskell to be inserted.
* Strict data constructors
* Interfaces tuned to the Mac and PC
* More support for separate compilation and large scale Haskell
programs.
* Compiler pragmas to create specialized versions of overloaded
operators.
* Language extensions to support efficient manipulation of state.
The beta release is available in two forms: full sources which build
on Lucid, akcl, and CMU common lisp and a binary version for the Sparc
system built on CMU lisp. These are available the haskell/yale
directory of the ftp sites.
Contact:
John Peterson
Yale University
Department of Computer Science
New Haven, CT 06520
UNITED STATES
[EMAIL PROTECTED]
The Gofer interpreter
~~~~~~~~~~~~~~~~~~~~~
The Gofer interpreter implements a subset of Haskell, and uses an
experimental variant of Haskell's innovative `type classes' for
overloading. It extends Haskell in some ways, and subsets it in
others. The most significant features of Haskell not currently
supported are: modules, arrays, overloaded numeric constants, default
declarations, derived instances and contexts in datatype definitions.
The Gofer interpreter is written in C. It runs on Sun3's, Sun4's, and
IBM PC's, Macs (see note below), Atari ST, Commodore Amiga, Acorn
Archimedes and others.
Version 2.28 of Gofer has just been released (February 1993). New
features added with this release include:
* Support for constructor classes and overloaded monad comprehensions.
* A naive `compiler' translating Gofer programs to C.
* A number of small enhancements and bug-fixes.
Contact:
Mark P. Jones
Yale University
Department of Computer Science
New Haven, CT 06520
UNITED STATES
[EMAIL PROTECTED]
The Gofer distribution is available from the standard archive sites
(see above), in pub/haskell/gofer.
MacGofer, a Gofer system with a full-blown Macintosh look-and-feel,
done (mostly?) by Kevin Hammond at Glasgow, is available in a
"macgofer" subdirectory.