mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
Documentation/NEWS_1995_07_18_release_0_3:
Documentation/NEWS_1995_09_14_release_0_4:
Documentation/NEWS_1996_02_15_release_0_5:
Documentation/NEWS_1996_08_02_release_0_6:
Documentation/NEWS_1997_08_15_release_0_7:
Documentation/NEWS_1998_11_18_release_0_8:
Documentation/NEWS_1999_12_18_release_0_9:
Documentation/NEWS_2001_02_25_release_0_10:
Documentation/NEWS_2002_12_24_release_0_11:
Documentation/NEWS_2005_09_09_release_0_12:
Documentation/NEWS_2006_09_14_release_0_13:
Documentation/NEWS_2010_07_09_release_10_04:
Documentation/NEWS_2011_04_27_release_11_01:
Documentation/NEWS_2011_12_22_release_11_07:
Documentation/NEWS_2013_05_16_release_13_05:
Documentation/NEWS_2014_02_10_release_14_01:
Documentation/NEWS_2020_01_28_release_20_01:
Documentation/NEWS_2020_06_30_release_20_06:
Documentation/NEWS_2022_03_31_release_22_01:
Move the contents of the HISTORY file to these files.
HISTORY:
Delete this file.
NEWS.md:
README:
Update pointers to the deleted file.
466 lines
18 KiB
Plaintext
466 lines
18 KiB
Plaintext
Mercury 0.12, 9 September 2005
|
|
------------------------------
|
|
|
|
HIGHLIGHTS
|
|
==========
|
|
|
|
Changes to the Mercury language:
|
|
* Infix `.' is now accepted as a module name separator.
|
|
* Field access syntax can now be used at the top-level in func and mode
|
|
declarations and in the head of a clause for a user-defined field access
|
|
function.
|
|
* We now support impure higher-order code.
|
|
* We now allow user-defined comparison predicates.
|
|
* User-defined equality and comparison predicates for a type are now
|
|
required to be defined in the same module as the type.
|
|
* Experimental support for user-defined constrained types has been added.
|
|
* We now support the use of `..' as an infix operator.
|
|
|
|
Changes to the Mercury standard library:
|
|
* We've added several new modules: cord, for sequences with O(1) consing and
|
|
concatenation, array2d, for two-dimensional arrays, and version_array,
|
|
version_array2d, version_bitmap, version_hash_table, and version_store,
|
|
implementing non-unique versions of these types supporting O(1) access for
|
|
non-persistent use. A new module term_to_xml has been added for converting
|
|
arbitrary terms to XML documents. Two new modules, set_tree234 and
|
|
set_ctree234, have been added to provide operations on sets with better
|
|
worst-case behavior (but worse constant factors) than the current
|
|
implementation. Ten new modules, svarray, sveqvclass, svmap, svmulti_map,
|
|
svbimap, svset, svbag, svqueue, svrelation and svvarset now provide more
|
|
convenient ways to update arrays, equivalence classes, maps, multi_maps,
|
|
bimaps, sets, bags, queues, relations and varsets in code that uses state
|
|
variables.
|
|
* New procedures have been added to many of the existing standard library
|
|
modules. Most notably, these include procedures for creating
|
|
directories and symbolic links, for checking file types and file
|
|
accessibility, for detecting floating point infinities and NaNs.
|
|
* The dir module now handles Microsoft Windows pathnames correctly.
|
|
|
|
Changes to the Mercury compiler:
|
|
* We have added optional support for a new type-accurate garbage collector
|
|
as an alternative to using the Boehm et al conservative collector.
|
|
* Better support for incremental program development:
|
|
there's two new compiler options, `--allow-stubs' and `--no-warn-stubs',
|
|
to support execution of incomplete programs.
|
|
* There's a new warning option `--warn-dead-procs' for detecting unreachable
|
|
code.
|
|
* It's now easier to use shared libraries on Linux/x86 systems
|
|
with `mmc --make'.
|
|
* A new analysis: `--analyse-exceptions'.
|
|
The compiler can use the results of this analysis to try and improve
|
|
some optimizations.
|
|
|
|
Portability improvements:
|
|
* We have made the implementation compatible with gcc 3.4.
|
|
* Shared libraries now work on Mac OS X.
|
|
|
|
Changes to the Mercury debugger:
|
|
* Users can now arrange to have the goal and/or some variables printed
|
|
every time execution arrives at a breakpoint.
|
|
* Users can now arrange to associate a condition with a breakpoint.
|
|
Execution won't stop at the breakpoint if the condition is false.
|
|
* Users can now limit the output from stack traces.
|
|
* Users can now put breakpoints on unify and compare predicates.
|
|
* Users can now save runtime values to files.
|
|
* Users can now tell the declarative debugger to trust entire modules or
|
|
individual predicates or functions.
|
|
* The declarative debugger can track the origins of subterms.
|
|
* The declarative debugger can now use the divide-and-query search strategy.
|
|
|
|
Changes to the compiler back-ends:
|
|
* The .NET CLR back-end now bootstraps.
|
|
* Improvements to the Java back-end.
|
|
* The cost in disk space of enabling debugging is now much smaller.
|
|
|
|
Numerous minor improvements to the Mercury standard library.
|
|
|
|
Changes to the extras distribution:
|
|
* Added easyx, a new Xlib based graphics library suitable for implementing
|
|
simple interactive graphical applications.
|
|
* Major improvements to the OpenGL binding.
|
|
* We've added a binding to GLUT (the GL utility toolkit).
|
|
* The OpenGL, GLUT and Tcl/Tk bindings have been ported to Mac OS X.
|
|
|
|
DETAILED LISTING
|
|
================
|
|
|
|
Changes to the Mercury language:
|
|
|
|
* The deprecated support for NU-Prolog style `when' declarations has been
|
|
removed.
|
|
|
|
* We have experimental support for user-defined constrained types, as
|
|
documented in the reference manual section on "Solver types". Variables
|
|
of a constrained type can have constraints placed upon them before they
|
|
are instantiated, allowing for various styles of constraint logic
|
|
programming.
|
|
|
|
* We now allow user-defined comparison predicates, using the syntax
|
|
:- type t ---> t where equality is unify_t, comparison is compare_t.
|
|
|
|
See the "User-defined equality and comparison" chapter of the
|
|
Mercury Language Reference Manual for details.
|
|
|
|
* User-defined equality and comparison predicates for a type are now
|
|
required to be defined in the same module as the type.
|
|
|
|
* Infix `.' is now accepted as a module name separator. Hence it is
|
|
now possible to write io.write_string and list.member to mean the
|
|
same thing as io__write_string and list__member, for instance. This
|
|
has required changing the associativity of `.' from xfy to yfx and
|
|
from precedence 600 to 10.
|
|
|
|
* Field access notation can now be used at the top-level in func and
|
|
mode declarations and in the head of a clause for a user-defined
|
|
field access function. That is, one can now write
|
|
|
|
:- func a ^ f(b) = c.
|
|
:- mode a ^ f(b) = c is <detism>.
|
|
A ^ f(B) = ...
|
|
|
|
* Mercury's support for impure code now also includes support for
|
|
impure higher-order code.
|
|
|
|
Specifically, impurity annotations can be used on higher-order types,
|
|
lambda expressions, and higher-order calls; higher-order terms are
|
|
permitted to call impure or semipure code provided that they are
|
|
appropriately annotated as such.
|
|
|
|
For details, see the "Higher-order impurity" section of the "Impurity"
|
|
chapter of the Mercury Language Reference Manual.
|
|
|
|
* `..' is now accepted as an infix operator. That means a list of
|
|
successive integers can now be written as X .. Y. For example:
|
|
|
|
1 .. 5 = [1, 2, 3, 4, 5]
|
|
|
|
|
|
Changes to the Mercury standard library:
|
|
|
|
* We've add the function queue.from_list/1 as a synonym for
|
|
queue.list_to_queue/1, function queue.to_list/1 (and predicate
|
|
queue.to_list/2) as the converse of queue.from_list/1, queue.put_on_front/2
|
|
(and predicate queue.put_on_front/3) to put items on to the front of a
|
|
queue, queue.put_list_on_front/2 (and predicate queue.put_list_on_front/3)
|
|
to put a list of items on to the front of a queue, and predicate
|
|
queue.get_from_back/3 which removes the last element from a queue.
|
|
|
|
* We've added the function pqueue.from_assoc_list/1 as a synonym
|
|
for pqueue.assoc_list_to_pqueue/1.
|
|
|
|
* We've added functions set.from_list/1 and set.from_sorted_list/1
|
|
as synonyms for set.list_to_set/1 and set.sorted_list_to_set/1
|
|
respectively. Similar additions have also been made to the
|
|
set_unordlist, set_ordlist and set_bbbtree modules.
|
|
|
|
* We've added some new higher-order predicates, rbtree.foldl2/6
|
|
rbtree.foldl3 and rbtree.transform_value to the rbtree module. The
|
|
predicate rbtree.remove/3 has been deprecated.
|
|
|
|
* We've add some new predicates and functions to int.m.
|
|
int.fold_up/4, int.fold_down/4, int.fold_up/5, int.fold_down/5,
|
|
int.fold_up2/7 and int.fold_down2/7 support iteration over
|
|
contiguous integer ranges.
|
|
|
|
* The predicate int.to_float/2 has now been deprecated.
|
|
|
|
* We've added a new library module, `array2d', for two-dimensional arrays.
|
|
|
|
* We've added a new module, cord, for sequences with O(1) consing and
|
|
concatenation. A cord is essentially a tree structure with data stored
|
|
in the leaf nodes. Joining two cords together to construct a new cord
|
|
is therefore an O(1) operation.
|
|
|
|
* The dir module now handles Microsoft Windows pathnames correctly.
|
|
|
|
* dir__split_name and dir__basename are now semidet, not det.
|
|
dir__split_name fails for root directories or pathnames not
|
|
containing a directory separator.
|
|
dir__basename fails for root directories.
|
|
|
|
* We've added some new predicates and functions to the dir module:
|
|
basename_det/1,
|
|
expand_braces/1,
|
|
is_directory_separator/1,
|
|
make_directory/4,
|
|
make_single_directory/4,
|
|
foldl2/6,
|
|
parent_directory/0,
|
|
path_name_is_absolute/1,
|
|
path_name_is_root_directory/1,
|
|
recursive_foldl2/7.
|
|
|
|
* We've added several new predicates to the io module:
|
|
have_symlinks/0,
|
|
make_symlink/4,
|
|
follow_symlink/4,
|
|
check_file_accessibility/5,
|
|
file_type/4,
|
|
input_stream_foldl2_io_maybe_stop/{6,7},
|
|
binary_input_stream_foldl2_io_maybe_stop/{6,7}.
|
|
|
|
* We've added several new predicates and functions to the bimap module:
|
|
det_insert,
|
|
forward_search,
|
|
reverse_search,
|
|
from_corresponding_lists,
|
|
map_keys,
|
|
map_values,
|
|
det_insert_from_assoc_list,
|
|
det_insert_from_corresponding_lists,
|
|
set_from_assoc_list,
|
|
set_from_corresponding_lists,
|
|
delete_key,
|
|
delete_value,
|
|
delete_keys,
|
|
delete_values,
|
|
overlay,
|
|
apply_forward_map_to_list,
|
|
apply_reverse_map_to_list,
|
|
foldl
|
|
|
|
* We've added predicates relation__lookup_key_set_from/3 and
|
|
relation__lookup_key_set_to/3.
|
|
|
|
* The type of the arguments giving the initial set of visited nodes
|
|
to relation__dfs and relation__dfsrev has changed from set_bbbtree
|
|
to sparse_bitset.
|
|
|
|
* Efficiency of the operations in the relation module has been
|
|
greatly improved.
|
|
|
|
* Some predicates and functions have been added to the sparse_bitset module:
|
|
to_set/1,
|
|
from_set/1,
|
|
member/2,
|
|
foldl/4,
|
|
foldr/4.
|
|
|
|
* exception.m now contains a predicate finally/6 which can be used to
|
|
ensure that resources are released whether a called closure exits
|
|
normally or throws an exception.
|
|
|
|
* exception.m now contains a predicate throw_if_near_stack_limits which
|
|
can be used to prevent an application running out of stack space.
|
|
|
|
* We've changed the interface of exception.try_all/2 to separate
|
|
exceptional results from normal results.
|
|
|
|
* We've added predicates multi_map.to_flat_assoc_list/2 and
|
|
multi_map.from_flat_assoc_list/2.
|
|
|
|
* Several new functions have been added to the string module, namely
|
|
elem/2, unsafe_elem/2, chomp/1, lstrip/1, lstrip/2, rstrip/1, rstrip/2,
|
|
strip/1, prefix_length/2, suffix_length/2, string/1, string/2, string/4
|
|
and string.det_to_float/1.
|
|
|
|
* We've added some new predicates, list__map2_foldl, list__map_foldl3,
|
|
and list__foldl4 to list.m.
|
|
|
|
* We've added a predicate, list__cons/3 to list.m. This is sometimes
|
|
useful with higher-order code. It can also be useful with state
|
|
variables. We've also added a function version.
|
|
|
|
* We've added some new predicates, map__common_subset, map__foldl3,
|
|
map__overlay_large_map and map__transform_value, to map.m.
|
|
|
|
* We've added a predicate, map_fold, to set.m.
|
|
|
|
* We've added a function, pred_to_bool, to bool.m.
|
|
|
|
* We've added the three predicates, `is_nan/1', `is_inf/1' and
|
|
`is_nan_or_inf/1' to float.m. These predicates are for use only on
|
|
systems which support IEEE floating point arithmetic.
|
|
|
|
* We've added a function version of `hash_table__search/3'.
|
|
|
|
* We've added a predicate, copy_mutvar, to store.m.
|
|
|
|
* We've added a function, clk_tck, to time.m.
|
|
|
|
* builtin.m now contains types and insts `unify' and `compare' for use
|
|
in defining user-defined equality and comparison predicates.
|
|
|
|
* builtin.m now defines insts `new' and `old' as synonyms for `free' and
|
|
`any', respectively, since some of the HAL literature uses this terminology.
|
|
Likewise it defines modes `no' for `new >> old' and `oo' for `old >> old'.
|
|
|
|
* We've fixed some problems with the use of `cc_nondet'.
|
|
|
|
The incorrect cc_nondet modes of the following predicates have been removed:
|
|
deconstruct.arg/4
|
|
deconstruct.named_arg/4
|
|
deconstruct.limited_deconstruct/6
|
|
std_util.arg_cc/3
|
|
std_util.argument_cc/3
|
|
std_util.named_argument_cc/3
|
|
std_util.limited_deconstruct_cc/5
|
|
These have been replaced by cc_multi versions in which success or failure
|
|
is indicated by returning a maybe type.
|
|
|
|
* We've added functions get_equivalent_elements, get_minimum_element and
|
|
remove_equivalent_elements to eqvclass.m.
|
|
|
|
* We've added semidet functions max_key and min_key to return the maximum and
|
|
minimum keys in maps and 2-3-4 trees.
|
|
|
|
* We've added predicates member, remove_leq, remove_gt, foldl and filter
|
|
to sparse_bitset.m.
|
|
|
|
* builtin.m now contains types and insts `unify' and `compare' for use
|
|
in defining user-defined equality and comparison predicates.
|
|
|
|
* The following predicates, which were added in 0.11.0, have been deprecated:
|
|
io.current_input_stream/3
|
|
io.current_output_stream/3
|
|
io.current_binary_input_stream/3
|
|
io.current_binary_output_stream/3
|
|
They were identical to the following long-existing predicates with
|
|
similar names:
|
|
io.input_stream/3
|
|
io.output_stream/3
|
|
io.binary_input_stream/3
|
|
io.binary_output_stream/3
|
|
|
|
* The following functions have been added to the integer module:
|
|
integer.zero/0
|
|
integer.one/0
|
|
integer.det_from_string/1
|
|
integer.pow/2
|
|
|
|
The predicate integer.pow/3 has been deprecated.
|
|
|
|
* We've added some functions, rational.int/1, rational.from_integer/1,
|
|
rational.from_integers/2 and rational.reciprocal/1 to rational.m
|
|
The function rational.rational_from_integers/2 has been deprecated.
|
|
|
|
* A new module `term_to_xml' has been added to the standard library. This
|
|
module contains predicates to write arbitrary Mercury terms to an output
|
|
stream as XML. Automatic generation of DTDs for Mercury types is also
|
|
supported. Once a Mercury term is in XML it can be converted to many other
|
|
formats such as HTML or XUL using an appropriate stylesheet.
|
|
|
|
Changes to the Mercury compiler:
|
|
|
|
* We have added optional support for a new type-accurate garbage collector
|
|
as an alternative to using the Boehm et al conservative collector.
|
|
|
|
The new collector is enabled by `--grade hlc.agc'.
|
|
For details about how it works, see the paper
|
|
"Accurate garbage collection in an uncooperative environment"
|
|
which is available via our web page.
|
|
|
|
Note that the new collector is a very naive copying collector, and still
|
|
has a number of serious limitations which may make it undesirable for
|
|
most applications. It only works with `--high-level-code'. The heap
|
|
size is fixed at program startup; the collector does not attempt to
|
|
resize the heap. It does not do cheap heap reclamation on backtracking.
|
|
There is no support for passing terms on the Mercury heap to C code.
|
|
In most cases, the Boehm et all conservative collector will perform better.
|
|
|
|
* There's a new warning option `--warn-dead-procs' which can be used
|
|
for detecting unreachable code.
|
|
|
|
This is not yet enabled by default, because it can cause some spurious
|
|
warnings in modules containing code which mixes Mercury clauses and
|
|
`pragma foreign_proc' declarations for the same procedure.
|
|
|
|
* `mmc --make' now works correctly with Microsoft Visual C++.
|
|
|
|
* It's now easier to use shared libraries on Linux/x86 systems with
|
|
`mmc --make'. See the documentation for the `--mercury-linkage'
|
|
and `--linkage' options and the `MERCURY_LINKAGE' Mmake variable
|
|
in the Mercury User's Guide.
|
|
|
|
* The behaviour of the `--pre-link-command' and `--extra-init-command'
|
|
options has changed. They now take a command which will be passed
|
|
the names of all source files in the program or library, with the
|
|
name of the main module's source file passed first.
|
|
See the "Build system options" section of the "Invocation" chapter
|
|
of the Mercury User's Guide for details.
|
|
|
|
* It is now possible to reconfigure an existing Mercury installation
|
|
to use a different C compiler. See the "C compilers" chapter
|
|
of the Mercury User's Guide for details.
|
|
|
|
* Inlining of builtins can now be disabled using the `--no-inline-builtins'
|
|
option. This is done by default when debugging, as without this option the
|
|
execution of builtins is not traced.
|
|
|
|
* The Mercury compiler now uses `.' and not `:' as the module separator
|
|
in all output.
|
|
|
|
* 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) have been removed.
|
|
|
|
* There is a new analysis: `--analyse-exceptions'. This identifies
|
|
predicates that will not throw an exception. This information is
|
|
made available to the optimizing passes of the compiler.
|
|
|
|
Portability improvements:
|
|
|
|
* We have made the implementation compatible with gcc 3.4.
|
|
* Shared libraries now work on Mac OS X.
|
|
|
|
Changes to the Mercury debugger:
|
|
|
|
* Users can now limit the output from stack traces.
|
|
|
|
The mdb command `stack' now takes an optional integer argument that
|
|
specifies the maximum number of stack frames to be printed.
|
|
|
|
* Users can now put breakpoints on unify and compare predicates.
|
|
|
|
The syntax for procedure specifications now has provision for specifying
|
|
unify and compare predicates.
|
|
|
|
* Users can now save runtime values to files.
|
|
|
|
We've added a new mdb command, `save_to_file', that saves a specified term
|
|
to a specified file.
|
|
|
|
* The declarative debugger can now be told to trust entire modules or
|
|
individual predicates or functions using the `trust' mdb command.
|
|
|
|
* The declarative debugger can now also tell you where a value
|
|
appearing in an atom came from (i.e. the call which constructed the value).
|
|
|
|
* The declarative debugger also now supports a divide-and-query search mode.
|
|
You can tell the declarative debugger to use this search mode by invoking
|
|
it with the command `dd -s divide_and_query'.
|
|
|
|
* The "pretty" and "raw_pretty" print formats have had their names swapped, so
|
|
the "pretty" format is now prettier than the "raw_pretty" format.
|
|
|
|
Changes to the compiler back-ends:
|
|
|
|
* The .NET CLR back-end now bootstraps.
|
|
|
|
We've fixed a lot of bugs, and implemented a lot more of the Mercury
|
|
standard library. As well as being able to bootstrap in grade `il',
|
|
we also now pass more than 90% of the applicable tests in the
|
|
Mercury test suite. See README.DotNet for details.
|
|
|
|
* Improvements to the Java back-end.
|
|
|
|
We've fixed a lot of bugs, and implemented a lot more of the Mercury
|
|
standard library. See README.Java for further details on the status
|
|
of this backend.
|
|
|
|
Mercury 0.12.1, 21 November 2005
|
|
--------------------------------
|
|
|
|
This release is primarily a bug-fix release.
|
|
It fixes a problem with predicates that have existentially typed
|
|
arguments, makes sure that I/O tabling does not inadvertently
|
|
inline predicates that have a `:- pragma no_inline' declaration
|
|
attached to them, and makes various improvements to the MS-Windows
|
|
ports.
|
|
|
|
Mercury 0.12.2, 25 January 2006
|
|
-------------------------------
|
|
|
|
This release fixes some bugs with `mmc --make' and `--smart-recompilation'.
|