[m-rev.] diff: announce 0.13 release on webpage
Julien Fischer
juliensf at csse.unimelb.edu.au
Fri Sep 15 14:58:01 AEST 2006
(This has already been reviewed by Ian and Ralph.)
Estimated hours taken: 1
Announce the 0.13 release on the webpage.
XXX the old releases page still needs to have the 0.12.X releases
added to it.
w3/RELEASE_INFO:
Update for 0.13 release.
w3/download/Makefile:
w3/download/release-0.13.php3:
w3/download/release-0.13-bugs.php3:
w3/download/release-0.13-contents.php3:
New pages for 0.13 release.
w3/download/include/limitations.inc:
Change mail address to @csse.unimelb.edu.au.
w3/download/include/release-0.13.inc:
w3/download/include/release-0.13-bugs.inc:
w3/download/include/release-0.13-contents.inc:
NEWS and BUGS for 0.13
download/include/release.inc:
Make 0.13 the current release.
news/newsdb.inc:
Announce the 0.13 release.
Julien.
Index: RELEASE_INFO
===================================================================
RCS file: /home/mercury/mercury1/repository/w3/RELEASE_INFO,v
retrieving revision 1.9
diff -u -r1.9 RELEASE_INFO
--- RELEASE_INFO 2 Apr 2006 04:40:37 -0000 1.9
+++ RELEASE_INFO 11 Sep 2006 04:00:34 -0000
@@ -1,14 +1,14 @@
# A descriptive name for the release. See mercury/VERSION
-RELEASE_VERSION=0.12.2
+RELEASE_VERSION=0.13.0
# A name for the next beta-release, e.g. 0.12.2-beta
# Note: only set this variable to a non-empty value if a source distribution
# for the next beta release is being built.
-NEXT_BETA_VERSION=0.13.0-beta
+NEXT_BETA_VERSION=
# The CVS tag of the release branch.
# This is used to check out the documentation sources.
# We use the release *branch* tag, rather than the release tag,
# so that it will pick up any fixes to the documentation
# that have occurred after the release was made.
-RELEASE_TAG=version-0_12-branch
+RELEASE_TAG=version-0_13-branch
Index: download/Makefile
===================================================================
RCS file: /home/mercury/mercury1/repository/w3/download/Makefile,v
retrieving revision 1.12
diff -u -r1.12 Makefile
--- download/Makefile 15 Nov 2005 22:37:41 -0000 1.12
+++ download/Makefile 15 Sep 2006 04:37:51 -0000
@@ -18,6 +18,7 @@
release-0.10.html \
release-0.11.html \
release-0.12.html \
+ release-0.13.html \
release-0.3-bugs.html \
release-0.4-bugs.html \
release-0.5-bugs.html \
@@ -29,6 +30,7 @@
release-0.10-bugs.html \
release-0.11-bugs.html \
release-0.12-bugs.html \
+ release-0.13-bugs.html \
release-0.3-contents.html \
release-0.4-contents.html \
release-0.5-contents.html \
@@ -39,9 +41,10 @@
release-0.10-contents.html \
release-0.11-contents.html \
release-0.12-contents.html \
+ release-0.13-contents.html \
rotd.html
-current-release-bugs.html: release-0.12-bugs.inc
+current-release-bugs.html: release-0.13-bugs.inc
install: local_install
Index: download/release-0.13-bugs.php3
===================================================================
RCS file: download/release-0.13-bugs.php3
diff -N download/release-0.13-bugs.php3
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/release-0.13-bugs.php3 13 Sep 2006 10:09:28 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+ $menu="Download";
+ $submenu="Current Release";
+ $title="Release 0.13.0 known problems";
+ $dir="download";
+ $root="..";
+ $include="release-0.13-bugs.inc";
+ include "$root/include/template.inc"
+?>
+</HTML>
Index: download/release-0.13-contents.php3
===================================================================
RCS file: download/release-0.13-contents.php3
diff -N download/release-0.13-contents.php3
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/release-0.13-contents.php3 11 Sep 2006 04:01:38 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+ $menu="Download";
+ $submenu="Current Release";
+ $title="Release 0.13.0 Contents";
+ $dir="download";
+ $root="..";
+ $include="release-0.13-contents.inc";
+ include "$root/include/template.inc"
+?>
+</HTML>
Index: download/release-0.13.php3
===================================================================
RCS file: download/release-0.13.php3
diff -N download/release-0.13.php3
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/release-0.13.php3 11 Sep 2006 04:02:13 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+ $menu="Download";
+ $submenu="Current Release";
+ $title="Release 0.13 Notes";
+ $dir="download";
+ $root="..";
+ $include="release-0.13.inc";
+ include "$root/include/template.inc"
+?>
+</HTML>
Index: download/include/limitations.inc
===================================================================
RCS file: /home/mercury/mercury1/repository/w3/download/include/limitations.inc,v
retrieving revision 1.2
diff -u -r1.2 limitations.inc
--- download/include/limitations.inc 17 Nov 1998 15:35:34 -0000 1.2
+++ download/include/limitations.inc 15 Sep 2006 04:24:45 -0000
@@ -28,5 +28,5 @@
These limits can be lifted (with some effort), but would possibly incur
performance penalties. Contact the Mercury team
-(<a href = "mailto:mercury at cs.mu.oz.au">mercury at cs.mu.oz.au</a>)
+(<a href = "mailto:mercury at csse.unimelb.edu.au">mercury at csse.unimelb.edu.au</a>)
if you find these limits are affecting your application.
Index: download/include/release-0.13-bugs.inc
===================================================================
RCS file: download/include/release-0.13-bugs.inc
diff -N download/include/release-0.13-bugs.inc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/include/release-0.13-bugs.inc 13 Sep 2006 10:27:44 -0000
@@ -0,0 +1,198 @@
+<h2>Release 0.13.0 - Known Problems</h2>
+
+Bug reports should be sent to mercury-bugs at csse.unimelb.edu.au.
+If you're reporting more than one bug, please use separate emails
+for each bug. Please include all the relevant information,
+including which version of Mercury you're using, what operating
+system you're using, and a complete source file that
+demonstrates the problem. (If it's something that only shows
+up in multi-module programs, send a shar archive or uuencoded
+tar archive containing your source files.) Please try to ensure
+that bug reports contain all the information that we need to be
+able to reproduce the problem. Make sure that all bug reports are
+fully self-contained.
+
+<p>
+
+Below is a list of the known outstanding bugs.
+We'll try to record any other bugs that are discovered
+on our WWW page <http://www.mercury.csse.unimelb.edu.au>.
+In addition to the bugs mentioned here, some bugs related
+to the implementation of particular languages features
+(existential types, nested modules, tabling)
+are also mentioned in the language reference manual, and some
+problems related to using Mercury on specific operating systems
+are described in the README.* files.
+See also the <a href="limitations.html">limitations</a> of the current release.
+
+<p>
+
+Note: please do not be alarmed by the fact that this software has some bugs.
+ALL useful software has bugs. During the development of the Mercury
+implementation we have found bugs in gcc, as, ld, the dynamic loader,
+and even the OS kernel. We hope that by listing the known outstanding bugs
+here we are doing our users a service. It would be disappointing if
+anyone were to infer the wrong thing from it.
+
+<hr>
+
+<b>Subject: bug report - Inf and NaN <br>
+Date: 4 Oct 1995</b>
+<p>
+The following module causes an "undefined variable Inf" error in the
+generated C code, because 1E400 == Infinity, which gets printed as `Inf'.
+<p>
+<pre>
+:- module hello.
+:- interface.
+:- import_module io.
+
+:- pred main(io::di, io::uo) is det.
+
+:- implementation.
+
+main(!IO) :-
+ io.write_float(1E400, !IO).
+</pre>
+
+<hr>
+
+<b>Subject: bug with PC values on Alpha <br>
+Date: 12 Jun 1996</b>
+<p>
+On the alpha, if the Mercury runtime catches a signal, it
+sometimes prints out the wrong value for the PC.
+
+<hr>
+
+<b>Subject: inter-module optimization and abstract
+exported equivalence types. <br>
+Date: 19 February 1998</b>
+<p>
+In some cases the compiler reports spurious ambiguity errors when compiling
+with `--intermodule-optimization'. This is due to the definition of abstract
+exported equivalence types being made visible by inter-module optimization.
+In this example, with `--intermodule-optimization' the compiler sees the
+declaration `:- type var == int' from term.m and then cannot determine whether
+`Elem' has type `int' or `pair(int)'.
+The work-around is to add an explicit type qualification.
+<p>
+<pre>
+:- module foo.
+:- interface.
+:- import_module list, term.
+:- pred test(list(var)::in) is det.
+:- implementation.
+:- import_module int, std_util.
+
+test(Args0) :-
+ MakeIndex =
+ (pred(Elem0::in, Elem::out, Index0::in, Index::out) is det :-
+ Elem = Elem0 - Index0,
+ Index = Index0 + 1
+ ),
+ list.map_foldl(MakeIndex, Args0, _, 0, _).
+</pre>
+
+<hr>
+
+<b>Subject: GCC internal error <br>
+Date: 26 June 2001</b>
+
+<pre>
+ random.c: In function `random_module6':
+ random.c:412: fixed or forbidden register 3 (bx) was spilled for class
+ GENERAL_REGS.
+ This may be due to a compiler bug or to impossible asm
+ statements or clauses.
+
+ mercury_trace_alias.c:98: Unable to find a register to spill in class
+ `SIREG'.
+</pre>
+This problem occurs with several different combinations of GCC version
+and C source file.
+<p>
+This seems to be a bug in GCC's handling of global register variables.
+The bug seems to be finally fixed in GCC 3.3 or 3.4.
+<p>
+If this problem occurs when compiling the source distribution, install
+from the binary distribution instead.
+<p>
+If a similar problem occurs when compiling your program, there are a
+few possible work-arounds:
+<ul>
+<li>Use a lower level of C compiler optimization for the affected C
+ files (add `CFLAGS-foo = -O1' or `CFLAGS-foo = -O0' to your
+ Mmakefile for each affected C file).
+<li>Use a high-level C code compilation grade (add `GRADE = hlc.gc' to
+ your Mmakefile). These grades do not use the GCC extensions which
+ trigger this problem. Unfortunately, mdb does not yet work with
+ the high-level C back-end.
+<li>Use `asm_jump.*' compilation grades instead of `asm_fast.*'
+ grades. Note that `asm_jump.*' grades are not usually installed.
+<li>Try a newer version of GCC. Avoid GCC version 2.96 (distributed by
+ Red Hat) and 3.0.
+</ul>
+
+<hr>
+
+<b>Subject: NaN behaviour <br>
+Date: 21 Oct 2002</b>
+<p>
+The mercury standard library tends to avoid producing NaN (e.g. throwing
+an exception in many places where libc would return NaN), but it's still
+possible from arithmetic functions (e.g. 0.0*Inf, Inf - Inf, Inf + -Inf,
+Inf / Inf), sin,cos,tan when passed infinity, and perhaps other things (I
+haven't done a full search). Presumably it can also arise from using the
+foreign language interface.
+<p>
+When NaN does arise, we have a problem that `=' (and unification) aren't
+reflexive. From a logical point of view, this is a fairly serious problem.
+<p>
+A lesser problem is that `<' doesn't induce a total order on floats.
+
+<hr>
+
+<b>Subject: mode analysis bug <br>
+Date: 1 December 2004</b>
+<p>
+The Mercury compiler sometimes aborts with the following error message:
+<pre>
+ Uncaught Mercury exception:
+ Software Error: inappropriate determinism inside a negation
+</pre>
+<p>
+This bug is due to a limitation in the mode checker. It has only
+been reported as occurring when inlining is enabled. A workaround
+is to disable inlining for any affected files. This can be done
+by using the option `--no-inlining'.
+
+<hr>
+
+<b>Subject: higher-order specialisation bug <br>
+Date: 2 May 2005</b>
+<p>
+The Mercury compiler sometimes aborts at -O3 and higher with an error
+message similar to the following:
+<pre>
+ Uncaught Mercury exception:
+ Software Error: map__lookup: key not found
+ Key Type: term.var(parse_tree.prog_data.prog_var_type)
+ Key Value: var(20)
+ Value Type: ll_backend.var_locn.var_state
+</pre>
+<p>
+This is due to a bug involving higher-order specialisation, type
+specialisation and typeclasses. A workaround for this bug is to disable
+higher-order specialisation for any affected files. This can be done
+by using the option `--no-higher-order'.
+
+<hr>
+
+<b>Subject: segmentation fault in deep profiler<br>
+Date: unknown</b>
+<p>
+The deep profiler may cause a segmentation fault when profiling large
+programs. There is currently no known workaround for this problem.
+
+<hr>
Index: download/include/release-0.13-contents.inc
===================================================================
RCS file: download/include/release-0.13-contents.inc
diff -N download/include/release-0.13-contents.inc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/include/release-0.13-contents.inc 11 Sep 2006 04:03:31 -0000
@@ -0,0 +1,60 @@
+<h2>Release 0.13.0 - Contents</h2>
+
+The Mercury distribution is split into three parts.
+The "mercury-compiler" distribution contains:
+
+<ul>
+ <li>an autoconfiguration script
+ <li>the Mercury source for the compiler
+ <li>the Mercury source for the standard library
+ <li>the automatically generated C source for the compiler
+ and the standard library
+ <li>the runtime system (written in C)
+ <li>Hans Boehm's conservative garbage collector for C
+ <li>an integrated procedural and declarative debugger
+ <li>some profilers
+ <li>some utility programs, including a make front-end for Mercury
+ with automatic dependency recomputation
+ <li>the Mercury language reference manual
+ <li>the Mercury library reference manual
+ <li>the Mercury user's guide
+ <li>the Mercury frequently asked questions list
+ <li>the Prolog to Mercury transition guide
+ <li>some sample Mercury programs
+</ul>
+
+<p>
+
+The "mercury-extras" distribution contains some extra libraries for:
+
+<ul>
+ <li>lazy evaluation
+ <li>dynamic linking
+ <li>backtrackable (trailed) destructive update
+ <li>concurrency
+ <li>arithmetic
+ <ul>
+ <li>arithmetic on complex and imaginary numbers
+ </ul>
+ <li>a set of generic stream type classes
+ <li>an autotesting tool similar to Haskell's QuickCheck
+ <li>UIs:
+ <ul>
+ <li>graphics using Tk, OpenGL/GLUT or Xlib.
+ <li>text interfaces using curses
+ <li>processing HTML forms using the CGI interface
+ </ul>
+ <li>interfacing:
+ <ul>
+ <li>XML parsing
+ <li>POSIX interface
+ <li>an ODBC database interface
+ </ul>
+ <li>the Morphine trace analysis system
+ <li>two curses bindings, one more complete than the other
+ <li>a general purpose lexer
+ <li>Moose, a parser generator for Mercury.
+ <li>quickcheck, an autotesting tool similar to Haskell's QuickCheck.
+</ul>
+
+The "mercury-tests" distribution contains a test suite.
Index: download/include/release-0.13.inc
===================================================================
RCS file: download/include/release-0.13.inc
diff -N download/include/release-0.13.inc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ download/include/release-0.13.inc 15 Sep 2006 04:35:47 -0000
@@ -0,0 +1,444 @@
+<h2>New in release 0.13 of the Mercury distribution</h2>
+
+<h3>HIGHLIGHTS</h3>
+
+Changes to the Mercury language:
+
+<ul>
+
+<li>The Mercury typeclass system now supports functional dependencies.
+
+<li>A new language construct allows programmers to promise that any given
+ goal is pure or semipure.
+
+<li>Two new language constructs allow programmers to promise that all
+ solutions of a given goal are equivalent with respect to the relevant
+ equality theories.
+
+<li>We now have support for optional module initialisation and finalisation.
+
+<li>We now have support for module-local mutable variables.
+
+<li>We now have support for recognizing switches in which multiple switch arms
+ have shared code.
+
+<li>A new pragma allows programmers to promise that in a predicate or function
+ defined by mode-specific clauses, the mode-specific definitions have
+ equivalent semantics.
+
+<li>We now allow users to control how each argument of a `pragma memo' predicate
+ is tabled.
+
+<li>Support for the old-style lambda, mode and pragma syntax has been removed.
+
+<li>':' is now the type qualification operator, not a module qualifier.
+
+<li>To ensure soundness, goals in negated contexts using non-local variables
+ with dynamic modes (inst "any") must now be marked as impure.
+</ul>
+
+<p>
+
+Changes to the Mercury standard library:
+
+<ul>
+<li>We have removed the predicates dealing with runtime type information (RTTI)
+ from std_util.m. Any users impacted by this change should look for required
+ functionality in the construct, deconstruct and type_desc modules of the
+ standard library, in forms that have been mostly unchanged since the
+ 0.11 release. In most cases, the differences are quite minor, but provide
+ more expressive power.
+
+<li>We have moved the all-solutions predicates from std_util.m into a new
+ library module, solutions.m. These predicates are still available in
+ std_util.m but these versions are now deprecated.
+
+<li>We have moved the univ type, and related predicates, from std_util.m
+ into a new library module, univ.m.
+
+<li>We have moved the maybe type, and related predicates, from std_util.m
+ into a new library module, maybe.m.
+
+<li>We have moved the pair type, and related predicates, from std_util.m
+ into a new library module, pair.m.
+
+<li>We have moved the unit type from std_util.m into a new library module,
+ unit.m.
+
+<li>We have made the predicates semidet_succeed/0, semidet_fail/0 and
+ cc_multi_equal/2 into builtins. Formerly these were exported by std_util.m.
+
+<li>We have added an `injection' module, for reversible maps that are injective.
+
+</ul>
+
+<p>
+
+Changes to the Mercury compiler:
+
+<ul>
+
+<li>The compiler now generates error messages for mismatches between format
+ strings and lists of values to be printed in calls to string.format and
+ io.format.
+
+<li>The compiler now generates better error messages for determinism errors
+ involving single-solution contexts.
+
+<li> We have significantly improved the compiler's performance on predicates
+ with many clauses.
+
+<li>We have deleted the old --split-c-files option, as it conflicted with the
+ implementation of module initialisation and finalisation.
+
+</ul>
+
+<p>
+
+Portability Improvements:
+
+<ul>
+
+<li>We've ported Mercury to the x86_64 (AMD64 / Intel EMT64) architecture.
+
+<li>We've made the implementation compatible with gcc 4.1.
+
+</ul>
+<p>
+
+Changes to the Mercury debugger:
+
+<ul>
+
+<li>Users can now see a listing of the source code lines referred to by the
+ current environment (see the documentation for the `list' command in
+ the Mercury Users' Guide).
+
+<li>Users can now keep hold of a term, referring to it even when execution has
+ left the goal at which the term was available as the value of a program
+ variable.
+
+<li>Users can now see the set of places where two terms differ from each other.
+
+
+<li>The `set' command has been replaced by several other commands: the `format',
+ `format_param', `list_context_lines', `list_path', `xml_browser_cmd',
+ `xml_tmp_filename', `fail_trace_counts', `pass_trace_counts' and
+ `max_io_actions' commands.
+
+
+<li>The `save_to_file' command has been renamed the `dump' command.
+
+<li>The `save' command now saves the entire persistent state of the debugger
+ (with one small exception that cannot be reestablished by an mdb command from
+ an arbitrary point of execution).
+
+<li>The declarative debugger now supports an `undo' command, and allows users to
+ select the search algorithm.
+
+<li>The declarative debugger can now exploit information from the "code
+ footprints" of passed and failed test cases to find bugs with fewer
+ questions. We have also added two tools, mslice and mdice, to manipulate
+ files containing such footprints.
+
+<li>Subterm dependency tracking in the declarative debugger is now significantly
+ faster.
+
+</ul>
+
+<p>
+
+Changes to the compiler backends:
+
+<ul>
+
+<li>We have implemented an optimization, --optimize-constructor-last-call,
+ that can turn recursive calls that are followed only by unifications that
+ construct output arguments into tail calls. This can reduce the stack space
+ requirements of the predicates to which it is applicable from linear
+ in the size of the input data to constant.
+
+<li>We have implemented an optimization, --tuple, that can replace several
+ arguments that are usually passed to predicates together with a single
+ tuple. This can reduce parameter passing overheads.
+
+<li>The compiler can now optimize away the trail manipulation code from parts
+ of the program that cannot affect the trail.
+
+<li>The compiler now optimizes away any instructions referring to values
+ of dummy types. A type is a dummy type if it has one function symbol of
+ arity zero.
+
+<li>Higher order calls are now cheaper on the low level C backend.
+
+</ul>
+
+<p>
+
+Changes to the extras distribution:
+
+<ul>
+
+<li>We've added a library of data structures designed to work with
+ solver types.
+
+<li>We've added a library to generate Windows installer packages.
+
+<li>We've added a program to generate optimisation flags for the compiler.
+
+</ul>
+
+<p>
+
+<h3>DETAILED LISTING</h3>
+
+Changes to the Mercury language:
+
+<ul>
+
+<li>We have added support for functional dependencies to the typeclass system.
+ See the "Type classes" section of the Mercury Language Reference Manual for
+ details.
+
+<li>A new language construct allows programmers to promise that any given
+ goal is pure or semipure. Given Goal, a goal that uses impure and/or
+ semipure code, the goal
+<pre>
+ promise_pure ( Goal )
+</pre>
+ promises that Goal presents a pure interface. Given Goal, a goal that
+ uses impure code, the goal
+<pre>
+ promise_semipure ( Goal )
+</pre>
+ promises that Goal presents a semipure interface.
+
+<li>A new language construct allows programmers to promise that all solutions
+ of a given goal are equivalent with respect to the relevant equality
+ theories. Given Goal, a goal that computes values for two variables,
+ X and Y, the goal
+<pre>
+ promise_equivalent_solutions [X, Y] ( Goal )
+</pre>
+ promises that all solutions of Goal are equivalent with respect to the
+ equality theories of the types of X and Y. This means that the
+ promise_equivalent_solutions goal will be det if Goal is cc_multi,
+ and that the promise_equivalent_solutions goal will be semidet if Goal
+ is cc_nondet.
+ <p>
+ A related language construct allows programmers to promise that although
+ the solutions of a given goal are not necessarily equivalent with respect
+ to the relevant equality theories, it is nevertheless immaterial which one
+ is chosen in a particular context. The language construct is the `arbitrary'
+ goal, and the context is established by a `promise_equivalent_solution_sets'
+ goal. Consider a type representing maps from keys to values which is
+ implemented using 2-3 trees. In such a type, the precise shape of the tree
+ doesn't matter; two trees should be considered equal if they contain the same
+ set of keys and map them to the same values:
+<pre>
+ :- type tree23(K, V)
+ ---> two(tree23(K, V), K, V, tree23(K, V)
+ ; three(tree23(K, K, V, tree23(K, V), K, V, tree23(K, V))
+ where equality is tree23_equal
+ and comparison is tree23_compare.
+</pre>
+ Two values of e.g. type tree23(int, string) may differ in their top level
+ function symbol even through they denote the same map. Deconstructing a
+ value of such a type may therefore theoretically yield either "two" or
+ "three" as the top level function symbol, although in practice which one
+ you get is determined by the concrete structure of the term. Unifications
+ of such values with specific function symbols are therefore permitted only
+ in committed choice contexts. Unfortunately, one cannot simply put the
+ deconstruction into the scope of a promise_equivalent_solutions goal,
+ since the solutions are not equivalent in all contexts. However, the
+ solutions will be equivalent in *some* contexts. Consider this function
+ to count the number of key-value pairs in the map:
+<pre>
+ count(Tree) = Count :-
+ promise_equivalent_solution_sets [Count] (
+ (
+ arbitrary [Tree1, Tree2] (
+ Tree = two(Tree1, _Key, _Value, Tree2)
+ ),
+ Count = 1 + count(Tree1) + count(Tree2)
+ ;
+ arbitrary [Tree1, Tree2, Tree3] (
+ Tree = three(Tree1, _Key1, _Value1, Tree2,
+ _Key2, _Value2, Tree3)
+ ),
+ Count = 2 + count(Tree1) + count(Tree2) + count(Tree3)
+ )
+ ).
+ </pre>
+ <p>
+ The construct `arbitrary [Tree1, Tree2] Goal', where Goal computes Tree1
+ and Tree2, tells the compiler that it is OK to commit to the first solution
+ of Goal, because regardless of whether the goal succeeds and if so with
+ which values of Tree1 and Tree2, the set of solutions of the surrounding
+ `promise_equivalent_solution_sets [Count] Goal' will not be affected.
+ Regardless of whether Tree is bound to "two" or "three", the body of count
+ will compute the right value for Count.
+ <p>
+ A goal of the form `arbitrary [Vars] Goal' will be det if Goal is cc_multi,
+ and it will be semidet if Goal is cc_nondet. Goals of that form may occur
+ only inside `promise_equivalent_solution_sets' goals. There is no restriction
+ on the determinism of `promise_equivalent_solution_sets' goals.
+
+<li>We have added support for optional module initialisation. See the
+ "Module initialisation" section of the Mercury Language Reference
+ Manual for details.
+
+<li>We have added support for optional module finalisation. See the
+ "Module finalisation" section of the Mercury Language Reference
+ Manual for details.
+
+<li>We have added support for module-local mutable variables.
+ See the "Module-local mutable variables" section of the Mercury Language
+ Reference Manual for details.
+
+<li>We now have support for recognizing switches in which multiple switch arms
+ have shared code. Where previously programmers had to write code like this
+ <pre>
+ (
+ X = a,
+ ... code for a ...
+ ;
+ X = b(...),
+ ... code for b ...
+ ;
+ X = c,
+ ... code for c ...
+ ... shared code ...
+ ;
+ X = d(...),
+ ... code for d ...
+ ... shared code ...
+ )
+ </pre>
+ to have the disjunction recognized as a switch on X, they can now write
+ code like this:
+ <pre>
+ (
+ X = a,
+ ... code for a ...
+ ;
+ X = b(...),
+ ... code for b ...
+ ;
+ (
+ X = c,
+ ... code for c ...
+ ;
+ X = d(...),
+ ... code for d ...
+ ),
+ ... shared code ...
+ )
+ </pre>
+
+<li>If a predicate or function is defined by mode-specific clauses, like this:
+ <pre>
+ reversible_sort(Raw::in, Sorted::out) :-
+ list.sort(Raw, Sorted).
+ reversible_sort(Raw::out, Sorted::in) :-
+ is_sorted(Sorted),
+ list.perm(Sorted, Raw).
+ </pre>
+ the compiler by default assumes that the definitions of the different modes
+ have different semantics. Programmers can tell the compiler that the
+ mode-specific definitions, though syntactically distinct, are semantically
+ equivalent by including a pragma:
+<pre>
+ :- pragma promise_equivalent_clauses(reverse_sort/2).
+</pre>
+
+<li>To ensure soundness, goals in negated contexts using non-local variables
+ with dynamic modes (inst "any") must now be marked as impure.
+ <p>
+ If a goal uses a variable with a dynamic mode (inst "any"),
+ and that goal occurs inside a negated context (such as the
+ condition of an if-then-else, or a lambda expression),
+ and the variable also occurs outside of that negated context,
+ then the compiler will infer that goal to be impure,
+ and so such goals must normally be marked as "impure".
+ <p>
+ This change was required because Mercury implements negation using
+ the standard negation-as-failure approach, which is not sound if the
+ negated goal binds any non-local variables.
+ <p>
+ As usual, the programmer can use "promise_pure" if they are
+ sure that the goal is in fact pure, e.g. because they know that
+ the goal inside the negation will not instantiate the variable.
+
+</ul>
+
+<p>
+
+Changes to the Mercury standard library:
+
+<ul>
+
+<li>We have added the function `divide_equivalence_classes' to the `eqvclass'
+ module.
+
+<li>We have added an `injection' module, for reversible maps that are injective.
+
+<li>We have added list.foldl_corresponding/5, list.foldl2_corresponding/7,
+ list.map2_foldl2/8 and list.det_split_list/4.
+
+<li>We have added string.word_wrap/2.
+
+<li>We have added set.fold4/10.
+
+<li>We have added semidet_true/0 and semidet_false/0 as synonyms for
+ semidet_succeed/0 and semidet_fail/0.
+
+<li>We have added impure_true/0 and semipure_true/0.
+
+</ul>
+
+<p>
+
+Changes to the Mercury compiler:
+
+<ul>
+
+<li>The compiler now generates error messages for known mismatches between
+ format strings and lists of values to be printed in calls to
+ string.format and
+ io.format, unless the user specifies the --no-warn-known-bad-format-call
+ option.
+
+<li>If the user specifies the --warn-unknown-format-call option, the compiler
+ will also generate error messages for calls to string.format and io.format
+ in which the format string or the structure of the list of values to be
+ printed are not statically available.
+
+</ul>
+
+<p>
+
+Changes to the extras distribution:
+
+<ul>
+
+<li>We've added a library of data structures designed to work for solver types.
+ <p>
+ The module extras/solver_types contains versions of the standard
+ library's array, assoc_list, list and map modules that are designed to
+ work with terms that have inst `any'.
+
+<li>We've added a library to generate Windows installer packages.
+ <p>
+ The directory extras/windows_installer_generator contains a library to
+ generate Wix source files. WiX is an XML language that is used to generate
+ Microsoft Windows Installer (.msi) packages.
+
+<li>We've added a program to generate optimisation flags for the compiler.
+ <p>
+ The directory extras/gator contains a program to search for the
+ optimal set of compiler flags for a given program. The search
+ algorithm used is a genetic algorithm, which can run in parallel over
+ multiple hosts (by default, 1).
+
+</ul>
Index: download/include/release.inc
===================================================================
RCS file: /home/mercury/mercury1/repository/w3/download/include/release.inc,v
retrieving revision 1.43
diff -u -r1.43 release.inc
--- download/include/release.inc 6 Feb 2006 06:35:04 -0000 1.43
+++ download/include/release.inc 15 Sep 2006 04:45:58 -0000
@@ -60,19 +60,19 @@
?>
<h2><a name="info">Current Release</a></h2>
-Mercury 0.12.2 was released on January 25, 2006.
+Mercury 0.13.0 was released on September 14, 2006.
<h3>Information</h3>
<ul>
-<li> <a href = "release-0.12.html">
- Release notes for 0.12.2
+<li> <a href = "release-0.13.html">
+ Release notes for 0.13.0
</a>
-<li> <a href = "release-0.12-contents.html">
- Contents of release 0.12.2 distribution
+<li> <a href = "release-0.13-contents.html">
+ Contents of release 0.13.0 distribution
</a>
-<li> <a href = "release-0.12-bugs.html">
- Known problems with release 0.12.2
+<li> <a href = "release-0.13-bugs.html">
+ Known problems with release 0.13.0
</a>
<li> <a href = "limitations.html">
Limitations of the current release.
@@ -87,9 +87,9 @@
<ul>
<li> x86 machines running Debian Linux
- <li> x86 machines running SuSE Linux
<li> x86 machines running Microsoft Windows XP
- <li> x86 machines running SunOS 5.x
+ <li> x86 machines running Solaris 9 (SunOS 5.9)
+ <li> x86_64 machines running Debian Linux
<li> Apple PowerPC machines running Mac OS 10.3 and above
</ul>
@@ -108,6 +108,7 @@
that shipped with Red Hat Linux 7.0)
<li> x86 machines running FreeBSD 3.0
<li> x86 machines running other BSD Unix systems
+ <li> x86 machines running Solaris 8 (SunOS 5.8)
<li> PowerPC machines running Linux
<li> Sun SPARC machines running SunOS 4.x and 5.x
<li> HP PA machines running HPUX
@@ -129,10 +130,10 @@
<ol>
<li> <a href="http://gcc.gnu.org">GNU C (gcc)</a>
<p>
- We recommend GCC 3.4.x.
+ We recommend GCC 3.4.x or 4.1.x.
<p>
GCC 3.0, 3.3.1 and 4.0 will NOT work.
- They have bugs which cause
+ They have bugs that cause
internal compiler errors when compiling the C code generated by the
Mercury compiler.
<p>
@@ -202,41 +203,19 @@
<dl>
<dt> Compiler (15 Mb)
<dd>
-<? links_to_file("mercury-compiler-0.12.2.tar.gz", "yes") ?>
+<? links_to_file("mercury-compiler-0.13.0.tar.gz", "yes") ?>
<p>
<dt> Extras (750 kb)
<dd>
-<? links_to_file("mercury-extras-0.12.2.tar.gz", "no") ?>
+<? links_to_file("mercury-extras-0.13.0.tar.gz", "no") ?>
<p>
<dt> Tests (914 kb)
<dd>
-<? links_to_file("mercury-tests-0.12.2.tar.gz", "no") ?>
+<? links_to_file("mercury-tests-0.13.0.tar.gz", "no") ?>
</dl>
<h3><a name="binaries">Binary Distributions</a></h3>
-<h4>Windows Installer for Mercury 0.12.2</h4>
-
-The Windows installer package includes the Mercury compiler and
-debugger, but not mmake (instead use `mmc --make'). It also includes
-the MinGW version of gcc, so you don't need to download anything else to use
-Mercury — mmc will work directly from the Windows command prompt.
-The following grades are included in the "big" version: asm_fast.gc, asm_fast.gc.tr,
-asm_fast.gc.tr.debug, asm_fast.gc.tr.decldebug, hlc.gc and hlc.gc.tr, while the
-"small" version includes the grades asm_fast.gc, asm_fast.gc.tr.debug and hlc.gc.
-<p>
-<dl>
-<dt> Download Windows Installer ("big" version, 32 Mb)
-<dd>
-<? links_to_file("mercury-compiler-0.12.2.big.msi", "no") ?>
-<dt> Download Windows Installer ("small" version, 20 Mb)
-<dd>
-<? links_to_file("mercury-compiler-0.12.2.small.msi", "no") ?>
-</dl>
-
-<h4>Other Binary Distributions</h4>
-
-Binary packages for Linux and Mac OS X (10.3 and 10.4)
-are still to come.
+Binary distributions for 0.13.0 are not yet available.
Index: news/newsdb.inc
===================================================================
RCS file: /home/mercury/mercury1/repository/w3/news/newsdb.inc,v
retrieving revision 1.97
diff -u -r1.97 newsdb.inc
--- news/newsdb.inc 9 Aug 2006 06:54:35 -0000 1.97
+++ news/newsdb.inc 13 Sep 2006 09:46:55 -0000
@@ -22,6 +22,14 @@
$newsdb = array(
+"14 September 2006" => array("New release",
+
+"We are pleased to announce the release of version 0.13 of the
+Mercury system. The new release can be downloaded
+<a href=\"download/release.html\">here</a>. For a list of the changes since
+version 0.12 see the <a href=\"download/release-0.13.html\">release notes</a>."
+),
+
"8 August 2006" => array("Support for Unicode characters in string literals",
"The escape sequences <em>\\uXXXX</em> and <em>\\UXXXXXXXX</em> can now
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list