ANNOUNCE: nhc98 1.04 and Hat 1.04

Malcolm Wallace
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.

			Hat 1.04

  * 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.

			nhc98 1.04

  * 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 ()
		was incorrect.
  * Bugfix:	Compile-time error in <tt>src/tracer/runtime/ident.c</tt>
		on RedHat 7 and other systems using the new ISO C standard
		for <tt>fpos_t</tt>.
  * 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.

Happy tracing!

The Hat team at York
	(Colin Runciman,
	 Olaf Chitil,
	 Malcolm Wallace,
	 Thorsten Brehm,
	 Phil Hassall)