[jhc] ANNOUNCE: jhc 0.7.4

John Meacham john at repetae.net
Sat Jul 10 02:47:35 EDT 2010

Announcing jhc 0.7.4! There have been a few major changes, the main one being
that there is now support for a garbage collector. This drastically increases
the number of programs which are feasable to compile with jhc.


Any testing people can do with -fjgc would be greatly appreciated! My gameplan
is to fix any issues that come up with the new gc and release a 0.7.5 that
will have the GC enabled by default. This will probably be the first version
of jhc I can recommend to non-developers with a good concience :). Once that is
done I can implement a good strategy for library compatibility with other
compilers and the standards. As it is, jhc has a mix of haskell 98 and haskell
2010 and the ghc base as its distributed libraries, basically whatever I found I
needed in practice I added as I went along. This won't work in the long run.

Major changes

 * a garbage colletor which can be enabled with '-fjgc' is available.
   after some more testing, I will make it the default in the 0.7.5 release.
 * A new memory allocator based on Jeff Bonwick's slab memory allocator for
   kernels. This means that in many cases, memory can be pulled off a slab
   and immediately used with no initialization, in addition, it allowed a
   rearrangement of the GC meta-data to optimizally use the cache.
 * packed representation of algebraic types, 'Maybe Foo' is actually
   represented in memory as a NULL pointer or just a 'Foo' with no tag bits.
   Combined with the slab allocator, this can double the number of some common
   values that can be put in a cache line.
 * some intense profiling of generated code and modification of the rts and
   code generator. Signifigant speed-ups in compiled programs are the result.

Some other changes since 0.7.3 are
 * documentation updates, especially when it comes to the runtime.
 * ghc 6.12 support (it is in fact required now.)
 * no more monolithic 'Main'. the core pass moved to E.Main and the grin pass
   moved to Grin.Main.
 * generated C code is more compact and easier to debug.
 * more use of bytestring internally, improved performance
 * JHC_RTS_INCLUDE flag allows including the rts from an
   external file. useful for debugging/developing the RTS.
 * explicit register support in grin, for alternate back ends such as a NCG
 * Removed all compiler magic dealing with Eq,Bounded,Ord, and Bits. instances
   for these are specified in haskell code even for built in types now.
 * cleaned out some obsolete flags and options on command line.
 * updated applicative and support for newest version of 'containers' library.
 * bug updates
 * various bug fixes

Below is the announcment for 0.7.3 in case you missed it.

It's been a long time coming, but jhc-0.7.3 is here. If you have been
following the darcs repository, there are not a whole lot of new
changes, but there have been substantial fixes since 0.7.2.


One of the most important ones is I have begun the process of
standardizing on YAML for all external interfaces that may be useful to
automation, this should make interfacing jhc with external tools written
in any language much easier, and it will prevent me from spending time
trying to invent proprietary formats every time I think of something new
to spit out. right now it is used in 3 places:

 - dumping dependency info with --deps
 - library dumping with --list-libraries -v
 - annotating source code, for inputting to documentation generators via

The main place it isn't used yet that I desire too is to replace the
'cabal' library description format with a true YAML file. jhc cabal
files were never quite compatible with cabal ones anyway and naming them
the same thing has been a source of connfusion.

some of the other changes have been:

  - a lot more regression tests, many user submitted bugs are now
  - support for using 'mock' to build rpms
  - System.Exit, System.Cmd added to base
  - better compatibility with ghc in some library functions
  - ui improvements in showing progress and errors
  - extended --list-libraries info
  - --deps dependency dumping
  - more francise compatible thanks to patches from droundy
  - more instances for bigger tuples added
  - uses editline if readline not available
  - select libraries by hash as well as version
  - add System.IO.Pipe
  - detect version of gcc needed for cross compiling to windows

  - storage analysis - a very basic region inference enabled by default
  - deadcode analysis can see through partial applications now
  - profiled and sped up some library routines that were producing
    inellegant core.
  - figure out when top level grin functions call themselves recursively
    and turn them into explicit loops.

bug fixes:
  - do expression in infix
  - fix strict newtype bug
  - U2U bug fixed
  - desugaring inside of list comprehensions fix
  - c generator doesn't mess up on unknown values
  - the compiler version is stored in the cache files, so multiple
    versions of jhc don't clobber each others cache entries
  - Ord instance for lists fixed
  - recursive type synonyms detected properly
  - make sure errno.h is included when errno is referenced
  - don't give a parse error when seeing ghc extensions to INLINE
  - qualified method names fix

John Meacham - ⑆repetae.net⑆john⑈ - http://notanumber.net/

More information about the jhc mailing list