[m-rev.] diff: [main branch] put 0.11 news back in NEWS file

Fergus Henderson fjh at cs.mu.OZ.AU
Mon Dec 2 21:19:58 AEDT 2002


Estimated hours taken: 0.25
Branches: main

NEWS:
HISTORY:
	Backout Pete's change to move the NEWS for 0.11 into the HISTORY file.
	We shouldn't do that until 0.11 has actually been released.

Workspace: /home/ceres/fjh/ws-ceres2/mercury
Index: HISTORY
===================================================================
RCS file: /home/mercury1/repository/mercury/HISTORY,v
retrieving revision 1.21
diff -u -d -r1.21 HISTORY
--- HISTORY	2 Dec 2002 09:53:18 -0000	1.21
+++ HISTORY	2 Dec 2002 10:14:38 -0000
@@ -1854,516 +1854,3 @@
 There are however some new packages in the mercury-extras distribution:
 * lex: a lexical analyzer library for Mercury.
 * curs: a simplified binding to the ncurses/panel libraries for terminal I/O.
-
-Mercury 0.11, December 2002
----------------------------
-
-HIGHLIGHTS
-==========
-
-Changes to the Mercury language:
-* Support for constrained polymorphic modes.
-* Addition of state variable syntax.
-* Improved support for higher-order functions.
-* Predicate and function equivalence type and mode declarations.
-* Support for defining predicates or functions
-  using different clauses for different modes.
-* Support for Haskell-like "@" expressions.
-* Generalized foreign language interface.
-
-Changes to the Mercury compiler:
-* A new `--make' option, for simpler building of programs.
-* A new `--smart-recompilation' option, for fine-grained dependency tracking.
-* A new optional warning: `--warn-non-tail-recursion'.
-* A new optimization: `--constraint-propagation'.
-* A new optimization: `--loop-invariants'.
-* Support for arbitrary mappings from module name to source file name. 
-
-Portability improvements:
-* Mac OS X is now supported "out-of-the-box".
-* On Windows we now support generating non-Cygwin executables.
-* Better conformance to ANSI/ISO C.
-
-Changes to the compiler back-ends:
-* The native code Linux/x86 back-end is now "release quality".
-* The .NET CLR back-end is much improved.
-
-Major improvements to the Mercury debugger, including:
-* Support for source-linked debugging using vim (rather than emacs).
-* Command-line completion.
-* Ability to display values of higher-order terms.
-* Declarative debugging.
-* Support for transparent retries across I/O.
-
-Numerous minor improvements to the Mercury standard library.
-
-A new testing tool in the extras distribution.
-
-DETAILED LISTING
-================
-
-Changes to the Mercury language:
-
-* 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.
-
-* 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.
-
-* 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'.
-
-* 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.
-
-  For example:
-	:- 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.
- 
-  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.
-
-* 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.
-
-* We've added a new kind of expression to the language.
-  A unification expression, written `X @ Y', unifies X and Y
-  and returns the result.
-
-  Unification expressions are most useful when writing switches:
-	p(X, X) :- X = f(_, _).
-  can now be written as
-	p(X @ f(_, _), X).
-
-  See the "Data-terms" section of the "Syntax" chapter of the
-  Mercury Language Reference Manual for more details.
-
-* 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
-
-	:- mode p(in).
-	:- mode p(out).
-	p(X::in) :- ... /* clause for the `in' mode */
-	p(X::out) :- ... /* clause for the `out' mode */
-
-  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.
-
-* We now allow `:- pragma promise_semipure' declarations. For more
-  information, see the "Impurity" chapter of the Mercury Language
-  Reference Manual.
-
-* 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.
-
-* The foreign language interface has been generalized to support
-  interfacing with languages other than C.
-
-  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.
-
-  For details, see the new "Foreign language interface" chapter of
-  the Mercury Language Reference Manual.
-
-* 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.
-
-Changes to the Mercury standard library:
-
-* The Prolog-style term comparison operators @<, @=<, @>, @>= are now
-  builtin.
-
-* A new builtin function ordering/2 has been added.
-
-* We've added a function to io.m to construct io__error codes from error
-  messages: `io__make_io_error'.
-
-* 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.
-
-* 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).
-
-* io__close_input, io__close_output, io__close_binary_input and
-  io__close_binary_output now throw an exception rather than
-  silently ignoring attempts to close the stdin, stdout or stderr
-  streams.
-
-* We have added the type class `pprint__doc/1' and a new concatenation
-  operator, `++/2', which should make it easier to construct doc values.
-* 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.
-
-* `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.
-* 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.
-* 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.
-* 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.
-* 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'.
-* We've added a predicate to io.m to return the last modification time
-  of a file: `io__file_modification_time'.
-* We've added cc_multi modes to io__write_list/5 and io__write_list/6.
-
-* 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.
-* 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.
-* We've added cc_multi modes to list__foldl/4 and list__foldr/4.
-* We've added a predicate list__map_foldl2.
-* 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.
-* We've added the predicate list__is_empty/1 and list__is_not_empty/1.
-* We've added the predicate list__remove_adjacent_dups/3.
-
-* We've added a function version of error/1, called func_error/1, to require.m.
-
-* 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.
-
-* 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.
-
-* 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.)
-
-* float__pow now works for negative exponents, and runs much faster
-  for large exponents.
-
-* 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.
-
-* We've added string__suffix, string__words/1, string__foldr,
-  string__foldl_substring and string__foldr_substring.
-
-* The exception module has a new predicate `try_store', which is
-  like `try_io', but which works with stores rather than io__states.
-
-* 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.
-
-  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.
-
-* 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'.
-
-* We've added a predicate to io.m to return the last modification time
-  of a file (io__file_modification_time).
-
-* 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.
-
-* 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.
-
-* We've added a new predicate `intersect_list' in each of the modules
-  implementing sets in the Mercury standard library.
-
-* We've added a predicate version of `set__fold'.
-
-* We've added function versions of `builtin__unsafe_promise_unique',
-  `ops__init_op_table' and `ops__max_priority'.
-
-* We've added a version of `getopt__process_options' which returns
-  the option arguments.
-
-* `getopt__process_options' has been modified to allow negation of
-  accumulating options. Negating an accumulating option empties
-  the accumulated list of strings.
-
-* We've added some functions to the term_io module to return printable
-  representations of term components as strings.
-
-* We've made the outputs of the string concatenation primitives unique.
-
-* New convenience/readability predicates `int__even/1' and `int__odd/1'.
-
-* New predicate benchmark_det_io for benchmarking code that performs I/O.
-
-* 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. 
-
-* 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.)
-
-* dir:'/'/2 is now a synonym for `dir__make_path_name'.
-  
-* 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.
-
-* 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.
-
-Changes to the extras distribution:
-
-* There's a new testing tool called "quickcheck", which is similar to
-  Haskell's "QuickCheck".  See quickcheck/tutes/index.html.
-
-* 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.
-
-Changes to the Mercury compiler:
-
-* 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.
-
-* 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'.
-
-* 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.
-
-* 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').
-
-* 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.
-
-* 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.
-
-* The automatically generated header files for modules containing
-  `pragma export' declarations are now named `<module>.mh', not
-  `<module>.h'. This avoids conflicts with system header files.
-
-* 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.
-
-  This change will break some existing programs, but that is easily fixed
-  by adding any necessary `:- import_module' or `:- use_module' declarations.
-
-* Options for the Mercury runtime can now be set at compile time using
-  the new `--runtime-flags' option of ml and c2init.
-
-* We've added a new optimization pass -- constraint propagation.
-
-  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).
-
-* 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'.
-
-* 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.
-
-* The `--convert-to-goedel' option has been removed.
-  It never really worked anyway.
-
-Portability improvements:
-
-* Mac OS X is now supported "out-of-the-box".
-
-  See README.MacOSX for details.
-
-* On Windows we now support generating non-Cygwin executables.
-
-  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.
-
-  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.
-
-* Better conformance to ANSI/ISO C.
-
-  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.
-
-Changes to the Mercury debugger:
-
-* 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])".
-
-* You can now navigate terms in the debugger by argument name as well as by
-  argument number.
-
-* The debugger can now print higher order values.
-
-* 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".
-
-* The debugger can now perform command line completion when compiled
-  with GNU Readline support enabled.
-
-* 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.
-
-* 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'.
-
-* 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.
-
-* 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.
-
-Changes to the compiler back-ends:
-
-* The native code Linux/x86 back-end is now "release quality".
-
-  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.
-
-  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).
-
-  For details see <http://www.cs.mu.oz.au/mercury/download/gcc-backend.html>.
-
-* .NET CLR back-end much improved.
-
-  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.
-
-  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.
-
-  This back-end is selected when you use the `--grade il' option.
-
-  See <http://www.cs.mu.oz.au/mercury/dotnet.html> and/or
-  <http://www.cs.mu.oz.au/mercury/information/dotnet/mercury_and_dotnet.html>.
-
-For news about earlier versions, see the HISTORY file.
Index: NEWS
===================================================================
RCS file: /home/mercury1/repository/mercury/NEWS,v
retrieving revision 1.283
diff -u -d -r1.283 NEWS
--- NEWS	2 Dec 2002 09:53:18 -0000	1.283
+++ NEWS	2 Dec 2002 10:16:18 -0000
@@ -54,4 +54,516 @@
 
 * Nothing yet.
 
+
+NEWS for Mercury 0.11
+---------------------
+
+HIGHLIGHTS
+==========
+
+Changes to the Mercury language:
+* Support for constrained polymorphic modes.
+* Addition of state variable syntax.
+* Improved support for higher-order functions.
+* Predicate and function equivalence type and mode declarations.
+* Support for defining predicates or functions
+  using different clauses for different modes.
+* Support for Haskell-like "@" expressions.
+* Generalized foreign language interface.
+
+Changes to the Mercury compiler:
+* A new `--make' option, for simpler building of programs.
+* A new `--smart-recompilation' option, for fine-grained dependency tracking.
+* A new optional warning: `--warn-non-tail-recursion'.
+* A new optimization: `--constraint-propagation'.
+* A new optimization: `--loop-invariants'.
+* Support for arbitrary mappings from module name to source file name. 
+
+Portability improvements:
+* Mac OS X is now supported "out-of-the-box".
+* On Windows we now support generating non-Cygwin executables.
+* Better conformance to ANSI/ISO C.
+
+Changes to the compiler back-ends:
+* The native code Linux/x86 back-end is now "release quality".
+* The .NET CLR back-end is much improved.
+
+Major improvements to the Mercury debugger, including:
+* Support for source-linked debugging using vim (rather than emacs).
+* Command-line completion.
+* Ability to display values of higher-order terms.
+* Declarative debugging.
+* Support for transparent retries across I/O.
+
+Numerous minor improvements to the Mercury standard library.
+
+A new testing tool in the extras distribution.
+
+DETAILED LISTING
+================
+
+Changes to the Mercury language:
+
+* 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.
+
+* 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.
+
+* 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'.
+
+* 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.
+
+  For example:
+	:- 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.
+ 
+  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.
+
+* 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.
+
+* We've added a new kind of expression to the language.
+  A unification expression, written `X @ Y', unifies X and Y
+  and returns the result.
+
+  Unification expressions are most useful when writing switches:
+	p(X, X) :- X = f(_, _).
+  can now be written as
+	p(X @ f(_, _), X).
+
+  See the "Data-terms" section of the "Syntax" chapter of the
+  Mercury Language Reference Manual for more details.
+
+* 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
+
+	:- mode p(in).
+	:- mode p(out).
+	p(X::in) :- ... /* clause for the `in' mode */
+	p(X::out) :- ... /* clause for the `out' mode */
+
+  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.
+
+* We now allow `:- pragma promise_semipure' declarations. For more
+  information, see the "Impurity" chapter of the Mercury Language
+  Reference Manual.
+
+* 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.
+
+* The foreign language interface has been generalized to support
+  interfacing with languages other than C.
+
+  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.
+
+  For details, see the new "Foreign language interface" chapter of
+  the Mercury Language Reference Manual.
+
+* 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.
+
+Changes to the Mercury standard library:
+
+* The Prolog-style term comparison operators @<, @=<, @>, @>= are now
+  builtin.
+
+* A new builtin function ordering/2 has been added.
+
+* We've added a function to io.m to construct io__error codes from error
+  messages: `io__make_io_error'.
+
+* 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.
+
+* 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).
+
+* io__close_input, io__close_output, io__close_binary_input and
+  io__close_binary_output now throw an exception rather than
+  silently ignoring attempts to close the stdin, stdout or stderr
+  streams.
+
+* We have added the type class `pprint__doc/1' and a new concatenation
+  operator, `++/2', which should make it easier to construct doc values.
+* 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.
+
+* `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.
+* 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.
+* 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.
+* 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.
+* 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'.
+* We've added a predicate to io.m to return the last modification time
+  of a file: `io__file_modification_time'.
+* We've added cc_multi modes to io__write_list/5 and io__write_list/6.
+
+* 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.
+* 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.
+* We've added cc_multi modes to list__foldl/4 and list__foldr/4.
+* We've added a predicate list__map_foldl2.
+* 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.
+* We've added the predicate list__is_empty/1 and list__is_not_empty/1.
+* We've added the predicate list__remove_adjacent_dups/3.
+
+* We've added a function version of error/1, called func_error/1, to require.m.
+
+* 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.
+
+* 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.
+
+* 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.)
+
+* float__pow now works for negative exponents, and runs much faster
+  for large exponents.
+
+* 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.
+
+* We've added string__suffix, string__words/1, string__foldr,
+  string__foldl_substring and string__foldr_substring.
+
+* The exception module has a new predicate `try_store', which is
+  like `try_io', but which works with stores rather than io__states.
+
+* 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.
+
+  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.
+
+* 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'.
+
+* We've added a predicate to io.m to return the last modification time
+  of a file (io__file_modification_time).
+
+* 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.
+
+* 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.
+
+* We've added a new predicate `intersect_list' in each of the modules
+  implementing sets in the Mercury standard library.
+
+* We've added a predicate version of `set__fold'.
+
+* We've added function versions of `builtin__unsafe_promise_unique',
+  `ops__init_op_table' and `ops__max_priority'.
+
+* We've added a version of `getopt__process_options' which returns
+  the option arguments.
+
+* `getopt__process_options' has been modified to allow negation of
+  accumulating options. Negating an accumulating option empties
+  the accumulated list of strings.
+
+* We've added some functions to the term_io module to return printable
+  representations of term components as strings.
+
+* We've made the outputs of the string concatenation primitives unique.
+
+* New convenience/readability predicates `int__even/1' and `int__odd/1'.
+
+* New predicate benchmark_det_io for benchmarking code that performs I/O.
+
+* 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. 
+
+* 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.)
+
+* dir:'/'/2 is now a synonym for `dir__make_path_name'.
+  
+* 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.
+
+* 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.
+
+Changes to the extras distribution:
+
+* There's a new testing tool called "quickcheck", which is similar to
+  Haskell's "QuickCheck".  See quickcheck/tutes/index.html.
+
+* 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.
+
+Changes to the Mercury compiler:
+
+* 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.
+
+* 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'.
+
+* 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.
+
+* 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').
+
+* 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.
+
+* 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.
+
+* The automatically generated header files for modules containing
+  `pragma export' declarations are now named `<module>.mh', not
+  `<module>.h'. This avoids conflicts with system header files.
+
+* 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.
+
+  This change will break some existing programs, but that is easily fixed
+  by adding any necessary `:- import_module' or `:- use_module' declarations.
+
+* Options for the Mercury runtime can now be set at compile time using
+  the new `--runtime-flags' option of ml and c2init.
+
+* We've added a new optimization pass -- constraint propagation.
+
+  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).
+
+* 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'.
+
+* 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.
+
+* The `--convert-to-goedel' option has been removed.
+  It never really worked anyway.
+
+Portability improvements:
+
+* Mac OS X is now supported "out-of-the-box".
+
+  See README.MacOSX for details.
+
+* On Windows we now support generating non-Cygwin executables.
+
+  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.
+
+  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.
+
+* Better conformance to ANSI/ISO C.
+
+  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.
+
+Changes to the Mercury debugger:
+
+* 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])".
+
+* You can now navigate terms in the debugger by argument name as well as by
+  argument number.
+
+* The debugger can now print higher order values.
+
+* 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".
+
+* The debugger can now perform command line completion when compiled
+  with GNU Readline support enabled.
+
+* 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.
+
+* 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'.
+
+* 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.
+
+* 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.
+
+Changes to the compiler back-ends:
+
+* The native code Linux/x86 back-end is now "release quality".
+
+  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.
+
+  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).
+
+  For details see <http://www.cs.mu.oz.au/mercury/download/gcc-backend.html>.
+
+* .NET CLR back-end much improved.
+
+  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.
+
+  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.
+
+  This back-end is selected when you use the `--grade il' option.
+
+  See <http://www.cs.mu.oz.au/mercury/dotnet.html> and/or
+  <http://www.cs.mu.oz.au/mercury/information/dotnet/mercury_and_dotnet.html>.
+
 For news about earlier versions, see the HISTORY file.

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