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.

Reply via email to