Saturday, March 4, 2006

Archived News: 2006-03



The Mercury development team has fixed the problem
with nesting of disjunctive terms when output with
term_io.write_term/4 with
ROTD-2006-03-07 compiler distribution. It, along
with the op/3 declaration enhancement
(ltq), are available from us. Send an email (see
contact information below) if you wish
to obtain one of the following distributions:


  • mercury-2006-03-287210185431079-rotd-sparc.sun.solaris2.8

These distributions include the extras/, the
samples/ (in extras/) and
the HTML documentation (in doc/).


term_io.write_term/4 does not properly handle
disjunctions. I've submitted a patch to the Mercury
development team, but in the interim, I've included the
change in distributions (as dopp relies on
write_term/4 to output the op/3-free
code results). Also, compiler/prog_io.m has
quite a few disjunctions handling (now dead) declaration
types, I've submitted this patch to the Mercury team, but
have also patched local distributions. The most recent
distributions available are:

  • mercury-2006-03-01-rotd-fixed-write_term-sparc.sun.solaris2.8


Both these distributions have ltq included.
Email me if you wish a copy of one of the above distributions
or of the stable release (0.12.2) on either architecture.

Update 2006-03-08:
The Mercury team has corrected the compiler so
that terms are appropriately parenthesized. This eliminates
the need for my term_io.write_term/4 hack, so
future releases of the distributions from this site will revert
to straight-up Mercury. Enhancements, such as op/3
declarations, will be included in extras/ (the
source code) and in bin/.


There is quite a debate going on at the developers
discussion forum as to the merits, extent and implementation
of the op/3 declaration. Up to this point,
we have patched the Mercury compiler distribution so that
it accepts and processes op/3 declarations. This
has proved to be rather onerous as new distributions have been
coming out regularly. Instead, prompted by the Mercury team,
I have developed an op/3 preprocessing system.
ltq <Executable> ("Logical Types
creates build/Makefile, then executes the Makefile which calls
dopp <Dependencies> ("Dynamic Op
which translates op/3-enhanced files into plain
vanilla Mercury ones. The Makefile then builds the executable
with the 'mmc --make --infer-all
' command.
This build system is locally
available from this site
, and also included in Mercury
distributions that we produce from this month onward.

Update 2006-03-10:
I have updated ltq so that it
takes any number of arbitrary command-line arguments
(these preceed the <Executable> argument).
These arguments are passed, unmolested, to mmc.

Update 2006-03-13:

Currently, we are fully integrating
op/3 declarations into working
products. In building auxilary libraries we
have found that we need to mirror
mmc's library-building indicator
(prepending 'lib' to the target module's name).
Adding this functionality required a
modification to ltq's build
process. This change is reflected in build
system offered here. We leave the library
installation process to mmc; that
is, noddingly: in the generated
Makefile, there is an command that passes the
proper arguments to mmc with a
make install command.

Update 2006-03-24:

The library building and installation process
differed slightly in ltq.
Eliminated that difference and published a new
version of this

Update 2006-03-29:

ltq now automatically creates the
build/ directory (the repository of
build products, including the files converted
from op/3-enhanced sources to
canonically represented sources). This
eliminates errors in ltq's build
process when it cannot find the nonexistent
directory. The new distribution is available,
as always, here.