The Mercury Project
News

[Mercury Logo]
Home

News

Information

Documentation

Mailing Lists

Back-ends

Download

Related

Contact

Search

Bug Database

News

If you see a feature that has been added and that you would like to try out, you can download our release of the day.

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