[m-rev.] diff: shift 10.04 news into HISTORY file

Julien Fischer juliensf at csse.unimelb.edu.au
Sun Dec 19 15:08:00 AEDT 2010


Branches: main

Shift the NEWS file Mercury 10.04.X into the HISTORY file.

NEWS:
HISTORY:
 	Shift the 10.04 news into the HISTORY file.

Julien.

Index: NEWS
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/NEWS,v
retrieving revision 1.552
diff -u -r1.552 NEWS
--- NEWS	15 Dec 2010 15:23:35 -0000	1.552
+++ NEWS	19 Dec 2010 04:02:04 -0000
@@ -1,6 +1,12 @@
-NEWS since Mercury 10.04
+NEWS since Mercury 11.01
  ------------------------

+* There are no changes yet.
+
+
+NEWS for Mercury 11.01-beta
+---------------------------
+
  HIGHLIGHTS
  ==========

@@ -115,668 +121,4 @@
    bound to constants are now implemented using lookup tables on the LLDS
    back end. This should make the generated code more compact as well as faster.

-
-NEWS for Mercury 10.04.2
-------------------------
-
-This release is a bug-fix release.  A number of problems that caused
-the compiler to abort have been fixed, some broken RTTI operations
-in the java grade have been fixed, and we have added a workaround
-for a problem with GCC version 4.4.
-
-
-NEWS for Mercury 10.04.1
-------------------------
-
-This release is primarily a bug-fix release.  It fixes some problems in
-the code generator and the source-to-source debugger.  In addition,
-there are some changes to the standard library.
-
-Changes to the Mercury standard library:
-* We have added cc_multi modes for map.foldl2/6 and tree234.foldl2/6.
-* We have improved the performance of cords, hash tables and
-version hash tables.
-
-
-NEWS for Mercury 10.04
-----------------------
-
-Changes to the release numbering:
-
-Stable releases are now numbered according to the year and month the
-release was made, eg 10.04 is the release made in April 2010.
-Previously the release naming scheme was 0.x where x was the x'th
-major release of the system.
-
-Changes to the Mercury language:
-
-* We have removed support for automatic initialisation of solver variables.
-
-* A new pragma, foreign_enum, allows the constructors of Mercury 
-  enumeration types to be assigned values from foreign language code.
-
-* A new pragma, foreign_export_enum, allows the constructors of Mercury
-  enumeration types to be referred to in foreign language code.
-
-* Some of the restrictions on typeclass instances have been relaxed, allowing
-  support for polymorphic instances with functional dependencies.
-
-* We now support trace goals, which can be used to print progress messages or
-  log messages in the middle of arbitrary computations.
-
-* Mutables can now be marked as constant, which is useful when working with
-  constant data structures that cannot be conveniently represented as constant
-  terms.
-
-* Mutables can now be marked as thread-local, which can take on different
-  values for each thread.
-
-* promise_equivalent_solutions scopes (et al.) must now also list variables
-  with inst any that may be constrained by the goal.
-
-* We now support !X ^ field_list := Term as a synonym for
-  !:X = !.X ^ field_list := Term.
-
-* We now support higher-order `any' insts.
-
-* We now support "implementation-defined literals", such as `$file', `$line',
-  `$pred', which are useful for producing better run-time error messages.
-
-* We now support currying of multi-moded predicates or functions when the
-  mode to curry can be determined from the insts of the higher-order
-  arguments.
-
-* We now support `try' goals for catching exceptions.
-
-Changes to the Mercury standard library:
-
-* A new module, parsing_utils, has been added to provide support for
-  implementing recursive descent parsers.
-
-* The string.to_int family of predicates now fails (or throws an exception
-  for the det_ versions) on base 10 numbers that do not fit in the range
-  [int.min_int+1, int.max_int].  Numbers outside this range lead to overflow.
-  Numbers not in base 10 are assumed to denote bit patterns and are not
-  checked for overflow.
-
-* A module for handling directed graphs, digraph.m, has been added.  This
-  supersedes relation.m and svrelation.m in that it has a more consistent
-  interface (which supports state variable notation), provides more type
-  safety by using phantom types, and has a number of efficiency improvements.
-  Further use of relation.m and svrelation.m is deprecated.
-
-* An improved pretty printer module, pretty_printer.m, has been added.  This
-  supersedes pprint.m in that it is more economical, produces better
-  quality output (line overruns are completely avoided wherever possible),
-  has better control over the amount of output produced, and supports
-  user-specifiable formatting for arbitrary types.  Further use of pprint is
-  deprecated.
-
-* We have added extra modes to many of the fold style predicates in the
-  library in order to better support (mostly-)unique accumulators.
-
-* The foldr family of functions and predicates has been added to the map
-  and tree234 modules. We have also extended the arities for map_foldl
-  to map_foldl3 in both modules, and added versions of both map_foldl*
-  and just plain foldl* in which the higher order argument does not take
-  the key as an argument.
-
-* We have added the following predicate to the int module:
-	int.nondet_int_in_range/2.
-
-* We have added the following functions to the integer module:
-	integer.from_base_string/2
-	integer.det_from_base_string/2
-
-* We have added a new builtin predicate, unsafe_cast_any_to_ground/1, that
-  can be useful when manipulating polymorphic values that have inst any.
-
-* Predicates and functions which create strings from lists of characters
-  now fail, throw an exception or return an error value if they find
-  a null character. Unexpected null characters in strings are a potential
-  source of security vulnerabilities.
-
-  We have added the predicates string.semidet_from_char_list/2 and
-  string.semidet_from_rev_char_list/2. These fail rather than throwing
-  an exception if they find a null character.
-
-* We have added string.remove_suffix_det, a version of string.remove_suffix
-  that throws an exception if the suffix is not there.
-
-* string.float_to_string now trims redundant trailing zeroes (although
-  at least one fractional digit is always present).  This change affects the
-  output from the debugger and io.print etc.
-
-* The globals field in the I/O state is no longer unique.  The modes of
-  the access predicates, io.set_globals/3 and io.get_globals/3 have been
-  changed accordingly.
-
-* We have added io.update_globals/3 which allows for atomic updates to
-  the globals field in the I/O state in the presence of multiple threads.
-
-* We have moved some of the concurrency primitives out of the extras
-  distribution and into a new standard library module called `thread',
-  and its submodules `thread.channel', `thread.mvar', and `thread.semaphore'.
-  The predicates `thread.can_spawn', `thread.channel.try_take'
-  and `thread.mvar.try_take' have also been added.
-
-* Processes no longer terminate until all threads have finished.  Previously
-  a process would terminate as soon as the original thread finished.
-
-* The following predicate has been added to the set module:
-	set.filter_map/3
-
-* The following predicates have been added to the array modules:
-	array.fold/4
-	array.foldl2/6
-	version_array.foldl/4
-
-* The following predicates have been added to the list module:
-	list.filter_map_foldl/5
-	list.map_corresponding/4
-	list.map2_foldl3/10
-	list.map_corresponding_foldl/6
-	list.map_corresponding_foldl2/8
-	list.map_corresponding_foldl3/10
-	list.map_corresponding3_foldl/7
-	list.negated_filter/3
-	list.foldl3_corresponding/9
-	list.foldl_corresponding3/6
-	list.foldl2_corresponding3/8
-	list.foldl3_corresponding3/10
-	list.foldl4_corresponding3/12
-	list.split_upto/4
-	list.contains/2
-	list.find_index_of_match/4
-	list.find_first_match/3
-
-   We have also added versions of list.foldl/4 and list.foldr/4 that have
-   determinism multi.
-
-* The following functions have been added to the string module:
-	string.split_at_separator/2
-	string.split_at_char/2
-	string.split_at_string/2
-	string.remove_suffix_if_present/2
-	string.remove_prefix_if_present/2
-	string.is_all_digits/1
-	string.all_match/2
-	string.remove_prefix/3
-
-* The following functions and predicates have been added to the bag module:
-	bag.count/1
-	bag.count_unique/1
-	bag.member/2
-	bag.member/3
-
-* A unique mode has been added to cord.foldl_pred/4
-
-* The following function has been added to the pqueue module
-	pqueue.length/1
-
-* The following predicate has been added to the maybe module
-	maybe_is_yes/2
-
-* We have changed the interface of the ops module to make lookups of operators
-  more efficient.
-
-* We have added string.c_pointer_to_string/{1,2} and string.from_c_pointer/1
-  to convert c_pointers to a human readable form.
-
-* The bitmap module has been modified and extended to make it more suitable
-  for use as a general container for binary data.  See runtime/mercury_types.h
-  for the new definition of the bitmap type for interoperability with C code.
-
-  Bitmaps now have fields `bit', `bits' and `byte' for getting and
-  setting a single bit, a group of bits (up to machine word size),
-  and an aligned eight bit byte respectively.
-
-  bitmap.get/2 has been deprecated; use bitmap.bit/2 instead.
-
-  There is a new type bitmap.slice/0 to represent segments of bitmaps.
-
-  There are new functions to move data around in bulk:
-	copy_bits/5
-	copy_bits_in_bitmap/4
-	copy_bytes/5
-	copy_bytes_in_bitmap/4
-
-  Other added functions include:
-  	shrink_without_copying/2
-	append_list/1
-	to_byte_string/1
-
-* The operations in bitmap.m and version_bitmap.m which treat bitmaps
-  as sets have been modified to throw an exception when the input
-  bitmaps are not the same size.  Before this change bitmap.intersect/2
-  computed the wrong answer when the input bitmaps were of different sizes.
-
-* bitmap.difference/2 and version_bitmap.difference/2 now compute difference,
-  not xor.  bitmap.xor/2 and version_bitmap.xor/2 have been added.
-
-* bitmap.to_string(BM) now returns "<0:>" for an empty bitmap BM.
-  Previously it returned "<0:00>".
-
-* Version bitmaps now have a field `bit' for getting and setting a single bit.
-
-  version_bitmap.get/2 has been deprecated; use version_bitmap.bit/2 instead.
-
-* The io module now contains predicates io.read_bitmap/{4,5,6,7},
-  io.write_bitmap{3,4,5,6} and io.read_file_as_bitmap/{3,4}.
-  io.write_bytes/{3,4} are now marked as obsolete.  Note that the
-  interface of io.read_bitmap/* has changed since the first release
-  of the day implementation.
-
-* There are new modules bit_buffer, bit_buffer.write and bit_buffer.read
-  which give a bit-oriented interface to byte-oriented streams.
-
-* There is a new typeclass stream.bulk_reader/5.  Instances of
-  stream.bulk_reader/5 support reading of multiple items at once
-  into a container such as an array or a bitmap.
-
-* Comparison of version_arrays is now the same as for arrays.
-
-* We have added predicates char.is_hex_digit/2 and char.int_to_hex_char/2.
-
-* We have changed term.variable so that it records the context where
-  the variable was used.  This required the backward mode of
-  term.var_list_to_term_list to be removed.  The backwards mode is
-  now accessed via term.term_list_to_var_list.
-
-  There is a new function, get_term_context, to return the context of any term.
-
-* We have renamed some library predicates whose names were ambiguous.
-
-* The type software_error/0 has been moved from the require module into
-  the exception module.
-
-* construct.num_functors/1 now fails rather than returning -1 for types
-  with no functors.  There is a new function construct.det_num_functors/1
-  which aborts for types which do not have functors.
-
-* We have added predicates deconstruct.functor_number/3 and
-  deconstruct.deconstruct_du/4 which return functor numbers suitable
-  for use by construct.construct, rather than functor strings.
-
-* We have added a function construct.get_functor_lex/2 which converts
-  an ordinal functor number into a lexicographic functor number.
-
-* A new module string.builder has been added to the standard library.
-  The new module provides instances of the stream typeclasses that can
-  be used to build up a string using char and string writers.
-
-* We have added the types `string.line' and `string.text_file' and made
-  input streams instances of stream.reader/4 with those unit types.
-  This means stream.get/4 can be used to efficiently read lines
-  and files as string.
-
-* We have added a predicate io.remove_file_recursively/4
-  which can remove non-empty directories.
-
-* We have added the predicates `dir.current_directory',
-  `dir.relative_path_name_from_components'.
-
-* We have added the predicates rev_list, split_last, get_first, get_last,
-  filter, foldl_pred, foldr_pred, map_foldl, map_foldl[23], cord_list_to_cord
-  and cord_list_to_list to the cord module.
-
-* We have added two predicates that are useful for custom term construction:
-	construct.find_functor/5
-	type_desc.same_type/2 
-
-* We have added new predicates to the tree234 and map modules for constructing
-  2-3-4 trees and maps directly (without the creation of intermediate trees)
-  from sorted lists:
-	tree234.from_sorted_assoc_list/2
-	tree234.from_rev_sorted_assoc_list/2
-	map.from_rev_sorted_assoc_list/2
-  map.from_sorted_assoc_list now also constructs the tree directly, so now
-  it requires its input list to be duplicate-free.
-
-* We have added tree234.map_values_only and map.map_values_only, which are
-  versions of tree234.map_values and map.map_values which do not give the
-  higher order argument the key associated with the value being transformed.
-
-* We have replaced the hash_table and version_hash_table implementations
-  with separate chaining schemes.  Consequently delete works, and double
-  hashing predicates are not required.
-
-* We have added optional synchronisation to the version_array and
-  version_hash_table implementations.  They are now thread safe, but slower,
-  by default.
-
-* We have added a calendar module to the standard library. This module
-  contains utilities for working with the Gregorian calendar.
-
-Changes to the Mercury compiler:
-
-* The Java backend has been substantially improved and now supports
-  all the core features of the language and most of the standard library.
-  The Java backend is roughly three times slower (after allowing for JIT)
-  than the C backends.
-
-  The Java backend improvements were contributed by Mission Critical IT
-  <http://www.missioncriticalit.com/>.
-
-* Interfacing with Mercury code from Java is also improved:
-    * Polymorphic Mercury types are now translated to Java classes
-      with generics, allowing for greater type safety in the Java code.
-    * Exported Mercury procedures retain their argument order in the
-      corresponding Java versions (output arguments are handled with a new
-      Ref Java type).
-
-* We have added support for trail segments, which allow programs to grow
-  the trail on demand.
-
-* Shared libraries are now used by default on Linux/x86 systems.
-
-* Support for the reserve tag grades has been removed.
-
-* We have added an Erlang back-end.
-
-  The Erlang back-end was contributed by Mission Critical IT
-  <http://www.missioncriticalit.com/>.
-
-* In parallel grades we now support thread-local trailing.
-
-* The compiler now issues a warning when an inst declaration is not
-  consistent with any of the types in scope.
-
-* We have added support for simultaneous execution of jobs with `mmc --make'.
-
-* We have added support for `mmc --make' to recompile modules if options have
-  changed.
-
-* We have added an option for `mmc --make' to compile more recently modified
-  source files first.
-
-* We have added support for stack segments, which allows programs to grow
-  stacks on demand.
-
-* We have made it easier to use single-precision floats, which do not need
-  to be boxed on 32-bit machines.
-
-* A new option, `--generate-standalone-interface', simplifies the task
-  of calling Mercury procedures from programs written in other languages.
-
-* We have added a new option, `--inform-ite-instead-of-switch'. If this is
-  enabled, the compiler will generate informational messages about
-  if-then-elses that it thinks should be converted to switches for the
-  sake of program reliability.
-
-* We have removed support for Managed C++ as a foreign language for the IL
-  backend.
-
-* The width of error message lines can be adjusted with a new option,
-  `--max-error-line-width'.
-
-* Generation of 64-bit code on Mac OS X is now supported,
-  i.e. the x86_64*apple*darwin* architecture is now supported.
-
-* We have added another debugger, called the source-to-source debugger (ssdb).
-  It is more limited than mdb, but it does work with backends other than the
-  low-level C backend, e.g. the Java backend.
-
-Changes to the Mercury deep profiler:
-
-* The deep profiler now supports measuring a proxy for time: a counter that
-  is incremented at each call. Since calls happen a lot more frequently than
-  clock interrupts, this can yield useful profiles for shorter-running
-  programs.
-
-Changes to the samples directory:
-
-* The samples directory now includes an example of how to implement a
-  solver type.
-
-Changes to the extras distribution:
-
-* The extras distribution now includes a binding to the Allegro and
-  AllegroGL game programming libraries.
-
-* `mtogl', the Mercury binding to the Tk widget `togl' has been removed
-  from the distribution.
-
-Changes to the Mercury debugger:
-
-* A `track' mdb command has been added.
-
-* The `dd' command now accepts a `--reset-knowledge-base' option.
-
-* You can now put breakpoints on individual events inside procedures.
-
-* mdb now ignores lines beginning with a `#' character
-  in sourced files.  This is useful for commenting mdb scripts.
-
-DETAILED LISTING
-================
-
-Changes to the Mercury language:
-
-* Support for the automatic initialisation of solver variables has been
-  removed because it was source of confusing errors and was not used in
-  practice anyway.
-
-  A consequence of this is that solver types are now properly polymorphic,
-  i.e. types like `foo(bar)' where:
-
-  	:- solver type foo(T).
-	:- solver type bar.
- 
-  are now supported.
-
-* The new pragma, foreign_enum, can be used to establish a 
-  mapping between values in a foreign language and the constructors
-  of a Mercury enumeration type.  This can be useful when writing
-  Mercury bindings to foreign code libraries.
-
-  For example, 
-
-  	:- type matrix_mode
-		--->	texture
-		;	modelview
-		;	projection.
-
-	:- pragma foreign_enum("C", matrix_mode/0, [
-		texture    - "GL_TEXTURE" 
-		modelview  - "GL_MODELVIEW"
-		projection - "GL_PROJECTION"
-	]).
- 
-  When passed to C foreign clauses, values of type matrix_mode/0 will have
-  the corresponding C value specified by the foreign_enum pragma.
-
-* The new pragma, foreign_export_enum, can be used to establish a
-  mapping between the constructors of a Mercury enumeration type and
-  a symbolic name for values of that type in the foreign language.
-
-  For example, given the type
-
-  	:- type status ---> ok ; error.
-
-  the declaration
-
-  	:- pragma foreign_export_enum("C", status/0, [prefix("STATUS_")]).
- 
-  allows code in C foreign_proc and foreign_code pragma bodies to refer
-  to the value `ok' via the name `STATUS_ok' and to the value `error'
-  via the name `STATUS_error'.
-
-* The restriction on typeclass instances that all type variables appearing in
-  the range of a functional dependency must be monomorphic has been relaxed.
-  We now support cases where the type variables in the range are determined
-  by the type variables in the domain, using the functional dependency
-  information from any instance constraints.
-
-  For example, given the typeclass
-
-	:- typeclass foo(A, B) <= (A -> B).
-
-  the following instance is now valid:
-
-	:- instance foo(list(S), list(T)) <= foo(S, T).
-
-  since the variable T, in the range, is determined from the variable S by the
-  functional dependencies on the foo(S, T) constraint.
-
-* A new language construct allows programmers to include debugging and/or
-  logging code in the middle of arbitrary computations. Trace goals
-  may have both compile time and run time conditions placed on their execution.
-  However, if they are enabled, then they can perform I/O (even if the
-  surrounding code can't); they can also access the values of mutables.
-
-  Their capabilities, syntax and intended use are shown by the following
-  example.
-
-	:- mutable(logging_level, int, 0, ground, []).
-
-	:- pred time_consuming_task(data::in, result::out) is det.
-
-	time_consuming_task(In, Out) :-
-		trace [
-			compile_time(flag("do_logging") or grade(debug)),
-			run_time(env("VERBOSE")),
-			io(!IO),
-			state(logging_level, !LoggingLevel)
-		] (
-			io.write_string("Time_consuming_task start\n", !IO),
-			( !.LoggingLevel > 1 ->
-				io.write_string("Input is ", !IO),
-				io.write(In, !IO),
-				io.nl(!IO)
-			;
-				true
-			)
-		),
-		...
-		% perform the actual task
-
-* Higher-order terms can now have an `any' inst, which means that they can
-  legally use non-local solver variables even though these variables may
-  become further bound when in it is called.  Higher-order terms with an
-  `any' inst cannot be called or applied in a negated context (a negation,
-  the condition of an if-then-else, or the body of a higher-order expression
-  that does not itself have an `any' inst).
-
-  Such terms can be expressed by using `any_pred' and `any_func' in place of
-  `pred' and `func', as in the following examples:
-
-	AnyPred = (any_pred(X::ia, C::in) is semidet :-
-			geqc(X, A, C)		% X >= A + C
-		),
-	...
-	call(AnyPred, Z, 5)			% Z >= A + 5
-
-	AnyFunc = (any_func(X::ia) = (Y::ia) is semidet :-
-			X = Y + A
-		),
-	...
-	Z = apply(AnyFunc, W)			% W = Z + A
-
-* Try goals provide syntactic sugar for catching exceptions. An example is:
-
-	:- pred p_carefully(io::di, io::uo) is det.
-
-	p_carefully(!IO) :-
-		(try [io(!IO)] (
-			io.write_string("Calling p\n", !IO),
-			p(Output, !IO)
-		)
-		then
-			io.write_string("p returned: ", !IO),
-			io.write(Output, !IO),
-			io.nl(!IO)
-		catch S ->
-			io.write_string("p threw a string: ", !IO),
-			io.write_string(S, !IO),
-			io.nl(!IO)
-		catch 42 ->
-			io.write_string("p threw 42\n", !IO)
-		catch_any Other ->
-			io.write_string("p threw something: ", !IO),
-			io.write(Other, !IO),
-			% Rethrow the object.
-			throw(X)
-		).
-
-Changes to the Mercury compiler:
-
-* The option `--trail-segments', or grade component `.trseg', causes
-  programs to execute using trail segments, where segments can be allocated
-  at runtime, instead of using a fixed size trail.  This can prevent trail
-  exhaustion, but execution time will be increased.
-
-* There's a new back-end that targets Erlang.
-
-  Compiler support for this new back-end is mostly complete,
-  but large parts of the standard library are still not yet
-  implemented for this new port.
-
-  For more details, see the README.Erlang.
-
-* The compiler now issues a warning when an inst declaration isn't
-  consistent with any of the types in scope.
-
-  This makes it easier to diagnose mode errors caused by insts that are not
-  consistent with the type they are intended to be consistent with.
-
-* Simultaneous execution of jobs with `mmc --make' can be enabled with
-  the `--jobs <n>' option.
-
-* `mmc --make' can record what compiler options were used for each module
-  by enabling the `--track-flags' option.  Then `mmc --make' can know to
-  recompile modules whose options have changed, even if the files haven't
-  been touched.
-
-* `mmc --make' can compile more recently modified files first, if the option
-  `--order-make-by-timestamp' is enabled.
-
-* The option `--stack-segments', or grade component `.stseg', causes
-  programs to execute using stack segments, where segments can be allocated
-  at runtime, instead of using fixed sized stacks.  The program won't run out
-  of stack space and stack sizes can be much smaller, but execution time will
-  be increased.
-
-* Single-precision floats can now be selected for the C backends by using the
-  `.spf' grade component, or passing the `--single-prec-float' option to the
-  compiler.
-
-* The option `--generate-standalone-interface', causes the compiler to
-  create a "stand-alone" interface to the Mercury runtime and a set of
-  Mercury libraries.  This interface allows programs written in languages
-  such as C or C++ to initialise the Mercury runtime and libraries prior to
-  calling any foreign exported procedures defined in those libraries.
-
-* We have removed support for Managed C++ as a foreign language for the IL
-  backend.  This was desirable because it wasn't used, because it has been
-  deprecated by Microsoft, and because it complicated the dependencies for the
-  IL backend.
-
-Changes to the Mercury standard library:
-
-* The predicates io.seek_binary/5 and io.binary_stream_offset/4 have been
-  deprecated.  They have been replaced by the predicates:
-  io.seek_binary_input/5, io.seek_binary_output/5,
-  io.binary_input_stream_offset/4 and io.binary_output_stream_offset/4.
-
-Changes to the Mercury debugger:
-
-* A `track' mdb command has been added.  This command invokes the declarative
-  debugger and executes it's `track' command, before returning to the mdb
-  prompt.
-
-* The `dd' command now accepts a `--reset-knowledge-base' option. 
-  This option resets the declarative debugger's knowledge base of previous
-  question answers.
-
-* You can now put breakpoints on individual events inside procedures.
-  Commands of the form "break <procedure-specification> <portname>"
-  will cause execution to stop only at the specified port in the specified
-  procedure. If there is more than event of the given port type in the
-  procedure, mdb will prompt the user to select one.
-
-* mdb now ignores lines beginning with a `#' character
-  in sourced files.  This is useful for commenting mdb scripts.
-
-
  For news about earlier versions, see the HISTORY file.
Index: HISTORY
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/HISTORY,v
retrieving revision 1.31
diff -u -r1.31 HISTORY
--- HISTORY	1 Jun 2010 02:11:05 -0000	1.31
+++ HISTORY	19 Dec 2010 04:02:04 -0000
@@ -3269,6 +3269,669 @@
    These are a standard data structure for querying spatial information.


+NEWS for Mercury 10.04.2, 5 October 2010
+-----------------------------------------
+
+This release is a bug-fix release.  A number of problems that caused
+the compiler to abort have been fixed, some broken RTTI operations
+in the java grade have been fixed, and we have added a workaround
+for a problem with GCC version 4.4.
+
+
+NEWS for Mercury 10.04.1, 30 August 2010
+----------------------------------------
+
+This release is primarily a bug-fix release.  It fixes some problems in
+the code generator and the source-to-source debugger.  In addition,
+there are some changes to the standard library.
+
+Changes to the Mercury standard library:
+* We have added cc_multi modes for map.foldl2/6 and tree234.foldl2/6.
+* We have improved the performance of cords, hash tables and
+version hash tables.
+
+
+NEWS for Mercury 10.04, 19 July 2010
+------------------------------------
+
+Changes to the release numbering:
+
+Stable releases are now numbered according to the year and month the
+release was made, eg 10.04 is the release made in April 2010.
+Previously the release naming scheme was 0.x where x was the x'th
+major release of the system.
+
+Changes to the Mercury language:
+
+* We have removed support for automatic initialisation of solver variables.
+
+* A new pragma, foreign_enum, allows the constructors of Mercury 
+  enumeration types to be assigned values from foreign language code.
+
+* A new pragma, foreign_export_enum, allows the constructors of Mercury
+  enumeration types to be referred to in foreign language code.
+
+* Some of the restrictions on typeclass instances have been relaxed, allowing
+  support for polymorphic instances with functional dependencies.
+
+* We now support trace goals, which can be used to print progress messages or
+  log messages in the middle of arbitrary computations.
+
+* Mutables can now be marked as constant, which is useful when working with
+  constant data structures that cannot be conveniently represented as constant
+  terms.
+
+* Mutables can now be marked as thread-local, which can take on different
+  values for each thread.
+
+* promise_equivalent_solutions scopes (et al.) must now also list variables
+  with inst any that may be constrained by the goal.
+
+* We now support !X ^ field_list := Term as a synonym for
+  !:X = !.X ^ field_list := Term.
+
+* We now support higher-order `any' insts.
+
+* We now support "implementation-defined literals", such as `$file', `$line',
+  `$pred', which are useful for producing better run-time error messages.
+
+* We now support currying of multi-moded predicates or functions when the
+  mode to curry can be determined from the insts of the higher-order
+  arguments.
+
+* We now support `try' goals for catching exceptions.
+
+Changes to the Mercury standard library:
+
+* A new module, parsing_utils, has been added to provide support for
+  implementing recursive descent parsers.
+
+* The string.to_int family of predicates now fails (or throws an exception
+  for the det_ versions) on base 10 numbers that do not fit in the range
+  [int.min_int+1, int.max_int].  Numbers outside this range lead to overflow.
+  Numbers not in base 10 are assumed to denote bit patterns and are not
+  checked for overflow.
+
+* A module for handling directed graphs, digraph.m, has been added.  This
+  supersedes relation.m and svrelation.m in that it has a more consistent
+  interface (which supports state variable notation), provides more type
+  safety by using phantom types, and has a number of efficiency improvements.
+  Further use of relation.m and svrelation.m is deprecated.
+
+* An improved pretty printer module, pretty_printer.m, has been added.  This
+  supersedes pprint.m in that it is more economical, produces better
+  quality output (line overruns are completely avoided wherever possible),
+  has better control over the amount of output produced, and supports
+  user-specifiable formatting for arbitrary types.  Further use of pprint is
+  deprecated.
+
+* We have added extra modes to many of the fold style predicates in the
+  library in order to better support (mostly-)unique accumulators.
+
+* The foldr family of functions and predicates has been added to the map
+  and tree234 modules. We have also extended the arities for map_foldl
+  to map_foldl3 in both modules, and added versions of both map_foldl*
+  and just plain foldl* in which the higher order argument does not take
+  the key as an argument.
+
+* We have added the following predicate to the int module:
+	int.nondet_int_in_range/2.
+
+* We have added the following functions to the integer module:
+	integer.from_base_string/2
+	integer.det_from_base_string/2
+
+* We have added a new builtin predicate, unsafe_cast_any_to_ground/1, that
+  can be useful when manipulating polymorphic values that have inst any.
+
+* Predicates and functions which create strings from lists of characters
+  now fail, throw an exception or return an error value if they find
+  a null character. Unexpected null characters in strings are a potential
+  source of security vulnerabilities.
+
+  We have added the predicates string.semidet_from_char_list/2 and
+  string.semidet_from_rev_char_list/2. These fail rather than throwing
+  an exception if they find a null character.
+
+* We have added string.remove_suffix_det, a version of string.remove_suffix
+  that throws an exception if the suffix is not there.
+
+* string.float_to_string now trims redundant trailing zeroes (although
+  at least one fractional digit is always present).  This change affects the
+  output from the debugger and io.print etc.
+
+* The globals field in the I/O state is no longer unique.  The modes of
+  the access predicates, io.set_globals/3 and io.get_globals/3 have been
+  changed accordingly.
+
+* We have added io.update_globals/3 which allows for atomic updates to
+  the globals field in the I/O state in the presence of multiple threads.
+
+* We have moved some of the concurrency primitives out of the extras
+  distribution and into a new standard library module called `thread',
+  and its submodules `thread.channel', `thread.mvar', and `thread.semaphore'.
+  The predicates `thread.can_spawn', `thread.channel.try_take'
+  and `thread.mvar.try_take' have also been added.
+
+* Processes no longer terminate until all threads have finished.  Previously
+  a process would terminate as soon as the original thread finished.
+
+* The following predicate has been added to the set module:
+	set.filter_map/3
+
+* The following predicates have been added to the array modules:
+	array.fold/4
+	array.foldl2/6
+	version_array.foldl/4
+
+* The following predicates have been added to the list module:
+	list.filter_map_foldl/5
+	list.map_corresponding/4
+	list.map2_foldl3/10
+	list.map_corresponding_foldl/6
+	list.map_corresponding_foldl2/8
+	list.map_corresponding_foldl3/10
+	list.map_corresponding3_foldl/7
+	list.negated_filter/3
+	list.foldl3_corresponding/9
+	list.foldl_corresponding3/6
+	list.foldl2_corresponding3/8
+	list.foldl3_corresponding3/10
+	list.foldl4_corresponding3/12
+	list.split_upto/4
+	list.contains/2
+	list.find_index_of_match/4
+	list.find_first_match/3
+
+   We have also added versions of list.foldl/4 and list.foldr/4 that have
+   determinism multi.
+
+* The following functions have been added to the string module:
+	string.split_at_separator/2
+	string.split_at_char/2
+	string.split_at_string/2
+	string.remove_suffix_if_present/2
+	string.remove_prefix_if_present/2
+	string.is_all_digits/1
+	string.all_match/2
+	string.remove_prefix/3
+
+* The following functions and predicates have been added to the bag module:
+	bag.count/1
+	bag.count_unique/1
+	bag.member/2
+	bag.member/3
+
+* A unique mode has been added to cord.foldl_pred/4
+
+* The following function has been added to the pqueue module
+	pqueue.length/1
+
+* The following predicate has been added to the maybe module
+	maybe_is_yes/2
+
+* We have changed the interface of the ops module to make lookups of operators
+  more efficient.
+
+* We have added string.c_pointer_to_string/{1,2} and string.from_c_pointer/1
+  to convert c_pointers to a human readable form.
+
+* The bitmap module has been modified and extended to make it more suitable
+  for use as a general container for binary data.  See runtime/mercury_types.h
+  for the new definition of the bitmap type for interoperability with C code.
+
+  Bitmaps now have fields `bit', `bits' and `byte' for getting and
+  setting a single bit, a group of bits (up to machine word size),
+  and an aligned eight bit byte respectively.
+
+  bitmap.get/2 has been deprecated; use bitmap.bit/2 instead.
+
+  There is a new type bitmap.slice/0 to represent segments of bitmaps.
+
+  There are new functions to move data around in bulk:
+	copy_bits/5
+	copy_bits_in_bitmap/4
+	copy_bytes/5
+	copy_bytes_in_bitmap/4
+
+  Other added functions include:
+  	shrink_without_copying/2
+	append_list/1
+	to_byte_string/1
+
+* The operations in bitmap.m and version_bitmap.m which treat bitmaps
+  as sets have been modified to throw an exception when the input
+  bitmaps are not the same size.  Before this change bitmap.intersect/2
+  computed the wrong answer when the input bitmaps were of different sizes.
+
+* bitmap.difference/2 and version_bitmap.difference/2 now compute difference,
+  not xor.  bitmap.xor/2 and version_bitmap.xor/2 have been added.
+
+* bitmap.to_string(BM) now returns "<0:>" for an empty bitmap BM.
+  Previously it returned "<0:00>".
+
+* Version bitmaps now have a field `bit' for getting and setting a single bit.
+
+  version_bitmap.get/2 has been deprecated; use version_bitmap.bit/2 instead.
+
+* The io module now contains predicates io.read_bitmap/{4,5,6,7},
+  io.write_bitmap{3,4,5,6} and io.read_file_as_bitmap/{3,4}.
+  io.write_bytes/{3,4} are now marked as obsolete.  Note that the
+  interface of io.read_bitmap/* has changed since the first release
+  of the day implementation.
+
+* There are new modules bit_buffer, bit_buffer.write and bit_buffer.read
+  which give a bit-oriented interface to byte-oriented streams.
+
+* There is a new typeclass stream.bulk_reader/5.  Instances of
+  stream.bulk_reader/5 support reading of multiple items at once
+  into a container such as an array or a bitmap.
+
+* Comparison of version_arrays is now the same as for arrays.
+
+* We have added predicates char.is_hex_digit/2 and char.int_to_hex_char/2.
+
+* We have changed term.variable so that it records the context where
+  the variable was used.  This required the backward mode of
+  term.var_list_to_term_list to be removed.  The backwards mode is
+  now accessed via term.term_list_to_var_list.
+
+  There is a new function, get_term_context, to return the context of any term.
+
+* We have renamed some library predicates whose names were ambiguous.
+
+* The type software_error/0 has been moved from the require module into
+  the exception module.
+
+* construct.num_functors/1 now fails rather than returning -1 for types
+  with no functors.  There is a new function construct.det_num_functors/1
+  which aborts for types which do not have functors.
+
+* We have added predicates deconstruct.functor_number/3 and
+  deconstruct.deconstruct_du/4 which return functor numbers suitable
+  for use by construct.construct, rather than functor strings.
+
+* We have added a function construct.get_functor_lex/2 which converts
+  an ordinal functor number into a lexicographic functor number.
+
+* A new module string.builder has been added to the standard library.
+  The new module provides instances of the stream typeclasses that can
+  be used to build up a string using char and string writers.
+
+* We have added the types `string.line' and `string.text_file' and made
+  input streams instances of stream.reader/4 with those unit types.
+  This means stream.get/4 can be used to efficiently read lines
+  and files as string.
+
+* We have added a predicate io.remove_file_recursively/4
+  which can remove non-empty directories.
+
+* We have added the predicates `dir.current_directory',
+  `dir.relative_path_name_from_components'.
+
+* We have added the predicates rev_list, split_last, get_first, get_last,
+  filter, foldl_pred, foldr_pred, map_foldl, map_foldl[23], cord_list_to_cord
+  and cord_list_to_list to the cord module.
+
+* We have added two predicates that are useful for custom term construction:
+	construct.find_functor/5
+	type_desc.same_type/2 
+
+* We have added new predicates to the tree234 and map modules for constructing
+  2-3-4 trees and maps directly (without the creation of intermediate trees)
+  from sorted lists:
+	tree234.from_sorted_assoc_list/2
+	tree234.from_rev_sorted_assoc_list/2
+	map.from_rev_sorted_assoc_list/2
+  map.from_sorted_assoc_list now also constructs the tree directly, so now
+  it requires its input list to be duplicate-free.
+
+* We have added tree234.map_values_only and map.map_values_only, which are
+  versions of tree234.map_values and map.map_values which do not give the
+  higher order argument the key associated with the value being transformed.
+
+* We have replaced the hash_table and version_hash_table implementations
+  with separate chaining schemes.  Consequently delete works, and double
+  hashing predicates are not required.
+
+* We have added optional synchronisation to the version_array and
+  version_hash_table implementations.  They are now thread safe, but slower,
+  by default.
+
+* We have added a calendar module to the standard library. This module
+  contains utilities for working with the Gregorian calendar.
+
+Changes to the Mercury compiler:
+
+* The Java backend has been substantially improved and now supports
+  all the core features of the language and most of the standard library.
+  The Java backend is roughly three times slower (after allowing for JIT)
+  than the C backends.
+
+  The Java backend improvements were contributed by Mission Critical IT
+  <http://www.missioncriticalit.com/>.
+
+* Interfacing with Mercury code from Java is also improved:
+    * Polymorphic Mercury types are now translated to Java classes
+      with generics, allowing for greater type safety in the Java code.
+    * Exported Mercury procedures retain their argument order in the
+      corresponding Java versions (output arguments are handled with a new
+      Ref Java type).
+
+* We have added support for trail segments, which allow programs to grow
+  the trail on demand.
+
+* Shared libraries are now used by default on Linux/x86 systems.
+
+* Support for the reserve tag grades has been removed.
+
+* We have added an Erlang back-end.
+
+  The Erlang back-end was contributed by Mission Critical IT
+  <http://www.missioncriticalit.com/>.
+
+* In parallel grades we now support thread-local trailing.
+
+* The compiler now issues a warning when an inst declaration is not
+  consistent with any of the types in scope.
+
+* We have added support for simultaneous execution of jobs with `mmc --make'.
+
+* We have added support for `mmc --make' to recompile modules if options have
+  changed.
+
+* We have added an option for `mmc --make' to compile more recently modified
+  source files first.
+
+* We have added support for stack segments, which allows programs to grow
+  stacks on demand.
+
+* We have made it easier to use single-precision floats, which do not need
+  to be boxed on 32-bit machines.
+
+* A new option, `--generate-standalone-interface', simplifies the task
+  of calling Mercury procedures from programs written in other languages.
+
+* We have added a new option, `--inform-ite-instead-of-switch'. If this is
+  enabled, the compiler will generate informational messages about
+  if-then-elses that it thinks should be converted to switches for the
+  sake of program reliability.
+
+* We have removed support for Managed C++ as a foreign language for the IL
+  backend.
+
+* The width of error message lines can be adjusted with a new option,
+  `--max-error-line-width'.
+
+* Generation of 64-bit code on Mac OS X is now supported,
+  i.e. the x86_64*apple*darwin* architecture is now supported.
+
+* We have added another debugger, called the source-to-source debugger (ssdb).
+  It is more limited than mdb, but it does work with backends other than the
+  low-level C backend, e.g. the Java backend.
+
+Changes to the Mercury deep profiler:
+
+* The deep profiler now supports measuring a proxy for time: a counter that
+  is incremented at each call. Since calls happen a lot more frequently than
+  clock interrupts, this can yield useful profiles for shorter-running
+  programs.
+
+Changes to the samples directory:
+
+* The samples directory now includes an example of how to implement a
+  solver type.
+
+Changes to the extras distribution:
+
+* The extras distribution now includes a binding to the Allegro and
+  AllegroGL game programming libraries.
+
+* `mtogl', the Mercury binding to the Tk widget `togl' has been removed
+  from the distribution.
+
+Changes to the Mercury debugger:
+
+* A `track' mdb command has been added.
+
+* The `dd' command now accepts a `--reset-knowledge-base' option.
+
+* You can now put breakpoints on individual events inside procedures.
+
+* mdb now ignores lines beginning with a `#' character
+  in sourced files.  This is useful for commenting mdb scripts.
+
+DETAILED LISTING
+================
+
+Changes to the Mercury language:
+
+* Support for the automatic initialisation of solver variables has been
+  removed because it was source of confusing errors and was not used in
+  practice anyway.
+
+  A consequence of this is that solver types are now properly polymorphic,
+  i.e. types like `foo(bar)' where:
+
+  	:- solver type foo(T).
+	:- solver type bar.
+ 
+  are now supported.
+
+* The new pragma, foreign_enum, can be used to establish a 
+  mapping between values in a foreign language and the constructors
+  of a Mercury enumeration type.  This can be useful when writing
+  Mercury bindings to foreign code libraries.
+
+  For example, 
+
+  	:- type matrix_mode
+		--->	texture
+		;	modelview
+		;	projection.
+
+	:- pragma foreign_enum("C", matrix_mode/0, [
+		texture    - "GL_TEXTURE" 
+		modelview  - "GL_MODELVIEW"
+		projection - "GL_PROJECTION"
+	]).
+ 
+  When passed to C foreign clauses, values of type matrix_mode/0 will have
+  the corresponding C value specified by the foreign_enum pragma.
+
+* The new pragma, foreign_export_enum, can be used to establish a
+  mapping between the constructors of a Mercury enumeration type and
+  a symbolic name for values of that type in the foreign language.
+
+  For example, given the type
+
+  	:- type status ---> ok ; error.
+
+  the declaration
+
+  	:- pragma foreign_export_enum("C", status/0, [prefix("STATUS_")]).
+ 
+  allows code in C foreign_proc and foreign_code pragma bodies to refer
+  to the value `ok' via the name `STATUS_ok' and to the value `error'
+  via the name `STATUS_error'.
+
+* The restriction on typeclass instances that all type variables appearing in
+  the range of a functional dependency must be monomorphic has been relaxed.
+  We now support cases where the type variables in the range are determined
+  by the type variables in the domain, using the functional dependency
+  information from any instance constraints.
+
+  For example, given the typeclass
+
+	:- typeclass foo(A, B) <= (A -> B).
+
+  the following instance is now valid:
+
+	:- instance foo(list(S), list(T)) <= foo(S, T).
+
+  since the variable T, in the range, is determined from the variable S by the
+  functional dependencies on the foo(S, T) constraint.
+
+* A new language construct allows programmers to include debugging and/or
+  logging code in the middle of arbitrary computations. Trace goals
+  may have both compile time and run time conditions placed on their execution.
+  However, if they are enabled, then they can perform I/O (even if the
+  surrounding code can't); they can also access the values of mutables.
+
+  Their capabilities, syntax and intended use are shown by the following
+  example.
+
+	:- mutable(logging_level, int, 0, ground, []).
+
+	:- pred time_consuming_task(data::in, result::out) is det.
+
+	time_consuming_task(In, Out) :-
+		trace [
+			compile_time(flag("do_logging") or grade(debug)),
+			run_time(env("VERBOSE")),
+			io(!IO),
+			state(logging_level, !LoggingLevel)
+		] (
+			io.write_string("Time_consuming_task start\n", !IO),
+			( !.LoggingLevel > 1 ->
+				io.write_string("Input is ", !IO),
+				io.write(In, !IO),
+				io.nl(!IO)
+			;
+				true
+			)
+		),
+		...
+		% perform the actual task
+
+* Higher-order terms can now have an `any' inst, which means that they can
+  legally use non-local solver variables even though these variables may
+  become further bound when in it is called.  Higher-order terms with an
+  `any' inst cannot be called or applied in a negated context (a negation,
+  the condition of an if-then-else, or the body of a higher-order expression
+  that does not itself have an `any' inst).
+
+  Such terms can be expressed by using `any_pred' and `any_func' in place of
+  `pred' and `func', as in the following examples:
+
+	AnyPred = (any_pred(X::ia, C::in) is semidet :-
+			geqc(X, A, C)		% X >= A + C
+		),
+	...
+	call(AnyPred, Z, 5)			% Z >= A + 5
+
+	AnyFunc = (any_func(X::ia) = (Y::ia) is semidet :-
+			X = Y + A
+		),
+	...
+	Z = apply(AnyFunc, W)			% W = Z + A
+
+* Try goals provide syntactic sugar for catching exceptions. An example is:
+
+	:- pred p_carefully(io::di, io::uo) is det.
+
+	p_carefully(!IO) :-
+		(try [io(!IO)] (
+			io.write_string("Calling p\n", !IO),
+			p(Output, !IO)
+		)
+		then
+			io.write_string("p returned: ", !IO),
+			io.write(Output, !IO),
+			io.nl(!IO)
+		catch S ->
+			io.write_string("p threw a string: ", !IO),
+			io.write_string(S, !IO),
+			io.nl(!IO)
+		catch 42 ->
+			io.write_string("p threw 42\n", !IO)
+		catch_any Other ->
+			io.write_string("p threw something: ", !IO),
+			io.write(Other, !IO),
+			% Rethrow the object.
+			throw(X)
+		).
+
+Changes to the Mercury compiler:
+
+* The option `--trail-segments', or grade component `.trseg', causes
+  programs to execute using trail segments, where segments can be allocated
+  at runtime, instead of using a fixed size trail.  This can prevent trail
+  exhaustion, but execution time will be increased.
+
+* There's a new back-end that targets Erlang.
+
+  Compiler support for this new back-end is mostly complete,
+  but large parts of the standard library are still not yet
+  implemented for this new port.
+
+  For more details, see the README.Erlang.
+
+* The compiler now issues a warning when an inst declaration isn't
+  consistent with any of the types in scope.
+
+  This makes it easier to diagnose mode errors caused by insts that are not
+  consistent with the type they are intended to be consistent with.
+
+* Simultaneous execution of jobs with `mmc --make' can be enabled with
+  the `--jobs <n>' option.
+
+* `mmc --make' can record what compiler options were used for each module
+  by enabling the `--track-flags' option.  Then `mmc --make' can know to
+  recompile modules whose options have changed, even if the files haven't
+  been touched.
+
+* `mmc --make' can compile more recently modified files first, if the option
+  `--order-make-by-timestamp' is enabled.
+
+* The option `--stack-segments', or grade component `.stseg', causes
+  programs to execute using stack segments, where segments can be allocated
+  at runtime, instead of using fixed sized stacks.  The program won't run out
+  of stack space and stack sizes can be much smaller, but execution time will
+  be increased.
+
+* Single-precision floats can now be selected for the C backends by using the
+  `.spf' grade component, or passing the `--single-prec-float' option to the
+  compiler.
+
+* The option `--generate-standalone-interface', causes the compiler to
+  create a "stand-alone" interface to the Mercury runtime and a set of
+  Mercury libraries.  This interface allows programs written in languages
+  such as C or C++ to initialise the Mercury runtime and libraries prior to
+  calling any foreign exported procedures defined in those libraries.
+
+* We have removed support for Managed C++ as a foreign language for the IL
+  backend.  This was desirable because it wasn't used, because it has been
+  deprecated by Microsoft, and because it complicated the dependencies for the
+  IL backend.
+
+Changes to the Mercury standard library:
+
+* The predicates io.seek_binary/5 and io.binary_stream_offset/4 have been
+  deprecated.  They have been replaced by the predicates:
+  io.seek_binary_input/5, io.seek_binary_output/5,
+  io.binary_input_stream_offset/4 and io.binary_output_stream_offset/4.
+
+Changes to the Mercury debugger:
+
+* A `track' mdb command has been added.  This command invokes the declarative
+  debugger and executes it's `track' command, before returning to the mdb
+  prompt.
+
+* The `dd' command now accepts a `--reset-knowledge-base' option. 
+  This option resets the declarative debugger's knowledge base of previous
+  question answers.
+
+* You can now put breakpoints on individual events inside procedures.
+  Commands of the form "break <procedure-specification> <portname>"
+  will cause execution to stop only at the specified port in the specified
+  procedure. If there is more than event of the given port type in the
+  procedure, mdb will prompt the user to select one.
+
+* mdb now ignores lines beginning with a `#' character
+  in sourced files.  This is useful for commenting mdb scripts.
+
+
  .NET CLR back-end history
  -------------------------
  As mentioned above, we started working on the MLDS back-end in July 1999.

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