[m-rev.] diff: update web pages for new release

Fergus Henderson fjh at cs.mu.OZ.AU
Tue Dec 24 16:36:00 AEDT 2002


Estimated hours taken: 3
Branches: main

Update the web site for release 0.11.

w3/download/release-0.11.php3:
w3/download/release-0.11-bugs.php3:
w3/download/release-0.11-contents.php3:
	New files.  Trivial wrappers around the corresponding .inc files.

w3/download/include/release-0.11.inc:
w3/download/include/release-0.11-bugs.inc:
w3/download/include/release-0.11-contents.inc:
	New files.  These contains the 0.11 NEWS, BUGS, and RELEASE_NOTES
	files (respectively), converted to HTML.

Workspace: /home/ceres/fjh/mercury
Index: w3/download/include/release-0.11.inc
===================================================================
RCS file: w3/download/include/release-0.11.inc
diff -N w3/download/include/release-0.11.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/include/release-0.11.inc	24 Dec 2002 05:32:17 -0000
@@ -0,0 +1,675 @@
+<h2>New in release 0.11 of the Mercury distribution</h2>
+
+<h3>HIGHLIGHTS</h3>
+
+Changes to the Mercury language:
+<ul>
+<li> Support for constrained polymorphic modes.
+<li> Addition of state variable syntax.
+<li> Improved support for higher-order functions.
+<li> Predicate and function equivalence type and mode declarations.
+<li> Support for defining predicates or functions
+  using different clauses for different modes.
+<li> Support for Haskell-like "@" expressions.
+<li> Generalized foreign language interface.
+</ul>
+
+<p>
+
+Changes to the Mercury compiler:
+<ul>
+<li> A new `--make' option, for simpler building of programs.
+<li> A new `--smart-recompilation' option, for fine-grained dependency tracking.
+<li> A new optional warning: `--warn-non-tail-recursion'.
+<li> A new optimization: `--constraint-propagation'.
+<li> A new optimization: `--loop-invariants'.
+<li> Support for arbitrary mappings from module name to source file name. 
+</ul>
+
+<p>
+
+Portability improvements:
+<ul>
+<li> Mac OS X is now supported "out-of-the-box".
+<li> On Windows we now support generating non-Cygwin executables.
+<li> Better conformance to ANSI/ISO C.
+</ul>
+
+<p>
+
+Changes to the compiler back-ends:
+<ul>
+<li> The native code Linux/x86 back-end is now "release quality".
+<li> The .NET CLR back-end is much improved.
+</ul>
+
+<p>
+
+Major improvements to the Mercury debugger, including:
+<ul>
+<li> Support for source-linked debugging using vim (rather than emacs).
+<li> Command-line completion.
+<li> Ability to display values of higher-order terms.
+<li> Declarative debugging.
+<li> Support for transparent retries across I/O.
+</ul>
+
+<p>
+
+A new profiler, which we call the Mercury deep profiler or mdprof:
+<ul>
+<li> Supports both time and memory profiling.
+<li> Gathers information about individual call sites as well as procedures.
+<li> Eliminates the assumption that all calls to a procedure have equal cost.
+<li> Allows users to explore the gathered data interactively with a web browser.
+</ul>
+
+<p>
+
+Numerous minor improvements to the Mercury standard library.
+
+<p>
+
+A new testing tool in the extras distribution.
+
+<h3>DETAILED LISTING</h3>
+
+Changes to the Mercury language:
+
+<ul>
+
+<li> We have added support for constrained polymorphic modes.  See the section
+  on Constrained Polymorphic Modes in the Modes chapter of the Mercury Language
+  Reference Manual.
+
+<li> A more general alternative to DCG syntax has been added to the language
+  to simplify the manipulation of threaded state.  See the section on State
+  Variables in the Syntax chapter in the Mercury Language Reference Manual.
+
+<li> If a higher-order function term has inst 'ground' it is now assumed to have
+  the standard higher-order function inst 'func(in, .., in) = out is det'.
+  This makes higher-order functional programming much easier, particularly when
+  passing functions to polymorphic predicates.
+
+  This change is not completely backwards compatible since, for safety,
+  we must now disallow calls that would cause a variable that has a
+  nonstandard function inst to become 'ground'.
+
+<li> Predicate and function type and mode declarations can now be expressed
+  in terms of higher-order predicate and function types and insts, rather
+  than explicitly listing the argument types and modes.  This is useful
+  where several predicates or functions must have the the same type and
+  mode signature.
+
+  <p>
+
+  For example:
+  <pre>
+	:- type foldl_pred(T, U) == pred(T, U, U).
+	:- inst foldl_pred == (pred(in, in, out) is det).
+	:- pred p `with_type` foldl_pred(T, U) `with_inst` foldl_pred.
+  </pre>
+ 
+  <p>
+
+  For more information see the "Predicate and function type declarations"
+  section of the "Types" chapter and the "Predicate and function mode
+  declarations" section of the "Modes chapter" of the Mercury Language
+  Reference Manual.
+
+<li> The constructor for lists is now called '[|]' rather than '.'.
+  `./2' will eventually become the module qualification operator.
+  This change only affects programs which use `./2' explicitly.
+  Programs which only use the `[H | T]' syntax will be unaffected.
+
+<li> 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.
+
+  <p>
+
+  Unification expressions are most useful when writing switches:
+  <pre>
+	p(X, X) :- X = f(_, _).
+  </pre>
+  can now be written as
+  <pre>
+	p(X @ f(_, _), X).
+  </pre>
+
+  <p>
+
+  See the "Data-terms" section of the "Syntax" chapter of the
+  Mercury Language Reference Manual for more details.
+
+<li> We've extended the language to allow you to specify different clauses
+  for different modes of a predicate or function.  This is done by
+  putting mode annotations in the head of each clause.
+  For example, you can write
+  <pre>
+	:- mode p(in).
+	:- mode p(out).
+	p(X::in) :- ... /* clause for the `in' mode */
+	p(X::out) :- ... /* clause for the `out' mode */
+  </pre>
+
+  <p>
+
+  For predicates or functions which have different clauses for different
+  modes, you need to either (1) add a `pragma promise_pure' declaration
+  for the predicate or function, and ensure that the declarative semantics
+  remains the same in each mode, or (2) declare the predicate as impure.
+
+<li> We now allow `:- pragma promise_semipure' declarations. For more
+  information, see the "Impurity" chapter of the Mercury Language
+  Reference Manual.
+
+<li> We've added `:- pragma c_import_module' declarations, which are
+  used to make the C declarations for predicates and functions with
+  `:- pragma export' declarations in the imported module visible
+  to any C code in the importing module. `mmake' uses
+  `:- pragma c_import_module' declarations to make sure that the
+  header file for the imported module is built before it is needed,
+  which it can't do if the header file is explicitly #included.
+
+<li> The foreign language interface has been generalized to support
+  interfacing with languages other than C.
+
+  <p>
+
+  In particular, the Mercury compiler's .NET back-end now supports
+  interfacing with C#, IL, and "Managed C++" (C++ with Microsoft's
+  extensions for the .NET CLR).  Mercury procedures can be defined
+  using inline code fragments written in any of these languages.
+
+  <p>
+
+  For details, see the new "Foreign language interface" chapter of
+  the Mercury Language Reference Manual.
+
+<li> We've removed the undocumented operators `export_adt', `export_cons',
+  `export_module', `export_op', `export_pred', `export_sym', `export_type',
+  `import_adt', `import_cons', `import_op', `import_pred', `import_sym',
+  `import_type' `use_adt', `use_cons', `use_op', `use_pred', `use_sym'
+  and `use_type'. These operators were reserved for module system
+  extensions which are unlikely to be implemented.
+
+</ul>
+
+<p>
+
+Changes to the Mercury standard library:
+
+<ul>
+
+<li> The Prolog-style term comparison operators @<, @=<, @>, @>=
+  are now builtin.
+
+<li> A new builtin function ordering/2 has been added.
+
+<li> We've added a function to io.m to construct io__error codes from error
+  messages: `io__make_io_error'.
+
+<li> The assumptions that we make about user supplied comparison predicates and
+  functions have been relaxed to allow more general orderings.  The new
+  assumptions are documented in builtin.m.
+
+<li> The builtin predicates !/0 and !/2 from Mercury's Prolog heritage have been
+  removed (`!' is now a prefix operator used in the state variable syntax).
+
+<li> We have added the type class `pprint__doc/1' and a new concatenation
+  operator, `++/2', which should make it easier to construct doc values.
+<li> Performance bugs in `pprint__to_doc' have now been fixed.  Even
+  very large terms can now be converted to docs and pretty printed without
+  causing a machine to thrash or run out of memory.
+
+<li> `io__read_file' and `io__read_file_as_string' now have better error
+  handling. The result types have changed, so code using these predicates
+  will need minor modifications.
+<li> We've added predicates `io__input_stream_foldl', `io__input_stream_foldl_io'
+  and `io__input_stream_foldl2_io', which apply a predicate to each character
+  of an input stream in turn.
+<li> We've added predicates `io__binary_input_stream_foldl',
+  `io__binary_input_stream_foldl_io' and `io__binary_input_stream_foldl2_io',
+  which apply a predicate to each byte of a binary input stream in turn.
+<li> We've added versions of `io__print', `io__write' and `io__write_univ'
+  that allow the caller to specify how they should treat values of noncanonical
+  types, e.g. types in which a single semantic value may have more than one
+  syntactic expression.
+<li> We've added four new predicates to allow programs to retrieve current
+  streams: `io__current_input_stream', `io__current_output_stream',
+  `io__current_binary_input_stream', and `io__current_binary_output_stream'.
+<li> We've added a predicate to io.m to return the last modification time
+  of a file: `io__file_modification_time'.
+<li> We've added cc_multi modes to io__write_list/5 and io__write_list/6.
+<li> You can now close stdin, stdout and stderr.
+
+<li> We've added four functions to list.m for mapping functions over
+  corresponding members of lists: list__map_corresponding/3,
+  list__map_corresponding3/4, list__filter_map_corresponding/3
+  and list__filter_map_corresponding3/4.
+<li> We've added some other new functions to list.m, namely
+  list__last_det/2, list__split_last/3 and list__split_last_det/3.
+<li> We've added cc_multi modes to list__foldl/4 and list__foldr/4.
+<li> We've added a predicate list__map_foldl2.
+<li> As mentioned above, the constructor for lists has changed from './2'
+  to `[|]/2'. This change affects the behaviour of the term manipulation
+  predicates in the standard library when dealing with values of
+  type `term__term/1' representing lists. The affected predicates are
+  parser__read_term, parser__read_term_from_string, term__type_to_term,
+  term__term_to_type, term_io__read_term and term_io__write_term.
+  Also beware that std_util__functor and std_util__deconstruct now
+  return `[|]' rather than `.' for lists, and calls to std_util__construct
+  which construct lists may need to be updated.
+<li> We've added the predicate list__is_empty/1 and list__is_not_empty/1.
+<li> We've added the predicate list__remove_adjacent_dups/3.
+
+<li> We've added a function version of error/1, called func_error/1, to require.m.
+
+<li> ops.m now defines a typeclass which can be used to define operator
+  precedence tables for use by parser.m and term_io.m. See
+  samples/calculator2.m for an example program.
+
+  The `ops__table' type has been renamed `ops__mercury_op_table'.
+  `ops__init_op_table' has been renamed `ops__init_mercury_op_table'.
+  `ops__max_priority' is now a function taking an operator table argument.
+
+<li> The predicates and functions in int.m, float.m, math.m and array.m now
+  generate exceptions rather than program aborts on domain errors and
+  out-of-bounds array accesses. There are new functions
+  `float__unchecked_quotient/2', `int__unchecked_quotient/2' and
+  `int__unchecked_rem/2' for which no checking is performed and the
+  behaviour if the right operand is zero is undefined.
+
+<li> We've removed the reverse modes of the arithmetic functions in
+  float.m and extras/complex_numbers.  (Because of rounding errors,
+  the functions aren't actually reversible.)
+
+<li> float__pow now works for negative exponents, and runs much faster
+  for large exponents.
+
+<li> We've removed the destructive update modes of string__set_char,
+  string__set_char_det and string__unsafe_set_char. The compiler
+  currently always stores constant strings in static data, even
+  if they are passed to procedures with mode `di', so any attempt
+  to update a constant string will cause a crash. Fixing this properly
+  will be a lot of work, so for now we have just removed the modes.
+
+<li> We've added string__suffix, string__words/1, string__foldr,
+  string__foldl_substring and string__foldr_substring.
+
+<li> The exception module has a new predicate `try_store', which is
+  like `try_io', but which works with stores rather than io__states.
+
+<li> We've fixed a bug in time.m. Type `tm' didn't store the day of the month,
+  which meant that the functions which required that field (e.g. time__asctime,
+  time__mktime) did not work.
+
+  <p>
+
+  The order of the fields of type `time__tm' has been changed so that
+  comparison of values of type `tm' whose `tm_dst' fields are identical
+  is equivalent to comparison of the times those values represent.
+
+<li> std_util.m now contains predicates and functions `map_maybe',
+  `fold_maybe', `map_fold_maybe' and `map_fold2_maybe', which are
+  analogues of `list__map', `list__foldl', `list__map_foldl' and
+  `list__map_foldl2' operating on values of type `maybe' instead
+  of `list'.
+
+<li> We've added a predicate to io.m to return the last modification time
+  of a file (io__file_modification_time).
+
+<li> There is a variant of io__call_system, io__call_system_return_signal
+  which on interrupt returns the number of the signal which interrupted
+  the command rather than just an error message.
+
+<li> We've added added several new predicates for deconstructing terms to
+  std_util.m. `named_argument' and `det_named_argument' are analogous
+  to `argument' and `det_argument' respectively, but specify the desired
+  argument by its name, not its position. We have also added committed choice
+  version of all the predicates that deconstruct terms. These differ from the
+  existing versions in that they do not abort when called upon to deconstruct
+  non-canonical terms, such as values of types with user-defined equality.
+
+<li> We've added a new predicate `intersect_list' in each of the modules
+  implementing sets in the Mercury standard library.
+
+<li> We've added a predicate version of `set__fold'.
+
+<li> We've added function versions of `builtin__unsafe_promise_unique',
+  `ops__init_op_table' and `ops__max_priority'.
+
+<li> We've added a version of `getopt__process_options' which returns
+  the option arguments.
+
+<li> `getopt__process_options' has been modified to allow negation of
+  accumulating options. Negating an accumulating option empties
+  the accumulated list of strings.
+
+<li> We've added some functions to the term_io module to return printable
+  representations of term components as strings.
+
+<li> We've made the outputs of the string concatenation primitives unique.
+
+<li> New convenience/readability predicates `int__even/1' and `int__odd/1'.
+
+<li> New predicate benchmark_det_io for benchmarking code that performs I/O.
+
+<li> We've removed the long obsolete `int__builtin_*' and
+  `float__builtin_float_*' predicates, which were synonyms
+  for the arithmetic functions dating from when Mercury didn't
+  have functions. 
+
+<li> We've added int:'/'/2 as a synonym for int:'//'/2 and false/0 as a
+  built-in synonym for fail/0 (both left-overs from Mercury's Prolog
+  heritage.)
+
+<li> dir:'/'/2 is now a synonym for `dir__make_path_name'.
+  
+<li> We've removed the long obsolete predicates `io__read_anything',
+  `io__write_anything', and `io__print_anything', which were long ago
+  renamed as `io__read', `io__write', and `io__print' respectively.
+
+<li> We've added random__random/5, which produces a random integer in a
+  given range, and random__randcount/3, which returns the number of
+  distinct random numbers that can be generated.
+
+</ul>
+
+<p>
+
+Changes to the extras distribution:
+
+<ul>
+
+<li> There's a new testing tool called "quickcheck", which is similar to
+  Haskell's "QuickCheck".  See quickcheck/tutes/index.html.
+
+<li> The interface to Moose has been changed in a non-backwards compatible
+  way to support user-defined modes for the parser state and integrate
+  better with lex.
+
+</ul>
+
+<p>
+
+Changes to the Mercury compiler:
+
+<ul>
+
+<li> There is a new `--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" for details.
+
+<li> The Mercury compiler can now perform smart recompilation, enabled by the
+  `--smart-recompilation' option. With smart recompilation, when the
+  interface of a module changes, only modules which use the changed
+  declarations are recompiled. Smart recompilation does not yet work
+  with `--intermodule-optimization'.
+
+<li> The Mercury compiler can now handle arbitrary mappings from source files
+  to module names.  If the program contains modules for which the source
+  file name does not match the module name, before generating the
+  dependencies the command `mmc -f SOURCES' must be run, where `SOURCES'
+  is a list of the names of all of the source files.  If the names of the
+  source files all match the contained module names, `mmc -f' need not be run.
+
+<li> There is a new `--use-grade-subdirs' option which is similar to
+  `--use-subdirs', but allows multiple grades to be built in a
+  directory at the same time.  `--use-grade-subdirs' does not
+  work with Mmake (it does work with `mmc --make').
+
+<li> The compiler and scripts accept a `--mercury-stdlib-dir' option,
+  which overrides the configured location of the Mercury standard
+  library.  There is also an environment variable MERCURY_STDLIB_DIR
+  which has the same effect.  The environment variables which were
+  previously used to override the location of the standard library
+  (MERCURY_ALL_C_INCL_DIRS, MERCURY_ALL_MC_C_INCL_DIRS, MERCURY_INT_DIR,
+  MERCURY_C_LIB_DIR, MERCURY_MOD_LIB_MODS, MERCURY_TRACE_LIB_MODS) are
+  now deprecated, and will be removed in a future release.
+  MERCURY_C_INCL_DIR has already been removed.
+
+<li> We've added a new compiler option `--warn-non-tail-recursion', which
+  causes the compiler to issue a warning about any directly recursive
+  call that is not a tail call.
+
+<li> The automatically generated header files for modules containing
+  `pragma export' declarations are now named `<var>module</var>.mh', not
+  `<var>module</var>.h'. This avoids conflicts with system header files.
+
+<li> We've fixed a long-standing bug in the handling of module imports.
+  Previously, if `module1' imported `module2' which imported `module3' in
+  its interface section, then any types, insts, modes and typeclasses defined
+  in the interface of `module3' could be used in `module1' even
+  if `module1' did not import `module3' directly.
+
+  <p>
+
+  This change will break some existing programs, but that is easily fixed
+  by adding any necessary `:- import_module' or `:- use_module' declarations.
+
+<li> Options for the Mercury runtime can now be set at compile time using
+  the new `--runtime-flags' option of ml and c2init.
+
+<li> We've added a new optimization pass -- constraint propagation.
+
+  <p>
+
+  Constraint propagation attempts to transform the code so
+  that goals which can fail are executed as early as possible.
+  It is enabled with the `--constraint-propagation' option
+  (or `--local-constraint-propagation' for a more restricted
+  version of the transformation).
+
+<li> The Mercury compiler can now perform inter-module optimization using
+  information from transitively imported modules. This is especially
+  useful for back-ends which do not support abstract equivalence types
+  properly (for example the .NET backend). To disable this behaviour and
+  only optimize using information from directly imported modules, use the
+  option `--no-read-opt-files-transitively'.
+
+<li> For each `--Xflags' option there is now a `--Xflag' option which allows a
+  single quoted argument to be passed to the invoked program.  This is useful
+  where the argument is a directory name containing spaces.
+
+<li> The `--convert-to-goedel' option has been removed.
+  It never really worked anyway.
+
+</ul>
+
+<p>
+
+Portability improvements:
+
+<ul>
+
+<li> Mac OS X is now supported "out-of-the-box".
+
+  <p>
+
+  See README.MacOSX for details.
+
+<li> On Windows we now support generating non-Cygwin executables.
+
+  <p>
+
+  The Mercury compiler source distribution can be configured using
+  `configure --with-cc="gcc -mno-cygwin"'.  This option ensures
+  that the Mercury libraries are only linked with the standard
+  Windows libraries, not the Cygwin Unix emulation library,
+  so Mercury programs don't need Cygwin, and use DOS/Windows-style
+  path names rather than Cygwin's Unix-style path names.
+
+  <p>
+  
+  Note that you still need Cygwin to install and use Mercury.
+  The change is that the programs which you build using Mercury
+  don't need Cygwin anymore.
+
+<li> Better conformance to ANSI/ISO C.
+
+  <p>
+
+  We now pass all the tests in the Mercury test suite
+  when the compiler is built with the "lcc" C compiler,
+  which is more strict about ANSI/ISO C conformance than GNU C.
+  This should also make it easier to port to other C compilers.
+
+</ul>
+
+<p>
+
+Changes to the Mercury debugger:
+
+<ul>
+
+<li> The debugger can now print goals just as Prolog debuggers do. At an exit
+  port of e.g. append, the command "print goal" will print the current goal
+  in a form such as "append([1], [2], [1, 2])".
+
+<li> You can now navigate terms in the debugger by argument name as well as by
+  argument number.
+
+<li> The debugger can now print higher order values.
+
+<li> The debugger can now print type_info structures. However, since such
+  structures are normally of interest to implementors only, the debugger
+  will print such values only if the user gives the command "print_optionals
+  on".
+
+<li> The debugger can now perform command line completion when compiled
+  with GNU Readline support enabled.
+
+<li> We've added a 'view' command to `mdb', which opens a `vim' window and
+  in it displays the current source location, updated at each event.  This
+  requires X11 and a version of `vim' with the `clientserver' feature
+  enabled.
+
+<li> The `--window' mdb option now creates a window for mdb, not
+  the program.  The main advantage of the new behaviour is that
+  redirection of the program's input and output works.  The old
+  behaviour is still available with `mdb --program-in-window'.
+
+<li> The debugger now includes support for declarative debugging.  The `dd'
+  command starts diagnosis at any exit, fail or exception port in mdb.  See
+  the Mercury User's Guide for more details.
+
+<li> When a program is compiled in a debugging grade, the debugger can be
+  asked, via the command `table_io start', to make I/O primitives (such as
+  io__open_file, io__write_string etc) idempotent. This means that a given
+  call to e.g. io__open_file will open the specified file only once,
+  even if retry commands cause the call to be executed more than once.
+
+</ul>
+
+<p>
+
+A new profiler, which we call the Mercury deep profiler or mdprof:
+
+<ul>
+
+<li> The old Mercury profiler is based on the technology of the standard Unix
+  profiler gprof. This technology makes the assumption that all calls to a
+  given C function (in Mercury, a given function or predicate in a given mode)
+  have the same cost, whether the cost being measured is CPU time, memory cells
+  allocated, memory words allocated etc. In C programs, this assumption is
+  usually close enough to correct for the output of gprof to be useful. In
+  Mercury, due to the presence of parametric polymorphism and the significantly
+  higher frequency of higher order code, different call sites are far more
+  likely to have distinct performance characteristics than in C, so the output
+  of a gprof-style profiler is usually not accurate enough to be useful.
+
+  <p>
+
+  The new profiler records, for each of its measurements, not just the current
+  predicate/function and its caller, but the entire chain of ancestors. This
+  "deep context" is what gives the profiler its name. Actually, to keep
+  overheads down, we don't walk the stack at every measurement; we just
+  associate the current context with each measurement, and update the current
+  context when it changes. Given this fact, it costs very little extra to
+  record measurements on every aspect of performance (counts of calls, exits,
+  fails and redos, counts of memory cells and memory words allocated, and time
+  spent). We thus have only one deep profiling grade component, .profdeep,
+  as opposed to the old profiler which has several grade components
+  for different subsets of these measurements.
+
+<li> The deep context recorded by the deep profiler records the identities of
+  the call sites as well as the identities of predicates and functions
+  in the list of ancestors. If a predicate p contains two calls to predicate q,
+  this allows the deep profiler to report that one call to q costs next to
+  nothing while the other one is a major performance problem.
+
+<li> The deep profiler gathers so much data that giving it to the user all at once
+  would swamp the user with too much information. We therefore implemented the
+  deep profiler as a CGI program. Users can use thus use a web browser to
+  explore the information contained in profiling data files.
+
+<li> The deep profiler currently does not handle programs that catch exceptions.
+
+<li> Further information about the deep profiler is available in the paper
+  "Deep profiling: engineering a profiler for a declarative programming
+  language" by Thomas C. Conway and Zoltan Somogyi, available
+  <a href="http://www.cs.mu.oz.au/mercury/information/papers.html#mu_01_24">here</a>.
+
+</ul>
+
+<p>
+
+Changes to the compiler back-ends:
+
+<ul>
+
+<li> The native code Linux/x86 back-end is now "release quality".
+
+  <p>
+
+  The native code back-end, which was first released in Mercury 0.10,
+  compiles directly to assembler, rather than than going via C.
+  This back-end is enabled using the `--target asm' option.  It is
+  implemented by linking the Mercury compiler with the (relatively)
+  language independent GNU Compiler Collection back-end.  In other words,
+  it is a Mercury front-end for GCC.
+
+  <p>
+
+  This release is the first to be based on an officially released
+  version of GCC (it is based on GCC 3.2).  In this release, the native
+  code back-end now passes all of the applicable tests in the Mercury test
+  suite, including bootstraping the Mercury compiler.  Currently it is only
+  supported on i*86-pc-linux-gnu (Intel x86-based PCs running Linux).
+
+  <p>
+
+  For details, see <a href="http://www.cs.mu.oz.au/mercury/download/gcc-backend.html">this link</a>.
+
+<li> .NET CLR back-end much improved.
+
+  <p>
+
+  The .NET CLR back-end, which generates MSIL code for Microsoft's new
+  .NET Common Language Runtime, has been substantially improved.
+  Mercury data structures are mapped to .NET CLR data types in a more
+  natural and more efficient manner.  A lot more of the standard library
+  is now supported.  Text files on Windows are now output with proper
+  Windows CR-LF line endings.  Many bugs have been fixed.
+
+  <p>
+
+  This back-end supports the whole of the Mercury language, but the
+  Mercury standard library implementation for the .NET CLR is still
+  not yet complete.  The .NET CLR back-end now passes about half of
+  the tests in the Mercury test suite.
+
+  <p>
+
+  This back-end is selected when you use the `--grade il' option.
+
+  <p>
+
+  See <a href="http://www.cs.mu.oz.au/mercury/dotnet.html">here</a> and/or
+  <a href="http://www.cs.mu.oz.au/mercury/information/dotnet/mercury_and_dotnet.html">here</a>.
+
+</ul>
Index: w3/download/include/release-0.11-contents.inc
===================================================================
RCS file: w3/download/include/release-0.11-contents.inc
diff -N w3/download/include/release-0.11-contents.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/include/release-0.11-contents.inc	24 Dec 2002 05:22:58 -0000
@@ -0,0 +1,56 @@
+<h2>Release 0.11.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> a 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
+		<li> a CLP(R) interface,
+		     i.e. constraint solving over real numbers
+	     </ul>
+	<li> a set of generic stream type classes
+	<li> UIs:
+	     <ul>
+		<li> graphics using Tk and OpenGL
+		<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> a general purpose lexer
+	<li> Moose, a parser generator for Mercury
+	<li> quickcheck, a testing tool similar to Haskell's QuickCheck
+	</ul>
+<p>
+The "mercury-tests" distribution contains a test suite.
Index: w3/download/include/release-0.11-bugs.inc
===================================================================
RCS file: w3/download/include/release-0.11-bugs.inc
diff -N w3/download/include/release-0.11-bugs.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/include/release-0.11-bugs.inc	24 Dec 2002 05:27:23 -0000
@@ -0,0 +1,234 @@
+<h2>Release 0.11 - Known Problems</h2>
+
+The following is collected email of reported problems with release
+0.11 of the Mercury distribution.
+Included, where possible, are patches or work-arounds.
+There is also a
+<a href="http://sourceforge.net/bugs/?group_id=1126">Mercury bugs page</a>
+on SourceForge.
+<p>
+In addition to the bugs mentioned here, some bugs related
+to the implementation of particular languages features
+(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 in the distribution.
+See also the LIMITATIONS file.
+<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.
+<p>
+<hr>
+<p>
+Subject: GCC internal error
+<br>
+Date: Tue, 26 June 2001
+<p>
+<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.
+</pre>
+<p>
+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 GCC maintainers have shown no interest in fixing it. They appear
+to consider global register variables to be a deprecated feature,
+even though it isn't documented as such in the GCC manual.
+<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 any other unofficial releases of GCC.
+<ul>
+<p>
+<hr>
+<p>
+Subject: bug report - Inf and NaN
+<br>
+Date: Wed, 4 Oct 1995
+<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__state::di, io__state::uo) is det.
+
+:- implementation.
+
+main -->
+	io__write_float(1E400),
+	io__write_string("\n").
+</pre>
+<p>
+<hr>
+<p>
+Subject: NaN behaviour
+<br>
+Date: Mon, 21 Oct 2002
+<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.
+<p>
+<hr>
+<p>
+Subject: nit in error msg
+<br>
+Date: Thu, 16 May 1996
+<p>
+Here's another small error in an error message.  If you comment out
+the [] clause for the functions car/1 or cdr/1, you get this message:
+<p>
+<pre>
+fntest.m:023: In `car(in) = out':
+fntest.m:023:   Error: determinism declaration not satisfied.
+fntest.m:023:   Declared `det', inferred `semidet'.
+fntest.m:023:   in argument 1 of clause head:
+fntest.m:023:   unification of `HeadVar__1' and `[X | V_4]' can fail.
+</pre>
+<p>
+It says Declared `det', inferred `semidet', but I never declared it at
+all.  It's a bit misleading.  Certainly not a major problem, and the
+later part of the message makes it quite clear what the problem is,
+but I thought I'd point it out to you before I forgot it.
+
+<p>
+<hr>
+<p>
+Subject: missed mode error
+<br>
+Date: Tue, 28 May 1996
+<p>
+Another one for the bug report file:
+<p>
+The goal `some [X, Y] X \= Y' should be a mode error,
+but the current mode checker doesn't report an error.
+Instead, the compiler goes on to generate code which gives
+the wrong answer.  For example, the following program prints out `no'.
+The same problem also occurs with `some [X, Y] (X = Y -> fail ; true)'.
+<p>
+<pre>
+:- module bug.
+:- interface.
+:- import_module io.
+
+:- pred main(io__state::di, io__state::uo) is det.
+
+:- implementation.
+
+main --> 
+	( { p } -> io__write_string("yes\n") ; io__write_string("no\n") ).
+
+:- pred p is semidet.
+p :-
+	some [X, Y] X \= Y.
+</pre>
+<p>
+The bug occurs only when the variables being unified inside a negated
+context are not live, i.e. when it is the last occurrence of those variables.
+
+<p>
+<hr>
+<p>
+Subject: bug with PC values on Alpha
+<br>
+Date: Wed, 12 Jun 1996
+<p>
+On the alpha, if the Mercury runtime catches a signal, it
+sometimes prints out the wrong value for the PC (program counter).
+<p>
+<hr>
+Subject: inter-module optimization and abstract exported equivalence types.
+<br>
+Date: Thu, 19 Feb 1998
+<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.
+<pre>
+:- module foo.
+:- interface.
+:- import_module list, term.
+:- pred test(list(var)::in) is det.
+:- implementation.
+:- import_module int, std_util.
+
+test(Args0) :-
+	MakeIndex =
+		lambda([Elem0::in, Elem::out, Index0::in, Index::out] is det, (
+			Elem = Elem0 - Index0,
+			Index is Index0 + 1
+		)),
+	list__map_foldl(MakeIndex, Args0, _, 0, _).
+</pre>
+<p>
+<hr>
+<p>
+Subject: `:- pragma does_not_terminate'
+<br>
+Date: Wed, 9 Jun 1999
+<p>
+`:- pragma does_not_terminate' declarations do not work.
+The compiler's termination analysis seems to ignore them.
+<p>
+<hr>
+<p>
+Date: Wed, 1 Dec 1999
+<br>
+Subject: compiler infinite loop for cyclic type classes
+<p>
+According to the language reference manual:
+<p>
+<pre>
+|  Typeclass constraints on type class declarations gives rise to a
+|  superclass relation.  This relation must be acyclic.  That is, it is an
+|  error if a type class is its own (direct or indirect) superclass.
+</pre>
+<p>
+But if you try to compile modules containing cyclic typeclasses,
+the compiler goes into an infinite loop and eventually gets a
+stack overflow, rather than reporting a proper error message.
+<p>
+<hr>
Index: w3/download/release-0.11-bugs.php3
===================================================================
RCS file: w3/download/release-0.11-bugs.php3
diff -N w3/download/release-0.11-bugs.php3
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/release-0.11-bugs.php3	24 Dec 2002 05:11:17 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+    $menu="Download";
+    $submenu="Current Release";
+    $title="Release 0.11.0 known problems";
+    $dir="download";
+    $root="..";
+    $include="release-0.11-bugs.inc";
+    include "$root/include/template.inc"
+?>
+</HTML>
Index: w3/download/release-0.11-contents.php3
===================================================================
RCS file: w3/download/release-0.11-contents.php3
diff -N w3/download/release-0.11-contents.php3
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/release-0.11-contents.php3	24 Dec 2002 05:11:25 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+    $menu="Download";
+    $submenu="Current Release";
+    $title="Release 0.11.0 Contents";
+    $dir="download";
+    $root="..";
+    $include="release-0.11-contents.inc";
+    include "$root/include/template.inc"
+?>
+</HTML>
Index: w3/download/release-0.11.php3
===================================================================
RCS file: w3/download/release-0.11.php3
diff -N w3/download/release-0.11.php3
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ w3/download/release-0.11.php3	12 Oct 2002 19:42:54 -0000
@@ -0,0 +1,11 @@
+<HTML>
+<?
+    $menu="Download";
+    $submenu="Current Release";
+    $title="Release 0.11 Notes";
+    $dir="download";
+    $root="..";
+    $include="release-0.11.inc";
+    include "$root/include/template.inc"
+?>
+</HTML>

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list