diff options
Diffstat (limited to 'ghc/docs/release_notes/0-23-notes.lit')
-rw-r--r-- | ghc/docs/release_notes/0-23-notes.lit | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/ghc/docs/release_notes/0-23-notes.lit b/ghc/docs/release_notes/0-23-notes.lit new file mode 100644 index 0000000000..196592c84b --- /dev/null +++ b/ghc/docs/release_notes/0-23-notes.lit @@ -0,0 +1,253 @@ +Release~0.23 is the fifth public release of Glasgow Haskell. +It incorporates our new work for the second half of 1994. + +The announcement for this release is distributed as \tr{ANNOUNCE-0.23} +in the top-level directory. + +%************************************************************************ +%* * +\subsection[0-23-ports]{What machines GHC~0.23 runs on} +%* * +%************************************************************************ + +NOTE: the porting situation is essentially unchanged between 0.22 and +0.23, except for adding the native-code generator for DEC Alphas. + +We use Sun4s running SunOS~4.1.3 and DEC~Alphas running OSF/1~V2.0, so +those are the ``fully-supported'' platforms, unsurprisingly. Both +have native-code generators, for quicker compilations. + +The GHC hierarchy of Porting Goodness: (a)~Best is a native-code +generator; (b)~next best is a ``registerised'' +port; (c)~the bare minimum is an ``unregisterised'' port. +``Unregisterised'' Haskell programs are much bigger and slower, +but the port is much easier to get going. + +Here's everything that's known about GHC ports, as of 0.23: +\begin{description} +%------------------------------------------------------------------- +\item[Sun4 running SunOS~4.1.3 (\tr{sparc-sun-sunos4}):] +Fully supported, including native-code generator. + +%------------------------------------------------------------------- +\item[Sun4 running Solaris 2.x (\tr{sparc-sun-solaris2}):] +Fully supported, including native-code generator. +(NB: not tested before release.) + +%------------------------------------------------------------------- +\item[DEC Alpha running OSF/1 V2.0 (\tr{alpha-dec-osf1}):] +Fully supported, including native-code generator. + +%------------------------------------------------------------------- +\item[Sun3 running SunOS~4.1.3 (\tr{m68k-sun-sunos4}):] +GHC~0.23 works registerised. No native-code generator. + +%------------------------------------------------------------------- +\item[HP-PA box running HP/UX 9.x:] +An unregisterised port of 0.21 (last ``internal'' release before 0.23) +seems to work, except that floating-point is definitely busted. +0.23~should be the same. + +%------------------------------------------------------------------- +\item[Silicon Graphics box running IRIX 5.x:] +An unregisterised port of 0.21 +seemed to work. 0.23~should be the same. + +%------------------------------------------------------------------- +\item[DECstation (MIPS-based):] +An unregisterised port back around the time of 0.17 seemed to work; +0.23~should be the same, modulo a little bit-rot. + +%------------------------------------------------------------------- +\item[x86 PCs running Linux/NetBSD/FreeBSD:] +This really needs a native-code generator to be viable. No +recent progress. + +%------------------------------------------------------------------- +\item[GRIP multiprocessor:] +GRIP is a 68020-based multiprocessor for running parallel Haskell +programs; too bad we have the only machine! We run GHC~0.16 on it, +with no plans to upgrade. + +We are working on other parallel stuff. Stay tuned. + +%------------------------------------------------------------------- +\item[NeXT box running whatever NeXTs run:] +Carsten Schultz succeeded with a ``registerised'' port of GHC~0.19. +There's probably a little bit-rot since then, but otherwise it should +still be fine. Had a report that things were basically OK at 0.22. + +%------------------------------------------------------------------- +\item[Macintosh, using MPW:] +As mind-blowing at it may seem, David Wright in Tasmania has actually +gotten GHC to run on a Macintosh. Ditto James Thomson here at Glasgow. +You may be able to get Thomson's from here. (Not sure that it will +excite you to death, but...) +\end{description} + +%************************************************************************ +%* * +\subsection[0-23-config]{New configuration things in 0.23} +%* * +%************************************************************************ + +Essentially, upgraded to Autoconf~2. Probably the easiest way to see +what all the options are now is to type \tr{./configure --help} and +look at the stuff near the end. + +%************************************************************************ +%* * +\subsection[0-23-user-visible]{User-visible changes in 0.23, 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''.) Some day, we will stop doing this to you :-) + +Monadic I/O has taken yet another shake-up; that is outlined in the +next section. + +To use the 1.3-DRAFT I/O features, you use a \tr{-fhaskell-1.3} flag. +This also nets you, from your Prelude, the \tr{Maybe} and \tr{Either} +types, and the functions \tr{thenMaybe}, \tr{curry}, and \tr{uncurry}. + +The driver supports a heap-and-stack-sizes scaling flag. For example, +\tr{-Rscale-sizes2} would cause the driver to use twice as much +heap/stack space as it would otherwise. This is a convenient way to +move between machines with differing memory setups (e.g., 32-bit vs +64-bit) without changing millions of -H flags in a Makefile. Note: +something like \tr{-Rscale-sizes1.5} is OK, too. + +``Lit-lit'' literals are now overloaded. They can be any +\tr{_CCallable} type, not just \tr{_Addrs}. The price of this extra +convenience is that you sometimes have to insert a type signature. + +The shift-right primitive-operation, \tr{shiftR#}, has been renamed +and clarified to \tr{shiftRA#} (arithmetic). A new prim-op +\tr{shiftRL#} (logical) has been added. + +Comparable shift primitive-ops on \tr{Int#s} (rather than \tr{Word#s}) +have been added: \tr{iShiftL#}, \tr{iShiftRA#}, and \tr{iShiftRL#}. +Long live high-level languages! + +%************************************************************************ +%* * +\subsection[0-23-io]{New in I/O, esp. ``monadic,'' esp. ``1.3''} +%* * +%************************************************************************ + +GHC~0.23 is still a Haskell~1.2 compiler. Do nothing weird, and it +should work exactly as before. + +If you give GHC a \tr{-fhaskell-1.3} flag (both compile and link time, +please!), it will use a VERY EARLY, LARGELY UNTESTED implementation of +the DRAFT 1.3 I/O PROPOSAL. + +The \tr{PreludeGlaIO} interface, which was based on a long-ago 1.3 I/O +proposal, is DEAD. It was in a pretty bad state, anyway. +Putting \tr{PreludeGlaIO} code through as 1.3 code, I got pretty +far with just these few impedance-matching definitions: +\begin{verbatim} +> type Void = () +> returnIO = return +> thenIO = (>>=) +> mapIO :: (a -> IO b) -> [a] -> IO [b] +> mapIO f = accumulate {-was:listIO-} . map f +\end{verbatim} + +We supply the DRAFT 1.3 I/O PROPOSAL in \tr{ghc/docs/io-1.3/}. +It is in HTML format. + +We still give access to our underlying \tr{PrimIO} monad, via the +\tr{PreludePrimIO} interface. This is the level at which \tr{_ccall_s} +operate. It should still be quite solid, and counts as a good fall-back +position when the 1.3-DRAFT stuff dies on you. See the User's Guide. + +%************************************************************************ +%* * +\subsection[0-23-support]{New in support tools (e.g., profiling)} +%* * +%************************************************************************ + +The reports from profiling should be a bit tidier. The ``automagic'' +cost-centres for, e.g., ``all the CAFs in module X'', will now be +reported against \tr{CAFs_in_... X}. Which seems fair enough. + +GHCI---an INTERPRETER for Glasgow Haskell! The brainchild and work of +Alastair Reid, before he defected to the Enemy at Yale. Accepts full +Glasgow Haskell, including many extensions. Can mix interpreted and +compiled code, the Prelude being a notably case of the latter. +MASSIVE HACK VALUE! The problem is it doesn't quite compile under +0.23 (I ran out of time), and some of its dodgy bits (used to mix +interpreted and compiled code) need upgrading to work with the new +info tables. It lives in \tr{ghc/compiler} and below, notably the +\tr{interpreter} subdirectory. Don't be shy now---roll up your +sleeves and strut your hacking stuff! + +%************************************************************************ +%* * +\subsection[0-23-new-in-compiler]{New in the compiler proper} +%* * +%************************************************************************ + +The compiler is quite a bit faster at compiling, {\em without} +\tr{-O}. We are in the HBC league now. I don't remember all the +HACKs that we threw in to make this happen :-) + +New-format ``info tables'' (work by Bryan O'Sullivan and friends). +Essentially, static info used by the garbage-collector has been moved +one indirection further away, into a ``rep table,'' of which there are +a fixed number. So the same GC info isn't replicated over and over +again. This is our main space-savings gain in 0.23. + +A native-code generator for the DEC Alpha. Jim Mattson did it in one +weekend. What a great system! + +Rather than have a separate Yacc-parser process that spews a long +``prefix form'' string into the compiler, the compiler now just does a +\tr{_ccall_ yyparse} and then walks the resulting parse tree directly. +(Not quite {\em that} simple, but... still pretty cool.) + +A {\em selective} lambda-lifter. (Simon is very excited about its +selectiveness.) That means it only does lambda-lifting if there is a +benefit in doing so. It's done on the STG syntax (quite late in the +compilation). + +%************************************************************************ +%* * +\subsection[0-23-new-in-libraries]{In the prelude and runtime support} +%* * +%************************************************************************ + +PackedStrings (now called \tr{_PackedString}s) are now a built-in +type, just like \tr{Int}s, say. Their interface is described with the +Glasgow extensions in the User's Guide. There is also a +``extensions-free'' interface (no underscores on the front of names) +which you can get at as a system library (\tr{-syslib ghc}). + +The pretty-printing code that we use in GHC is now available in the +GHC system library (\tr{-syslib ghc} and \tr{import Pretty}). We +would claim it is more ``industrial strength'' than the one in the HBC +system library... + +Because of name-grabbing by the DRAFT-1.3-I/O, two functions in the +HBC library's \tr{Parse} module have been renamed: \tr{(>>)} is now +\tr{act}, and \tr{fail} is now \tr{failP}. (We will change these +again if Lennart does something differently.) + +%************************************************************************ +%* * +\subsection[0-23-new-elsewhere]{Other new stuff} +%* * +%************************************************************************ + +We've added a new utility, \tr{pphs}, for pretty-printing Haskell code +in LaTeX documents. It was written by Andrew Preece, a student at +Glasgow. The code is in \tr{ghc/CONTRIB/pphs}. + +Over in literate-land, we've hidden a copy of a slightly-tweaked +\tr{texi2html} script (in \tr{literate/texi2html/texi2html}). This is +probably the most painless way to turn ``literate'' things into +Webbable HTML documents. (Use our literate stuff to make Texinfo +files, then convert with \tr{texi2html}.) NB: not really tested. |