ANNOUNCE: nhc98 1.04 and Hat 1.04
Mon, 21 May 2001 19:01:01 +0100
We are pleased to announce a new release of the nhc98 compiler, and
in particular its facilities (both brand new and improved old stuff)
for tracing and debugging Haskell programs - the Hat system.
The basic nhc98 compiler version 1.04 is mostly a bugfix release
(details listed at the bottom of this announcement).
However, the stuff we are really excited about is Hat - our Haskell tracer.
A full user guide to these new tools is available on the website.
* Lots more tools for tracing!
hat-stack - Displays a "virtual" stack-trace for any
program that failed with a runtime error.
hat-detect - Algorithmic bug detection, based on a
textual question-and-answer session.
hat-trail - The original graphical trail browser, now
with several presentation enhancements.
hat-observe - Examine the inputs and outputs of any
named function, in the style of HOOD.
* Tracing with Hat is now based on a completely new architecture
(although still within the nhc98 compilation system). A program
compiled for tracing now builds its "redex trails" in file, not
in the heap. This has some performance consequences:
(1) you no longer need to allocate large amounts of heap
memory for tracing;
(2) but you will probably need large amounts of disk space
instead - remember disk space is cheap;
(3) and traced programs still run somewhat slowly.
* However, there are a couple of major benefits in return:
(1) A trace is persistent, so after running your program
once, you can examine many different aspects of the
trace without re-computation.
(2) Traces are now first-class objects, so you can examine
and manipulate them in far more detail - hence the
variety of new tracing tools.
* Greater Haskell'98 compatibility. Almost all language features
are now supported: named fields and better handling of pattern
bindings are the main additions. All standard libraries
except Time and Locale are now supported.
* New: Improved (more accurate) time profiling now provided.
* New: Support for extended module namespaces of the form
Long.Hierarchical.Module.Name is now provided in both
nhc98 and hmake.
* Bugfix: An identifier hidden on import and redefined in the
current module, then exported, but also imported
qualified and used qualified in the current module,
led to an incorrect interface file being generated.
* Bugfix: hmake issued an unnecessary -cpp flag on some literate files.
* Bugfix: Type of IO.hSetPosn :: Handle -> HandlePosn -> IO ()
* Bugfix: Compile-time error in <tt>src/tracer/runtime/ident.c</tt>
on RedHat 7 and other systems using the new ISO C standard
* Bugfix: A file opened in ReadMode or WriteMode was actually
opened in ReadWriteMode, so if the file had strict
permissions the correct opening command would fail.
Conversely, opening in ReadWriteMode actually gave
ReadMode instead, and file updates silently failed.
* Bugfix: Operator sections suffered from priority inversion,
for example (^2*3) was incorrectly parsed as (^(2*3)),
even though ^ binds more tightly than *.
* Bugfix: The library function Directory.createDirectory gave
strange permissions to the new directory. (Mode was
in hex, but should have been octal!)
* New: Improved printing of I/O error messages.
The Hat team at York