Release notes for version 4.08 (July 2000)User-visible compiler changesNew profiling subsystem, based on cost-centre stacks.
See .The x86 native code generator has been reworked
considerably, and now works reliably. Using the NCG rather
than compiling via C reduces compilation times by roughly a
half while having minimal effect on the run-time of the
compiled program (about 2-4% slower, worse for floating-point
intensive programs).The NCG is used by default for non-optimising compiles.
You can use it with by adding the
flag to GHC's command
line, after .Implicit parameters. This Haskell extension gives a
statically-typed version of dynamic scoping that avoids the
worst problems of dynamic scoping in lisp. See the
POPL paper
for more details. It is enabled by .
New DEPRECATED pragma for marking
outdated interfaces as deprecated.New flag: , which
dumps a file M.imports that contains the
(allegedly) minimal bunch of imports needed by the current
module.New “package” system for libraries. See
for the details.The long-standing bug that caused some programs which
used trace to
exit with a deadlock error has been fixed.Trying to put into a full MVar will now
raise a PutFullMVar
exception.If a thread is about to be garbage collected, because it
is waiting on an MVar that no other thread
has access to, then it will now be sent the BlockedOnDeadMVar
exception.A thread that is found to be blocked against itself
(i.e. is black holed) is now sent a
NonTermination exception.Operations which may block, such as
takeMVar, raiseInThread,
and several I/O operations, may now receive asynchronous
exceptions even in the scope of a
blockAsyncExceptions. These are called
interruptible operations. See for more details.Result type signatures now work.A truckload of bugfixes.User-visible library changesThe FFI has been revised and expanded; see , , and .HaXml, a library for parsing and generating XML, has
been added to the text package ().The QuickCheck library for performing
functional testing has been added to the
util package ().Two new experimental interfaces to arrays:
IArray for immutable arrays (), and MArray for
mutable arrays (). Comments on
these interfaces are welcome; eventually we'd like them to
replace ByteArray,
MutableArray, IOArray,
and STArray.New function: tryTakeMVar.hPutBuf,
hPutBufBA, hGetBuf, and
hGetBufBA, have been renamed to
hPutBufFull,
hPutBufBAFull,
hGetBufFull, and
hGetBufBAFull. Functions with the old
names still exist, but have slightly different semantics. See
for more details.Internal changesCon is gone; the
CoreExpr type is simpler.NoRepLits have gone.Better usage info in interface files, which means less
recompilation.CCall primop is tidied up.Constant folding is now done by Rules.Lots of hackery in the simplifier.Improvements in CPR and strictness analysis.