NEWS for Mercury 11.07, 22 December 2011
----------------------------------------

HIGHLIGHTS
==========

Changes to the Mercury language:

* The `char' type now represents a Unicode code point.

* Unicode characters can now be encoded in string literals using an
  escape sequence.  The escape sequence \uXXXX (or \UXXXXXXXX), where XXXX
  (or XXXXXXXX) is a Unicode character code in hexadecimal, is replaced with
  the corresponding Unicode character.

* Expressions used to initialise mutables may now contain impure
  or semipure function calls.

Changes to the Mercury standard library:

* We have improved Unicode support in the standard library.

* We have deprecated substring procedures which take start and count
  arguments in favour of procedures which take start and end arguments.

* We have changed the argument order of many of the predicates in the array,
  bag, bimap, eqvclass, map, multi_map, queue and set modules in order
  to make them more conducive to the use of state variable notation.

Changes to the Mercury compiler:

* Support for using clang (<http://clang.llvm.org/>) as a C compiler with
  Mercury has been added.  See README.clang for further details

* We have significantly improved support for using Microsoft Visual C as
  a C compiler with Mercury.  See README.MS-VisualC for further details.

* The Java code generated by the Java backend is now compatible with Java 1.7.

Changes to the Mercury profiler:

* We have added a new form of profiling, memory retention profiling, to mprof
  that allows it to generate reports describing the origin of objects that
  are live on the heap at selected points in a program.
  See the Mercury User's Guide for details.
  

DETAILED LISTING
================

Changes to the Mercury standard library:

* We have improved Unicode support in the standard library.

    + Procedures in the string module now understand either UTF-8 or
      UTF-16 encodings, depending upon the backend.

    + Text I/O routines now read and write files in UTF-8 encoding.

* We have deprecated substring procedures which take start and count
  arguments in favour of procedures which take start and end arguments.
  The new procedures are more convenient to call, make more sense with
  variable-width character encodings, and pave the way for potentially
  replacing string offsets with an abstract type.

* We have added additional modes for set.map/3 and set.map_fold/5.

* The argument order of the following predicates has been changed so as to
  make them more conducive to the use of state variable notation:
  array.set/4, array.semidet/4, array.slow_set/4, array.semidet_slow_set/4,
  array.resize/4, array.shrink/3, bag.insert/3, bag.insert_list/3,
  bag.insert_set/3, bag.remove/3, bag.det_remove/3, bag.remove_list/3,
  bag.remove_set/3, bag.delete/3, bag.remove_all/3, bag.delete_all/3,
  bag.remove_smallest/3, bimap.insert/4, bimap.det_insert/4, bimap.set/4,
  eqvclass.ensure_element/3, eqvclass.new_element/3,
  eqvclass.ensure_equivalence/4, eqvclass.new_equivalence/4,
  eqvclass.remove_equivalent_elements/3, map.insert/4, map.det_insert/4,
  map.det_insert_from_corresponding_lists/4,
  map.det_insert_from_assoc_list/3, map.set_from_corresponding_lists/4,
  map.set_from_assoc_list/3, map.update/4, map.det_update/4, map.delete/3,
  map.delete_list/3, map.remove/4, map.det_remove/4, map.remove_smallest/4,
  multi_map.insert/4, multi_map.det_insert/4, multi_map.update/4,
  multi_map.det_update/4, multi_map.det_replace/4, multi_map.set/4,
  multi_map.add/4, multi_map.delete/4, multi_map.remove/4, and
  multi_map.remove_smallest/4, queue.put/3, queue.put_list/3,
  queue.get/3, queue.delete_all/3, queue.put_on_front/3,
  queue.get_from_back/3, queue.put_list_on_front/3,
  queue.get_from_back/3, rbtree.insert/4, rbtree.update/4, rbtree.set/4,
  rbtree.delete/3, rbtree.remove_smallest/4, rbtree.remove_largest/4,
  set.insert/3, set.insert_list/3, set.delete/3, set.delete_list/3,
  set.remove/3, set.remove_list/3, set.remove_least/3, tree234.insert/4,
  set_bbbtree.insert/3, set_bbbtree.insert_list/3, set_bbbtree.delete/3,
  set_bbbtree.delete_list/3, set_bbbtree.remove/3, set_bbbtree.remove_list/3,
  set_bbbtree.remove_least/3, set_bbbtree.remove_largest/3,
  set_ordlist.insert/3, set_ordlist.insert_list/3, set_ordlist.delete/3,
  set_ordlist.delete_list/3, set_ordlist.remove/3, set_ordlist.remove_list/3,
  set_ordlist.remove_least/3, set_unordlist.insert/3,
  set_unordlist.insert_list/3, set_unordlist.delete/3,
  set_unordlist.delete_list/3, set_unordlist.remove/3,
  set.unordlist.remove_list/3, set_unordlist.remove_least/3,
  sparse_bitset.insert/3, sparse_bitset.insert_list/3, sparse_bitset.delete/3,
  sparse_bitset.delete_list/3, sparse_bitset.remove/3,
  sparse_bitset.remove_list/3, sparse_bitset.remove_leq/3,
  sparse_bitset.remove_gt/3, sparse_bitset.remove_least/3,
  term.create_var/3, tree234.set/4, tree234.remove/4, tree234.remove_smallest/4,
  tree234.update/4, tree_bitset.insert/3, tree_bitset.insert_list/3,
  tree_bitset.delete/3, tree_bitset.delete_list/3, tree_bitset.remove/3,
  tree_bitset.remove_list/3 and tree_bitset.remove_least/3

* We have added the following new functions for creating singleton
  maps: bimap.singleton/2, injection.singleton/2, map.singleton/2,
  rbtree.singleton/2 and tree234.singleton/2 .

* The following procedures have been added to the standard library:

	array2d.init/3
	bitmap.init/2
        cord.init/0
	hash_table.init/3
	hash_table.init_default/1
	mvar.init/0
	mvar.read/4
	mvar.try_put/5
	store.init/1
	semaphore.init/1
	semaphore.init/3
	version_array.init/2
	version_array2d.init/3
	version_bitmap.init/2
	version_hash_table.init/3
	version_hash_table.unsafe_init/3
	version_hash_table.init_default/1
	version_hash_table.unsafe_init_default/1
	version_store.init/0

   They replace the following procedures, which are now obsolete and will be
   removed in a later release:

	array2d.new/3
	bitmap.new/2
	hash_table.new/3
	hash_table.new_default/1
	semaphore.new/1
	semaphore.new/3
	store.new/1
	string.foldl2_substring/8
	string.foldl_substring/5
	string.foldl_substring/6
	string.foldr_substring/5
	string.foldr_substring/6
	string.substring/3
	string.substring/4
	string.unsafe_substring/3
	string.unsafe_substring/4
	version_array.new/2
	version_array2d.new/3
	version_bitmap.new/2
	version_hash_table.new/3
	version_hash_table.new_default/1
	version_hash_table.unsafe_new/3
	version_hash_table.unsafe_new_default/1
	version_store.new/0

* The following procedures are have been deprecated and will be removed in
  a future release: dir.basename_det/1, list.replace_nth_det/3,
  list.replace_nth_det/4, list.index0_det/2, list.index1_det/2,
  list.index0_det/2, list.index1_det/2, list.last_det/1, stack.top_det/1,
  stack.pop_det/3, string.remove_suffix_det/2, string.index_det/2,
  string.index_det/3, string.set_char_det/3, string.set_char_det/4 and
  type_desc.ground_pseudo_type_desc_type_to_type_desc_det/1.

  The versions of these procedures that use "det_" as a prefix should be
  used instead.  (We have added these where they did not already exist.) 

* The deprecated modules graph, group and relation are no longer included
  in the library.

* The following predicates have been added to the modules that provide sets
  in the library: set.is_empty/1, set_bbbtree.is_empty/1,
  set_ctree234.is_empty/1, set_ordlist.is_empty/1, set_tree234.is_empty/1,
  set_unordlist.is_empty/1, sparse_bitset.is_empty/1, tree_bitset.is_empty/1,
  set.filter/4, set_bbbtree.filter/3, set_bbbtree.filter/4, set_ctree.filter/3,
  set_ctree.filter/4, set_ordlist.filter/3, set_ordlist.filter/4,
  set_tree.filter/3, set_tree.filter/4, set_unordlist.filter/3,
  set_unordlist.filter/4, sparse_bitset.filter/3, sparse_bitset.filter/4,
  tree_bitset.filter/3, tree_bitset.filter/4.

  All the is_empty predicates are synonyms for the existing empty/1 predicates
  in those modules.

* We have added the predicate pqueue.det_remove/4.  It is like pqueue.remove/4
  except that it throws an exception instead of failing if the priority queue
  is empty.

* The new modules svlist, svstack and svpqueue provide state variable friendly
  versions of predicates in the list, stack and pqueue modules.
  (As with the other sv* modules these modules are intended to pave the
  way for an eventual change of the predicate argument ordering in the
  list, stack and pqueue modules.)

* We have added additional modes with unique and mostly-unique accumulators
  to rbtree.foldl/4, rbtree.foldl2/6 and tree_bitset.foldl/4.

* A new function, array.generate/2, and new predicate, array.generate_foldl/5,
  can be used to create and fill new arrays.

* We have added the new predicate assoc_list.foldl_keys/4 and
  assoc_list.foldl_values/4 for folding over just keys or values
  an association list.

* We have added the new function array.from_reverse_list/1, which creates
  a new array from a list with the elements of the array occurring in
  the reverse order to that of the list.

* We have added a version of the field update function for arrays that
  omits the bounds check, 'unsafe_elem :='/3.

* We have added the predicates array.foldl3/8, array.foldl4/10, array.foldl5/12,
  array.foldr3/8, array.foldr4/10 and array.foldr5/12.

* We have added the predicate maybe.map_fold3_maybe/9 and also added
  additional modes for maybe.fold_maybe/4, maybe.map_fold_maybe/5,
  and maybe.map_fold2_maybe/7.

* The implementation of multi_map.det_update/4 has been fixed so that it
  conforms to the documented behaviour.  The new predicate multi_map.replace/4
  has been added.

* We have added a version of math.sqrt/1, math.unchecked_sqrt/1, that omits
  the domain check.


NEWS for Mercury 11.07.1, 2 March 2012
--------------------------------------

This is a bug-fix release.  It fixes a problem that was preventing the standard
library from building in the csharp grade on Cygwin and also adds support for
using GCC in C99 (or GNU99) mode with Mercury.  In addition, there are a number
of minor changes to the standard library.

Changes to the Mercury standard library:

* We have added the predicate map.keys_and_values/3.

* We have added the predicates set.is_singleton/2, set_bbbtree.is_singleton/2,
  set_ctree234.is_singleton/2 and set_unordlist.is_singleton/2.

* We have added the function list.foldl_corresponding/4.


NEWS for Mercury 11.07.2, 3 August 2012
---------------------------------------

This is a bug-fix release: it fixes the following:

* The name of the C# compiler in newer versions of Mono is now recognised.

* The configure script now distinguishes between the MS C# compiler and the
  Chicken Scheme compiler.

* Thread local storage now works on Mac OS X when using clang as the C
  compiler.

* Various build issues on Solaris 10 have been resolved.

* The --erlang option now sets all the relevant grade components correctly.

* The binary input and output streams are now set to binary translation
  mode when using the MSVC CRT.

* The standard library's lexer module now correctly tokenizes binary, octal
  and hexadecimal integer literals.

* Some bugs in the UTF-8 routines used by the C grades have been fixed.
  Also, the performance of these routines has been improved.

* The exit status is now correctly set when --warn-non-tail-recursion
  is being used.

Changes to the Mercury standard library:

* We have added additional modes to map.foldr/4, map.foldr/6 and the
  list.foldl<N>_corresponding3 predicates.

* The predicates parsing_utils.float_literal/3 and
  parsing_utils.float_literal_as_string/4 now accept an optional plus sign in
  the exponent.

* The obsolete predicates string.remove_suffix_det/2 and string.index_det/2
  have been removed.

* The predicate time.times/4 is now implemented for the csharp grade.

* The version_hash_table module is now supported in the csharp and java
  grades.

* The unsafe versions of the predicates in the array2d module are now more
  efficient.

Changes to the Mercury compiler:

* The compiler now outputs #line directives in C# code it generates.
