Release~0.19 was the third public release of this compilation system. It incorporates our new work for the last half of 1993. The announcement for this release is distributed as \tr{ANNOUNCE-0.19} in the top-level directory. %************************************************************************ %* * \subsection[0-19-user-visible]{User-visible changes in 0.19, including incompatibilities} %* * %************************************************************************ You'll need to recompile everything if you're switching from a previous version of GHC. (If you don't, you'll get ``consistency errors''.) Default declarations: in. Derived instances of \tr{Ix} and \tr{readsPrec} (\tr{Text} class): in. (Random Prelude instances of weird things: in.) You can avoid the \tr{readsPrec} methods by using the \tr{-fomit-derived-read} option. Should be {\em faster}, for two reasons: (1)~A native-code generator for the SPARC architecture (avoids C compilation time); (2)~an array-based [vs naive list-based...] substitution mechanism in the typechecker. Using \tr{-O2} or \tr{-fvia-C} avoids the native-code generator. (Shouldn't be too much faster, because we spent a lot of the winnings :-() \tr{MkInt} and friends {\em renamed}: \tr{MkInt}, \tr{MkChar}, \tr{MkFloat}, \tr{MkDouble}, and \tr{MkInteger} are now \tr{I#}, \tr{C#}, \tr{F#}, \tr{D#}, and \tr{J#}, respectively. We won't change them again, we promise. \tr{-i}/\tr{-I} flags changed: You used to specify directories to search for interface files with \tr{-I }; now you do it with \tr{-i} [{\em no space after the \tr{-i}}] (same as HBC). \tr{-I} is reserved for when doing \tr{-cpp} and for the C compiler, when it is run. Renaming, feature horribilis that it is, is more-or-less fully implemented. The User's Guide lists one or two exceptions. Specialised versions of overloaded functions: these are created automagically with \tr{-O}, and also when you ask for them with \tr{SPECIALIZE} pragmas. See the User's Guide for how to do this (same as HBC). (We don't have specialised instance declarations yet.) GHC tries hard to do inlining (or ``unfolding'') across module boundaries; just look at \tr{-O}-produced interface files. You can enliven this process with \tr{INLINE} pragmas. The \tr{__GLASGOW_HASKELL__} CPP directive is only set when pre-processing Haskell source (and not when pre-processing generated C). Revised scheme for using system-provided libraries (e.g., the HBC library). Just use a \tr{-syslib } option when compiling and linking. See the User's Guide for details. %************************************************************************ %* * \subsection[0-19-new-docs]{New documentation} %* * %************************************************************************ See \tr{ghc/docs/README} for a full list of documentation. The updated User's Guide has new sections including: (a)~advice for creating smaller and faster programs more quickly, and (b)~about the HBC library [stolen documentation]. We've dropped papers from the distribution (they're big, and you can get them easily anyway); instead, we provide abstracts of all documents about all relevant work at Glasgow; see \tr{ghc/docs/abstracts}. New: ``A Simple Country Boy's Guide to Monadic-Style Programming'' (Will Partain). In \tr{ghc/docs/simple-monad.lhs}. %************************************************************************ %* * \subsection[0-19-new-in-compiler]{New in the compiler proper} %* * %************************************************************************ Strictness analyser: produces/handles ``nested'' strictness -- e.g., \tr{U(SLL)} means ``this single-constructor argument is strict, and it is also strict in its first component.'' There's also ``absence analysis'' in there: \tr{U(ASA)} means ``strict in the second component, and the first/third are not used at all.'' New simplifier: the program-transformation engine in the middle of the compiler. The ``old simplifier,'' primarily the work of Andr\'e Santos, has retired to an Old Simplifier's Home on the coast of Brazil, where it is collecting a well-deserved monadic pension. %************************************************************************ %* * \subsection[0-19-new-in-libraries]{In the prelude and runtime support} %* * %************************************************************************ A couple of new functions in the @PackedString@ module that comes with the system. Mentioned in the User's Guide. The HBC library has been upgraded to match the latest HBC release (0.999.5). We now support the \tr{Native} and \tr{NameSupply} modules, which we didn't before. Alastair Reid's implementation of ``stable pointers,'' which he uses to do callbacks with the X Window System (yow!), is in. I (WDP) don't know about documentation.... send mail if you need to know. %************************************************************************ %* * \subsection[0-19-new-ports]{In the porting department} %* * %************************************************************************ We use Sun4s running SunOS~4.1.3, so those are the best-supported machines. For these, we have a native-code generator (the best); next best is a ``registerised'' port; the bare minimum is an ``unregisterised'' port. The 0.19 infrastructure for ``stealing'' registers for a registerised port (using a GCC extension) is much more robust---take note, brave porters. Here's everying that's known about the porting world: \begin{description} %------------------------------------------------------------------- \item[Sun3 running SunOS~4.1.3:] A registerised port is done; could be made available. %------------------------------------------------------------------- \item[GRIP multiprocessor:] 68020-based multiprocessor for running parallel Haskell programs. A registerised port is done; too bad we have the only machine! If you have something parallel you {\em really} wanted to run on it, please get in touch with us. %------------------------------------------------------------------- \item[HP-PA box running HP/UX:] An unregisterised port of 0.17 (0.16+portability fixes) seems to work, except that floating-point is definitely busted. 0.19~should be no worse. %------------------------------------------------------------------- \item[DECstation (MIPS-based):] An unregisterised port of 0.17 works; 0.19~should be the same. %------------------------------------------------------------------- \item[DEC Alpha running OSF/1:] We've done an unregisterised port (unreleased), and a registerised port is not far off. %------------------------------------------------------------------- \item[Sun running Solaris 2.x:] We've started on this ourselves and foresee no obstacle to a ``registerised'' port. Not sure about native-code... %------------------------------------------------------------------- \item[x86 PCs running Linux:] This really needs a native-code generator to be viable. We hope the elves will give us one for Christmas! %------------------------------------------------------------------- \item[Macintosh, using MPW:] As mind-blowing at it may seem, David Wright in Tasmania has actually gotten GHC to run on a Macintosh. I believe it's still in the ``you can do it, but you don't want to'' stage. \end{description} %************************************************************************ %* * \subsection[0-19-new-elsewhere]{New elsewhere} %* * %************************************************************************ In the ``literate programming'' stuff that happens to come with GHC: a few bug fixes, plus a significant contribution from Chris Toshok (\tr{toshok@cs.uidaho.edu}) of ``lit2html'' stuff; i.e., to convert your literate programs into HTML, the Hypertext Markup Language used on the World-Wide Web. I (WDP) am not sure it's completely finished, or exactly what you invoke to do what, but it seems Way Cool.