| [25 September 2009] | Java backend
The Java backend was restored and improved over the last few months.
It works well! You will need a release of the day.
|
| [27 July 2009] | New Presentation
The slides for a recent talk entitled "Writing Business Rules Engines in
Mercury" are now available from the
papers page.
|
| [09 February 2009] | RSS Feed
You can now receive Mercury news items via an RSS feed by subscribing
to the following URL:
http://www.mercury.csse.unimelb.edu.au/rss.xml
|
| [05 February 2009] | New standard library modules
We have added two new modules to the standard library: parsing_utils and
calendar.
parsing_utils is a set of utilities to help with writing recursive
descent parsers. calendar contains utilities for working with dates
in the Gregorian calendar.
Both modules are available in the latest release of the day. |
| [03 November 2008] | New paper
We have a new paper available from our
papers page that describes
some recent work on automatically introducing parallelism in Mercury programs
based on profiling data. |
| [13 October 2008] | Google protocol buffers for Mercury
Google protocol buffers allows a extensible binary protocol to be
defined in a programming language independent .proto file.
The protoc compiler then generates APIs for the protocol in C++, Java
or Python.
protoc has recently been extended with basic support for Mercury.
The extension is available from
the protobuf-mercury
project site. |
| [29 April 2008] | Currying of multi-moded predicates
We now support currying of multi-moded predicates where the mode to
use can be determined from the curried arguments.
For example one can now use expressions such as
list.foldl(list.foldl(int.plus), [[1, 2], [3, 4]], 0),
that previously had to be written using explicit lambda
expressions.
This feature was added by Mission Critical Australia. |
| [28 April 2008] | Implementation-defined literals
We now support "implementation-defined literals". These are
symbolic names that are replaced by context-dependent values at compile time.
Examples include $file, which is replaced by a string containing the name
of the file in which it appears, and $line which is replaced by an integer
representing the current line number.
This feature was added by Mission Critical Australia. |
| [01 November 2007] | Three new papers
We have three new papers available from our
papers page.
One is on the handling of large predicates
by Prolog and Mercury implementations,
one is on a software transactional memory system for Mercury,
and one is a comparison of packrat parsing and memoed DCG parsers. |
| [21 September 2007] | Bug Tracking System
The Mercury project now uses the Mantis bug tracking system
to keep track of bug reports. The Mercury bug database may
be accessed via the
Bug Database
link in the menu at the side of this page. |
| [14 August 2007] | New Paper and Talk
A paper and a presentation have been added to the
papers page describing how
Mission Critical is using Mercury in the "real world". |
| [06 August 2007] | Erlang backend
There's a new back-end for the Mercury compiler that compiles to Erlang, so
that Mercury programs can run on the Erlang runtime system. The goal is to
allow Mercury programs to take advantage of the Erlang implementation's support
for scalable and reliable server programs. It also allows for interoperability
between Mercury and Erlang code. This back-end was implemented by Mission
Critical IT (Australia). |
| [06 March 2007] | Remove support for Unicode characters in string literals
This feature has been removed because of concerns that it might lead users
to believe that Mercury offers full Unicode support, which is not the case. |
| [01 December 2006] | Mercury 0.13.1 released
Release information is available
here. |
| [30 October 2006] | New paper
We have a new paper available from our
papers page that describes
some recent work on parallelism support in Mercury. |
| [14 September 2006] | New release
We are pleased to announce the release of version 0.13 of the
Mercury system. The new release can be downloaded
here. For a list of the changes since
version 0.12 see the release notes. |
| [08 August 2006] | Support for Unicode characters in string literals
The escape sequences \uXXXX and \UXXXXXXXX can now
be used to encode Unicode characters in string literals, where XXXX
(or XXXXXXXX) is the code point of the desired character in
hexadecimal.
The latest release of the day
includes support for this feature.
|
| [04 April 2006] | Mercury 0.13.0-beta available
A beta version of the upcoming 0.13.0 release in now available from the
download page. |
| [28 March 2006] | New presentation
A presentation titled
"Unclean! Unclean! or Purity issues in declarative constraint logic
programming"
has been added to the presentations section on our
papers page. |
| [25 January 2006] | Mercury 0.12.2 released
Release information is available
here. |
| [11 December 2005] | Three new papers
Three new papers titled
"Controlling search space materialization
in a practical declarative debugger",
"Adding constraint solving to Mercury"
and
"Tabling in Mercury: design and implementation"
are now available from our
papers page. |
| [21 November 2005] | Mercury 0.12.1 released
Release information is available
here. |
| [09 September 2005] | New release
We are pleased to announce the release of version 0.12 of the
Mercury system. The new release can be downloaded
here. For a list of the changes since
version 0.11 see the release notes. |
| [08 August 2005] | Two new papers
Two new papers titled
"Divide-and-query and subterm dependency tracking in the Mercury declarative
debugger"
and
"The implementation of minimal model tabling in Mercury (extended abstract)"
are now available from our
papers page. |
| [11 May 2005] | Functional dependencies
We've added support for functional dependencies to the typeclass system.
See the "Type classes" chapter of the
Mercury Language Reference Manual
for details.
The latest release of the day
includes support for this language feature. |
| [10 April 2005] | Updated and expanded tutorial available
A much improved tutorial is now available from the
documentation
section. |
| [04 April 2005] | Mercury 0.12.0-beta available
A beta version of the upcoming 0.12.0 release in now available from the
snapshot section. |
| [21 March 2005] | New goal types
We've added three new types of goal to the language.
`promise_equivalent_solutions' goals allow the programmer
to promise that all the solutions generated by a goal are
equivalent. This makes working with multi- or non-deterministic code
easier. `promise_pure' and `promise_semipure' goals allow the programmer
to make promises about the purity of arbitrary goals.
See the "Goals" section of the "Syntax" chapter of the
Mercury Language Reference Manual
for more details. release of the day
includes support for these new goal types. |
| [25 February 2005] | New PhD thesis
A new PhD thesis on Mercury,
Compile-time garbage collection for the declarative language Mercury
by Nancy Mazur, is now available from our
papers page. |
| [09 December 2004] | New Standard Library to Convert Mercury Terms
to XML Documents
A new module `term_to_xml' has been added to the standard library. This
module contains predicates to write arbitrary Mercury terms to an output
stream as XML. Automatic generation of DTDs for Mercury types is also
supported. Once a Mercury term is in XML it can be converted to many other
formats such as HTML or XUL using an appropriate stylesheet. |
| [19 October 2004] | Shared Library Support for Mac OS X
Shared Mercury libraries now work on Mac OS X. The standard Mercury libraries
are also now dynamically linked by default, greatly reducing the size of
executables. |
| [10 June 2004] | The 2004 ICFP Programming Contest
A team of Mercury developers submitted an entry for the 2004
ICFP Programming contest. We won't know how well we did until the results
are posted after the ICFP conference, later this year. |
| [21 January 2004] | New PhD thesis
A new PhD thesis on the Mercury mode system,
Precise and Expressive Mode Systems for
Typed Logic Programming Languages
by David Overton,
is now available from our
papers page. |
| [25 Sep 2003] | Accurate garbage collection
The high-level C back-end now supports accurate garbage collection,
as an alternative to using the Boehm (et al) conservative collector.
There is a paper
that describes the new garbage collector. For more details, see
the files compiler/ml_elim_nested.m and runtime/mercury_accurate_gc.c
in the latest Mercury source distribution. |
| [21 Feb 2003] | .NET back-end bootstraps
We reached a major milestone for the .NET back-end:
the Mercury compiler successfully bootstrapped with '--grade il'.
See this link for details on the
current status of the .NET back-end. |
| [24 Dec 2002] | Mercury 0.11.0 released
Release information is available
here. |
| [12 November 2002] | New Paper,
We have a new paper available from our
papers page that describes
the design and implementation of a new termination analyser for Mercury. |
| [23 October 2002] | New build system
The compiler now accepts a `--make' option, which performs most
of the functions of Mmake. The advantages of `mmc --make' are
that no `mmake depend' step is necessary and the dependencies are
more accurate. Parallel builds are not yet supported. See the
"Using Mmake" chapter of the
Mercury User's Guide.
`mmc --make' is available in the latest
release of the day. |
| [17 August 2002] | Two PhD theses
Two PhD theses on Mercury are now available from our
papers page.
They are:
Expressive type systems for logic programming languages
by David Jeffery, and
Towards parallel Mercury
by Thomas Conway. |
| [15 July 2002] | Three papers
Three papers on Mercury are now available from our
papers page.
Two will be presented at PPDP '02 in October:
Constraint-Based Mode Analysis of Mercury
by David Overton, Zoltan Somogyi and Peter Stuckey, and
Using the Heap to Eliminate Stack Accesses
by Zoltan Somogyi and Peter Stuckey.
The third was presented at ISMM '02 in June:
Accurate garbage collection in an uncooperative environment
by Fergus Henderson. |
| [10 July 2002] | State variables
We've added some extra syntax to the language to support programming
with `state variables'. State variables are intended to make it easier
to deal with sequences of values. For example, where previously one
would have to name each value in a sequence X0, X1, X2, ..., X, now it
is possible to use a state variable !X, which will be translated into
ordinary, non-state variable Mercury, automatically naming the sequence
values. !X stands for two arguments, !.X and !:X, where !.X is
interpreted as the "current" sequence value under consideration and !:X
is taken as the "next" sequence value. State variable syntax should be
used in preference to DCG notation for threading the IO state in future.
See the "State variables" section of the "Syntax" chapter of the
Mercury Language Reference Manual for
more details. |
| [13 November 2001] | Unification expressions
We've added a new kind of expression to the language.
A unification expression, written `X @ Y', unifies X and Y and returns
the result. Unification expressions are most useful when writing switches.
See the "Data-terms" section of the "Syntax" chapter of the
Mercury Language Reference Manual
for more details. The latest
release of the day
includes support for unification expressions. |
| [04 November 2001] | New paper
Our BABEL'01 paper, on compiling Mercury to the .NET Common Language Runtime,
is now available from our papers page.
|
| [26 October 2001] | New paper
We have a new paper available
from our papers page,
which outlines the design of the back end that generates high level C. |
| [13 August 2001] | Smart recompilation
The Mercury compiler can now perform smart recompilation. With smart
recompilation, when the interface of a module changes, only modules
which use the changed declarations are recompiled. The latest
release of the day
includes support for smart recompilation. |
| [04 August 2001] | ICFP 2001 programming contest entry
See our report on our
ICFP 2001 programming contest entry. |
| [01 August 2001] | New paper and demo
We have a new paper available
from our papers page,
which describes the design and implementation of the Mercury deep profiler.
This new profiler generates profiling information
that is significantly more accurate and more detailed
than the information produced by most other profilers.
A
description and demo of the deep profiler
is also available. |
| [18 May 2001] | New paper
We have a new paper available
from our papers page,
which describes the design and
implementation of a compile time garbage collection and memory reuse
system in the Melbourne Mercury compiler. |
| [04 Apr 2001] | Mercury 0.10.1 released
Release information is available
here. |
| [25 Feb 2001] | Mercury 0.10 released
Release information is available
here. |
| [19 Feb 2001] | Native code back-end
There's a new back-end
for the Mercury compiler that compiles directly to assembler,
rather than than going via C.
The new back-end is implemented by linking the Mercury compiler with the
(relatively) language independent GNU Compiler Collection back-end.
In other words, there is now a Mercury front-end for GCC! |
| [05 Oct 2000] | Events and Reports
Two new sections have been added to the web site. The events section
will give information about events Mercury has been involved in -- we
start this section with a
page on Mercury coming 4th (of 38 teams) in
the ICFP 2000 programming contest. The reports section contains regular
reports from the developers, such as minutes from Mercury meetings.
Both are available from the sidebar menu. |
| [04 Oct 2000] | Two new papers
Two new papers on Mercury are now available from our
papers page.
One describes a binding-time analysis for higher order code,
while the other describes an analysis for detecting whether a memory
cell is available for reuse. |
| [22 Sep 2000] | Tuple types
We've added support for tuple types, similar to those in most
other functional languages. Tuples use the syntax `{A, B, ...}'.
See the "Builtin types" section of the "Types" chapter of the
Mercury Language Reference Manual for details.
The latest release of the day
includes support for tuple types. |
| [09 Aug 2000] | Remote CVS access
We've made anonymous remote CVS access available to the Mercury CVS
archive. A page describing how to use remote CVS is available
here. Mercury, the test
suite, MCORBA, and even these web pages are available via CVS. |
| [26 Jul 2000] | Mercury and Microsoft's .NET
A page outlining the status of Mercury on Microsoft's new .NET
framework is now available
here. |
| [11 Apr 2000] | Completed paper
The full version of Making Mercury Programs Tail Recursive is
now available from our papers page.
The paper describes two optimizations, implemented in the Mercury
compiler, which make predicates tail recursive. |
| [05 Apr 2000] | More new papers
Another two new papers on Mercury are now available from our
papers page.
One describes using purity declarations for building foreign language
interfaces, while the other details the update transformation, an
optimization that can help re-order state updates into better positions
for other optimizations. |
| [21 Feb 2000] | New papers
Two new papers on Mercury are now available from our
papers page.
One describes a binding-time analysis,
while the other describes an analysis for detecting whether a memory
cell is available for reuse. |
| [26 Jan 2000] | Mercury 0.9.1 released
Mercury 0.9.1 fixes a few bugs in Mercury 0.9, including a few problems
with binary distributions. Release information can be found
here. |
| [19 Jan 2000] | Morphine released
Morphine,
a trace analysis system for Mercury, has just been added to
the Mercury distribution (and will be available in Mercury 0.9.1). Morphine
allows dynamic tracing of Mercury programs, allowing scripts to be
written which interact with the debugger and efficient collection of statistics
on running programs. Many thanks to
Erwan Jahier for his hard work on
Morphine. |
| [16 Jan 2000] | Record syntax
We've added support for record syntax, so that fields of
constructors can be conveniently extracted and updated
without writing lots of trivial access predicates.
See the "Field access functions" section of the "Types" chapter
of the Mercury Language Reference Manual for details.
The syntax is available in our latest
release of the day.
|
| [18 Dec 1999] | Mercury 0.9 released
We've just released the long-awaited version 0.9.
Release information can be found
here. |
| [17 Nov 1999] | A paper on the Mercury debugger
A new paper on Mercury is now available from our
papers page:
it describes the technology we use to implement the Mercury debugger.
|
| [28 Oct 1999] | Time module
The standard library now includes a module `time'
which provides an interface to the ANSI/ISO C functions
and to the POSIX times() function.
Thanks to Tomas By for contributing the original version of this module.
|
| [16 Sep 1999] | Exception handling
Exception handling support is now part of the standard library.
The module `exception', which was previously part of the "extras"
distribution, has been moved into the standard library.
The predicate error/1 now throws an exception rather than just
terminating execution.
However, many of the operations in the standard library still handle
errors by aborting execution rather than by throwing exceptions.
|
| [13 Aug 1999] | New papers
Two new papers on Mercury are now available from our
papers page.
One describes how Mercury handles run time type information,
while the other describes the optimizations we use
to make Mercury programs tail recursive.
|
| [13 Jul 1999] | Operators
We now support a simple form of user-defined infix operators.
Terms in the form of x `fun` y are transformed into fun(x, y).
The transformation is available in our latest
release of the day.
|
| [17 Jun 1999] | Automatic accumulator introduction
A new optimization has been added to the Mercury compiler.
The optimization attempts to make procedures tail recursive by
the introduction of accumulator variables.
The optimization is available in our latest
release of the day.
|
| [18 Mar 1999] | Linux RPM format binary distribution
We have provided a new binary distribution of Mercury 0.8.1
for Linux in RPM (RedHat Package Manager) format.
Note that the binary distributions that we provide for Linux work
with libc 6.0 only. Unfortunately they do NOT work with libc 6.1.
This is due to incompatibilities between libc versions 6.0 and 6.1
(i.e. glibc 2.0 and 2.1).
|
| [15 Mar 1999] | Lazy evaluation
The latest development version of the Mercury extras distribution
now includes support for optional lazy evaluation.
There is a new module `lazy', which provides
a type `lazy(T)' for lazily-evaluated data structures,
with `delay' and `force' operations.
There is also a module `lazy_list', which defines a lazy list
data type using the `lazy' module.
See the files in extras/lazy_evaluation for details.
This is now available for
download.
|
| [11 Mar 1999] | Prolog debuggers no longer supported
We've removed the support for using a Prolog debugger on Mercury programs.
Now that we have a working Mercury debugger, there's no longer any need to
use a Prolog debugger for debugging Mercury code.
|
| [08 Mar 1999] | Interactive queries
The Mercury debugger now includes support for interactive queries.
See the "Interactive query commands" subsection of the "Debugger commands"
section of the "Debugging" chapter of the
Mercury User's Guide.
|
| [05 Mar 1999] | Mercury Tutorial
Ralph Becket
has kindly written a
Mercury Tutorial.
This is still under development. Feedback would be appreciated. |
| [18 Jan 1999] | Coding Challenge - Battleships
Download the
spec
for battleships and maybe have your solution added to the samples directory. |
| [21 Dec 1998] | MCORBA 0.2 released
The second release of MCORBA is finally available.
We have fixed the generation of the C++ code so that the samples
now build and work correctly. See the
MCORBA web page for more details on MCORBA. |
| [13 Dec 1998] | Mercury 0.8.1 released
This release just fixes some problems with the
binary distributions for 0.8.
Release information can be found
here. |
| [06 Dec 1998] | Dynamic linking support
The latest development version of the extras distribution
now includes support for dynamic linking.
This is now available for
download.
The interface is based on the C functions dlopen(), dlsym(), and co.,
which are supported by most modern Unix systems.
See the files in extras/dynamic_linking for details. |
| [25 Nov 1998] | New paper: Optimization of Mercury programs.
A paper describing the high-level optimization passes of the Mercury
compiler is now available from
the Mercury papers page. |
| [18 Nov 1998] | Mercury 0.8 released
We've just released the long-awaited version 0.8.
Release information can be found
here. |
| [17 Nov 1998] | New MCORBA paper available
We have made a paper describing the Mercury CORBA interface
available from
the Mercury papers page. |
| [16 Nov 1998] | Web site now searchable
You can now search either the mailing lists or the
rest of the web site. |
| [30 Sep 1998] | New paper: Type classes in Mercury.
A new paper, describing our implementation of type classes in Mercury,
has been made available from
the Mercury papers page. |
| [21 Sep 1998] | MCORBA: CORBA for Mercury.
We've done some work on MCORBA, which is a binding to CORBA for
Mercury. CORBA is a distributed object framework, that allows local
and remote objects to communicate. MCORBA allows you to use
Mercury to talk to other CORBA objects, and to implement CORBA
objects. It's still preliminary, if you are interested see the
MCORBA page for more information. |
| [18 Sep 1998] | New unstable daily releases.
The Mercury daily snapshot, called the release-of-the-day (ROTD) scheme
has been modified to add unstable releases, which have not passed the
all the tests, but may still be useful for developers who need the very
latest version. Daily releases are available for
download. |
| [07 Sep 1998] | The Mercury Web Site overhauled.
The new layout is easier for us to update with news (like this),
and has full hypermail archives of the mercury-developers and
mercury-users mailing lists.
Thanks to Peter Ross
for all his work on it. |
| [04 Aug 1998] | Mmake extensions.
Mmake has been extended to support setting flags on a per-file basis,
and will now warn about variables which are defined but not used. |
| [13 Jul 1998] | Enhancements to mtags.
Mtags is now able to produce tags for typeclass declarations. It is
also able to produce tags files in the extended format supported by
recent versions of Vim and Elvis. |
| [09 Jul 1998] | Existential types.
Preliminary support for existential types has been added to Mercury.
For those of you that aren't theorists, this means you can declare
polymorphic arguments that are outputs, and their type is also
an output. |
| [15 May 1998] | Tabling.
Predicates can now be tabled. Predicates to be tabled are requested by
the use of a pragma. |
| [08 Apr 1998] | Native Debugger.
An alpha version of a native trace-based debugger has been implemented.
The main features missing are a term browser and the ability to redo
goals. |
| [04 Mar 1998] | Sub-modules.
The module system now includes support for sub-modules. |
| [01 Feb 1998] | Ported to glibc.
Mercury 0.7.3 has been ported to glibc for Debian GNU/Linux. |
| [19 Dec 1997] | Type classes.
Type classes support added. Type classes let you specify an interface
and then provide multiple different implementations of that interface.
They're similar to abstract base classes in C++ or "interfaces" in
Java. |
| [01 Nov 1997] | Mercury 0.7.3 released.
Release information can be found
here. |
| [13 Oct 1997] | Mercury 0.7.2 released.
Release information can be found
here. |
| [15 Aug 1997] | Mercury 0.7 released.
Release information can be found
here. |
| [14 Jan 1997] | Mercury 0.6.2 released.
Release information can be found
here. |
| [26 Aug 1996] | Mercury 0.6.1 released.
Release information can be found
here. |
| [02 Aug 1996] | Mercury 0.6 released.
Release information can be found
here. |
| [15 Feb 1996] | Mercury 0.5 released.
Release information can be found
here. |
| [15 Sep 1995] | Mercury 0.4 released.
Release information can be found
here. |
| [18 Jul 1995] | Mercury 0.3 released.
Release information can be found
here. |