[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