-provides good profiling tools, supports ever richer I/O, and
-concurrency and parallelism. Our goal is to make it the "tool of
-choice for real-world applications".
-
-GHC 2.01 is quite different from 0.26 (July 1995), as the new version
-number suggests. (The 1.xx numbers are reserved for any Haskell-1.2
-compiler releases.) Changes worth noting include:
-
-.......
-
- * Concurrent Haskell: with this, you can build programs out of many
- I/O-performing, interacting `threads'. We have a draft paper
- about Concurrent Haskell, and our forthcoming Haggis GUI toolkit
- uses it.
-
- * Parallel Haskell, running on top of PVM (Parallel Virtual Machine)
- and hence portable to pretty much any parallel architecture,
- whether shared memory or distributed memory. With this, your
- Haskell program runs on multiple processors, guided by `par` and
- `seq` annotations. The first pretty-much-everyone-can-try-it
- parallel functional programming system! NB: The parallel stuff is
- "research-tool quality"... consider this an alpha release.
-
- * "Foldr/build" deforestation (by Andy Gill) is in, as are
- "SPECIALIZE instance" pragmas (by Patrick Sansom).
-
- * The LibPosix library provides an even richer I/O interface than
- the standard 1.3 I/O library. A program like a shell or an FTP
- client can be written in Haskell -- examples included.
-
- * Yet more cool libraries: Readline (GNU command-line editing),
- Socket (BSD sockets), Regex and MatchPS (GNU regular expressions).
- By Darren Moffat and Sigbjorn Finne.
-
- * New ports -- Linux (a.out) and MIPS (Silicon Graphics).
-
- * NB: configuration has changed yet again -- for the better, of
- course :-)
+provides good profiling tools, and concurrency and parallelism. Our
+goal is to make it the "tool of choice for real-world applications".
+
+GHC 2.01 is substantially changed from 0.26 (July 1995), as the new
+version number suggests. (The 1.xx numbers are reserved for further
+spinoffs from the Haskell-1.2 compiler.) Changes worth noting
+include:
+
+ * GHC is now a Haskell 1.3 compiler (only). Virtually all Haskell
+ 1.2 modules need changing to go through GHC 2.01; the GHC
+ documentation includes a ``crib sheet'' of conversion advice.
+
+ * The Haskell compiler proper (ghc/compiler/ in the sources) has
+ been substantially rewritten and is, of course, Much, Much,
+ Better. The typechecker and the "renamer" (module-system support)
+ are new.
+
+ * Sadly, GHC 2.01 is currently slower than 0.26. It has taken
+ all our cycles to get it correct. We fondly believe that the
+ architectural changes we have made will end up making 2.0x
+ *faster* than 0.2x, but we have yet to substantiate this belief;
+ sorry. Still, 2.01 (built with 0.29) is quite usable.
+
+ * GHC 2.01's optimisation (-O) is not nearly as good as 0.2x, mostly
+ because we haven't taught it about cross-module information
+ (arities, inlinings, etc.). For this reason, a
+ 2.01-built-with-2.01 (bootstrapped) is no fun to use (too slow),
+ and, sadly, that is where we would normally get .hc (intermediate
+ C; used for porting) files from... (hence: none provided).
+
+ * GHC 2.01 is much smarter than 0.26 about when to recompile. It
+ will abort a compilation that "make" thought was necessary at a
+ very early stage, if none of the imported types/classes/functions
+ *that are actually used* have changed. This "recompilation
+ checker" uses a completely different interface-file format than
+ 0.26. (Interface files are a matter for the compilation system in
+ Haskell 1.3, not part of the language.)
+
+ * The 2.01 libraries are not "split" (yet), meaning you will end up
+ with much larger binaries...
+
+ * The not-mandated-by-the-language system libraries are now separate
+ from GHC (though usually distributed with it). We hope they can
+ take on a "life of their own", independent of GHC.
+
+ * All the same cool extensions (e.g., unboxed values), system
+ libraries (e.g., Posix), profiling, Concurrent Haskell, Parallel
+ Haskell,...
+
+ * New ports: Linux ELF (same as distributed as GHC 0.28).