ECLiPSe 6.1 Release Notes

Version 6.1 (June 2013)

The major news for this release are the addition of the Gecode interface, CP-Viz interface, LDSB symmetry breaking, more global constraints, full ISO-Prolog compatibility, and availability on 64-bit Windows.

Libraries

New Libraries

lib(gfd)
An interface to the Gecode finite domain solver, see below.
lib(cpviz)
An interface to the CP-Viz visualization toolkit, see below.
lib(ldsb)
A new library for low-overhead symmetry breaking, contributed by Chris Mears, Monash University and a result of his PhD work.
lib(cycle)
A hybrid hamiltonian cycle constraint, using finite domain propagation and a linear programming relaxation, contributed by Lukasz Domagala.
lib(list_collection)
A library handling collections of lists, contributed by Lukasz Domagala.
lib(lazy_io)
Predicates to map I/O streams to character lists.
lib(csv)
Library for reading comma-separated files.
lib(ic_prop_test_util), lib(fd_prop_test_util)
Libraries for testing constraint propagators.
lib(format)
Compatibility library partly implementing format/2,3.
lib(timeout_simple)
Variant of lib(timeout).

Library Enhancements

lib(ic_global) and lib(ic_global_gac)
Many new constraints, largely contributed by Helmut Simonis.
lib(eplex)
Port to Gurobi solver. Handling of Special Ordered Sets as true constraints. Interface to CPLEX indicator constraints. Improvements to COIN/OR interface.

Gecode Interface

An interface to the Gecode finite domain solver. This interface provides a high degree of code compatibility with the finite domain portion of the IC library, and to a lesser extent, with the FD library as well. This means that programs originally written for the IC library should run with GFD with little modifications, beyond renaming any explicit reference to the ic family of modules. All of Gecode's global finite domain constraints are available through the interface.

CP-Viz Interface

CP-Viz is an open-source visualization toolkit for finite domain constraint programming. It provides visualization for search trees, variables and global constraints through a post-mortem analysis of trace logs. CP-Viz is included in this release of ECLiPSe (no separate download needed), and interfaced via lib(cpviz).

Full support for ISO-Prolog

In ECLiPSe, separate modules can be written in different logic programming language dialects. ISO-Prolog is now supported with three levels:

lib(iso_strict)
Implements strict ISO-Prolog, compliant with ISO/IEC 13211-1 and its corrigenda 1 and 2.
lib(iso)
Implements what we consider a sensible blend of ISO-Prolog and ECLiPSe language: Built-in predicates of both are avaliable, the syntax is ISO-style (with regard to restrictions and quoting), error checking is slightly less strict than required by ISO, some subtle semantic difference are resolved in favour of ECLiPSe style for reasons of performance, and the extensions are more liberal than what is allowed by ISO. For these reasons, this variant cannot claim full ISO compliance.
lib(iso_light)
Like lib(iso), but without ISO exception handling.
These three dialect names can be used (like the alternatives eclipse_language, cprolog, quintus, sicstus, swi) in a module header like ":-module(m,[],iso)", or in a command line option "-L iso", or as the value of an ECLIPSEDEFAULTLANGUAGE environment variable.

Compiler

inline/1
Predicates can now be inline-expanded by giving a simple :-inline(PredSpec) declaration.

Built-in Predicates

call/N
This generalised metacall primitive invokes a goal with extra arguments, without having to construct the goal structure. For instance, call(foo(a),b,c) will invoke foo(a,b,c).
catch/3 and throw/1
These replace the now deprecated block/3 and exit_block/1 builtins, compatible with ISO Prolog. The exception term can be a compound term.
is_array/1, array_list/2, array_flat/3, array_concat/3
A number of new builtin predicates for more convenient array manipulation.
close/2
ISO-compatible variant of close/1 with force-option.
meta_predicate/1 declaration
Declaration for indicating meta-arguments. Mainly for the benefit of source processing tools, the compiler currently does not use this declaration.
stream_select/3
The select/3 built-in has been renamed stream_select/3, to remove naming conflict with select/3 from the lists library.
unschedule_suspension/1
Undoes the scheduling of a suspension, preventing the delayed goal from actually being executed. This is useful for implementing idempotent constraint propagators.

Other Changes

Stream handles
I/O streams are now referred to by anonymous handles (instead of small integers as in previous releases). The advantage of this is that a stream will be closed automatically when the stream handle ceases to exist. This happens on failure (unless the handle has been copied to a persistent location), or when all copies of the handle have gone out of scope and are garbage collected. It is of course still possible to create stream aliases (global names); such streams will behave as before the change. For backward compatibility (and some foreign interfaces), it is still possible to obtain a numeric stream identifier, in which case the advantages of using handles are lost.
Stream properties
A number of new stream properties are supported (some for ISO-Prolog compatibility): reposition, input, output, end_of_stream, eof_action, encoding. Also delete_file for automatically deleting an open file when the stream is closed or its handle lost.
New write-options
New write_term options precedence, fullstop and nl, and corresponding formats for printf.
Run Priorities
Predicates now have a wakeup-priority and a run-priority. The wakeup-priority (corresponding to the priority in previous releases) determines the place that a woken goal occupies in the woken goal queue. The run-priority determines the priority-level under which the woken goals executes, and thus how atomic it is, i.e. which higher-priority goals can interrupt it. The default-run-priority is high (2), meaning that execution can only be interrupted by level 1 goals (which are supposed to be reserved for debugging purposes). This should simplify many cases where in the past it was necessary to use call_priority/2 for atomicity.
Unscheduling
Woken goals can be un-scheduled, which is useful for idempotent propagators that do not need to wake themselves.
Suspension list aliases
Suspension list names can now be declared in the meta_attribute declaration, lists can be given alias names, and multiple lists can be grouped under a single name. This simplifies the writing of solver independent code. Also, the suspend/3,4 predicate now accepts a more flexible syntax for waking conditions.
High-resolution timer
If provided by the operating system and hardware, statistics(hr_time,T) makes a high-resolution timer available. This timer's absolute value is meaningless, it is only useful for computing time differences.
Command line options
New options -L LANGUAGE and -t TOPLEVELMODULE, and also -f FILE as a more intuitive alias for -b FILE.
Working directory
New flag cwd_scope (process/separate), allowing eclipse to separately keep track of its current directory, rather than relying and manipulating the process-wide one. This was prompted by problems in embedded settings, where eclipse and host program interfere when manipulating the process's current directory.
Complete support for ISO Prolog syntax
All remaining discrepancies have been addressed, and syntax switches are provided to enable strict ISO syntax.
Timers
If supported by the operating system, event timers no longer use SIGALRM handlers. This results in less likelihood of conflicts in embedded settings, in particular Java.

Incompatibilities

Supported Architectures

This release is available for the following architectures: