ECLiPSe 6.0 Release Notes

Version 6.0 (Septemper 2008)

The major news for this release is a new compiler. This is accompanied by corresponding improvements in the runtime system, as well as much enhanced source-linked debugging features.

New Compiler

The compiler has been rewritten in ECLiPSe itself, replacing the original compiler which was written in C and hard to maintain and modify. As a consequence, the compilation process itself has become slower, but the generated code will usually run faster and will improve as we implement further optimizations. Performance improvements are due to the new compiler in combination with improvements in the runtime system (regarding calling conventions, inline disjunctions and indexing, variable initalisation, etc).

Incompatibilities:

Source-linked Debugging and Breakpoints

With the availability of the new compiler, we are now able to support source-linked debugging features, namely

Libraries

Library Changes

lib(eplex)
New predicates:
  • eplex_verify_solution/2, lp_verify_solution/3 -- verifies that the solution returned by the solver is indeed feasible.
  • eplex_get_iis/4, lp_get_iis/5 -- returns an IIS (Irreducible Infeasuble Subsystem) for an infeasible problem, if supported by the solver (currently CPLEX and Xpress). Also added infeasible handler to allow these predicates to be called when a problem is infeasible.
New functionality for osi_clpcbc solver: added support for barrier solving method, and the solving of quadratic LP problems.
lib(scattered) removed
This library no longer exists - use discontiguous/1 declarations instead.

New Libraries

lib(ic_global_gac)
A new library for global constraints for lib(ic) that achieves generalized arc consistency. There is currently one constraint in this library, alldifferent/1, contributed by Helmut Simonis. This version of alldifferent/1 achieves stronger consistency than the versions of alldifferent/1 in lib(ic_global) and lib(ic).
lib(max_flow), lib(max_flow_eplex)
Implementation of the Ford-Fulkerson max-flow algorithm between two nodes in a graph, contributed by CrossCore Optimization.
lib(all_min_cuts), lib(all_min_cuts_eplex)
Implementation of the Curet et al algorithm for generating all minimum-cost cutsets between a source and a sink node in a graph. Contributed by CrossCore Optimization.
lib(multifile)
The implementation of the multifile directive (used for Prolog compatibility) has been factored out into this separate library.

Built-in Predicates

Other Changes

Predefined Operators
The precedence and associativity of the unary prefix operators +/1, -/1 and \ /1 have been changed to conform to the ISO definition, even when not in iso-compatibility mode. The cprolog-style compatibility libraries still provide the old style definitions:
ECLiPSe 5.10 defaultECLiPSe 5.10 with lib(iso)ECLiPSe 6.0 default and lib(iso)ECLiPSe 6.0 with lib(cprolog/quintus/sictus)
op(500, fx, +) op(500, fx, +) op(200, fy, +) op(500, fx, +)
op(500, fx, -) op(200, fy, -) op(200, fy, -) op(500, fx, -)
op(200, fx, \) op(200, fy, \) op(200, fy, \)
The changes are unlikely to cause problems, at least not when the operators are used within mathematical expressions. Note that "-X*Y" is now parsed as (-X)*Y instead of -(X*Y).
Module System
tool/1 forward declarations are no longer supported. When compiling a call to a tool predicate, the tool/2 declaration must have been encountered before the call.
Module Locking
The module locking primitives have been revised. Modules are now locked with a lock/0 or lock_pass/1 directive, or the corresponding built-in. lock/1 and lock/2 are obsolete.
Autoloading
The previously obsoleted autoload/2 and autoload_tool/2 declarations are no longer available. They have been replaced by a simpler facility.
Conditional compilation
Conditional compilation (or other source processing) via if/1, elif/1, else/0, endif/0 directives.
Unloading of embedded ECLiPSe
ec_cleanup() performs a more complete cleanup, so that an embedded ECLiPSe can be unloaded without quitting the host application.
Dynamic code
Filtering of head arguments is now performed for dynamic code, so the execution of dynamic predicates which have many clauses should be faster, but as dynamic predicates are no longer compiled, predicates with complex body goals and few clauses may execute slower. Clause transformation is no longer performed implicitly by assert, and must be explicitly done by the user if required.
Source Annotation-aware macro transformations
The macro transformations defined by macro/3 can now optionally deal with source annotation information provided by the compiler, so that source information can be retained for the transformed terms.
Command Line Options
Command line options which the ECLiPSe runtime system does not recognise now lead to an error message. In earlier versions, they used to be ignored and passed to the application program. To pass options to the application program, always place them after a -- separator.

Supported Architectures

This release is available for the following architectures: