6.4.1 is a bugfix release over 6.4. No library APIs have changed, so code that worked with 6.4 should continue to work with 6.4.1.
Many, many bugs have been fixed relative to 6.4. Far too many to list here.
The following new features were added in this release:
Much improved support for the amd64/Linux platform, including GHCi,
Template Haskell, a native code generator, foreign import
"wrapper"
, and -split-objs
.
GHCi support is currently experimental on this platform. Due to
the nature of the object file format on this architecture, GHCi is
unable to support loading objects that contain data references to
shared libraries: please be aware that if you are doing this (perhaps
via foreign import "&"
), then you can expect
crashes. The solution is either to access the symbol via an
indirection, or to access the symbol using a function in a shared
library. Fortunately none of our existing packages do this
(errno
is accessed via a function, for
example).
The package infrastructure has been improved in various ways, and some restrictions have been relaxed. In GHC 6.4, a package module would take precedence over local module, such that the local module would be ignored in favour of the package module. In GHC 6.4.1 this behaviour is now reversed: the local module will be picked up in preference to the package module. There is still the restriction that the program can contain only a single module with a given name, but conflicts are now reported lazilly - i.e. as long as you don't use a package that contains a module with the same name as a local module, the conflict will not be reported).
Ambiguous imports are now reported lazilly: if there are two packages that provide the same module, the error is not reported until an attempt to import the module is made.
Various error conditions in the behaviour of the package flags have
been replaced by “do what I want” behaviour. For example,
if there were two versions of a package P, then
-package P
used to be an error, now it uses the
most recent version of P. In general, if multiple versions of a package are
available, GHC will pick the most recent version unless
told to do otherwise with a -package
flag.
There's a new flag: -hide-all-packages
(Section 4.8.1, “Using Packages
”) which causes all packages to be hidden by
default, forcing you to explicitly list each package required by the
code being compiled. This is useful for avoiding hidden
dependencies, and Cabal now uses this flag by default.
Some performance issues have been addressed. Various cases where GHC was taking overly long to compile modules have been fixed. Some space leaks in the compiler have been fixed.
The character predicates in Data.Char
now have a
new implementation. Rather than relying on support from the C library,
which was patchy at best, the Data.Char
implementation now contains an internal table of
character properties for the entire Unicode character set.
The ghc-pkg
tool has two new variants:
ghc-pkg list P
lists all version of
P
that are available, and
ghc-pkg latest P
gives the latest version
of P
. See Section 4.8.5, “Package management (the ghc-pkg
command)”.
The runghc
(aka runhaskell
)
utility now accepts options to pass to GHC before the name of the
script to run.
Note that although many improvements have been made to Cabal since 6.4 was released, due to our policy of not changing library APIs in a patchlevel release, GHC 6.4.1 does NOT contain the newer version of Cabal. However, if you need an updated Cabal, upgrading is a fairly painless procedure.