1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
The Glasgow Haskell Compiler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We are happy to announce the first full release of the Glasgow Haskell
Compiler (GHC, version 0.10). It is freely available by FTP; details
appear below.
To run this release, you need a Sun4, probably with 16+MB memory, and
GNU C (gcc), version 2.1 or greater, and "perl". If building from
source, you will need Chalmers HBC, version 0.998.x.
We hope you enjoy this system, and we look forward to hearing about
your successes with it! Please report bugs to
glasgow-haskell-bugs@dcs.glasgow.ac.uk and direct general queries to
glasgow-haskell-request@<same>.
Simon Peyton Jones
(and his GRASPing colleagues)
Why a Haskell programmer might want to use GHC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 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.)
* An extensible I/O system is provided, based on a "monad" [1]. (The
standard Haskell I/O system is built on this foundation.)
* A number of significant language extensions are implemented:
- Fully fledged unboxed data types [2].
- 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 the *space* [3].
* 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.
* Performance: programs compiled with GHC "usually" beat
Chalmers-HBC-compiled ones. If you find programs where HBC wins,
send them to us :-).
* We have a pretty good test suite, and this version passes
practically all of it. (Yes, it can compile itself, too.) We hope
you will find the system to be robust.
Why a functional-language implementor might want to use GHC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* We have tried very hard to write the compiler in a modular and
well-documented way, so that other researchers can modify and extend
it. One of our goals is specifically to provide a framework to
support others' work. Several people are already using it in this
way.
* 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 [4].
* Various performance-measurement hooks.
Main shortcomings
~~~~~~~~~~~~~~~~~
* No interactive system. This is a batch compiler only. (Any
volunteers?)
* Compiler is greedy on resources. Going via C doesn't help here.
* This system should run on any Unix box. We haven't had time to do
any non-Sun4 ports. Help or prodding welcome.
References
~~~~~~~~~~
All these papers come with the distribution [in ghc/docs/papers].
[1] "Imperative functional programming", Peyton Jones & Wadler, POPL '93
[2] "Unboxed data types as first-class citizens", Peyton Jones &
Launchbury, FPCA '91
[3] "Profiling lazy functional languages", Sansom & Peyton Jones,
Glasgow workshop '92
[4] "Implementing lazy functional languages on stock hardware", Peyton
Jones, Journal of Functional Programming, Apr 1992
How to get it
~~~~~~~~~~~~~
This release is available, in whole or in part, from the usual Haskell
anonymous FTP sites, in the directory pub/haskell/glasgow:
nebula.cs.yale.edu (128.36.13.1)
ftp.dcs.glasgow.ac.uk (130.209.240.50)
animal.cs.chalmers.se (129.16.225.66)
(Beleaguered NIFTP users within the UK can get the same files from
Glasgow by using a <FP>/haskell/glasgow prefix, instead of
pub/haskell/glasgow. Also, we are mirrored by src.doc.ic.ac.uk, in
languages/haskell/glasgow, and you can get files from there by every
means known to humanity.)
These are the available files:
ghc-0.10-src.tar.Z The basic source distribution; assumes you
will compile it with Chalmers HBC, version
0.998.n, on a Sun4, for which you have GNU C
(gcc) version 2.1 or greater. About 3MB.
ghc-0.10-bin-sun4.tar.Z A binary distribution -- avoid compiling
altogether! For SunOS 4.1.x; assumes you
have GNU C (gcc) version 2.x around...
ghc-0.10-patch-* Patches to the original distribution. There
are none to start with, of course, but there
might be by the time you grab the files.
Please check for them.
Once you have the distribution, please follow the pointers in the
ghc/README file to find all of the documentation in and about this
release.
|