|
Release Notes
|
Version 5.0 (Jun 23 2000)
- Major module system revision
-
The module system has been simplified and at the same time
enhanced by features which are important for the implementation
of hybrid constraint solvers. See the new User Manual chapter on modules.
- Textual interface/body separation given up
-
The module interface now simply consists of the set of
export and reexport directives. A special tool (icompile/1,2)
is provided to extract the interface from the source.
- Reexport
-
The new reexport directive and its variants reexport-from and
reexport-except allow flexible design of module interfaces.
Modules can now extend, restrict, modify and combine multiple
other module's interfaces.
- Semantics of :/2
-
It specifies now the lookup-module for the predicate's name
rather than the definition module, which is more flexible.
A list of modules can be given on the left hand side in order
to call e.g. several implementations of the same constraint
simultaneously.
- Global predicates no longer supported
-
Modules now have a "language-module" imported by default instead.
This allows different modules to be written in different language
dialects, a feature which we intend to exploit further in the future.
The former Eclipse built-ins now come from the eclipse_language module.
- Record/setval
-
The default visibility for record keys and non-logical variable
names (as used in setval) has changed to local.
- Dynamic visibility changes no longer allowed
-
This allows for better optimizations and error detection at
compile time and encourages better style.
- Import ambiguities
-
When importing two modules that export predicates of the same name,
this only causes a conflict when the predicate is actually being used.
In which case the ambiguity can be resolved by explicit import-from
or by qualifying with :/2.
- Abolish
-
This now only removes a predicate's clauses. All declarations about
the predicate remain in effect. In particular, it is no longer
possible to abolish an import link.
- Compatibility Libraries
-
Code written in other language dialects should now be put in
modules that use the corresponding compatibility package as
their "language-module", rather than just importing the
compatibility package.
- Harmonised Constraint Syntax
-
The main arithmetic solvers now use a common constraint syntax
for the basic arithmetic constraints.
The aim is to use the same names for constraints with the the same
declarative meaning and to use module qualification to distinguish
different operational behaviours. Refer to the new chapter
"Common Solver Interface" in the Library Manual.
- Automated Documentation Support
-
The system now accepts a comment/2 directive which can be used to
add structured documentation to your sources. The new library
lib(document) extracts this and other information from the source
and generates online documentation in html format.
- New Comprehensive Reference Manual
-
A new online Reference Manual is included. This itself is
now generated from source documentation
and covers all built-in and library predicates (>1700).
- Object file format
-
Modules can now be precompiled into Eclipse Object files (.eco).
Refer to the new library lib(fcompile).
- New Global Finite-Domain Constraints
-
The global constraints sorted/2, sorted/3 and alldifferent/2 have been
added to library(fd_global). Also alldifferent/1 with new algorithm.
- New Interval Constraints
-
The constraint piecewise_linear/3 has been added to library(ria).
It relates two variable according to a piecewise linear function
given by a list of points.
- Generic Branch-and-Bound Library
-
A solver-independent library lib(branch_and_bound) replaces the
finite-domain specific min_max-predicates. It can be configured
for stepwise improvement or dichotomic search.
- Cplex/Xpress-MP interface
-
Support for quadratic objective functions in lib(eplex).
- TkEclipse Development GUI
-
Many details have been improved. A Preference Editor and
a Library Browser have been added. New options to create
and clear the toplevel module.
- Tcl/Tk interface
-
This release of ECLiPSe goes with Tcl/Tk 8.3.
- 64-bit Version
-
This release is available for 64-bit Alpha/Linux systems.
- New Built-In Predicates
-
Module-related:
- get_module_info/3
- current_module_predicate/2
- create_module/3
- module/3 (directive)
- reexport/1 (directive)
I/O-related:
- existing_file/4
- pathname/4
- canonical_path_name/2
- set_stream_property/3
- unget/1
Conversions:
- expand_goal/2
- portray_goal/2
- string_list/3
- term_hash/4
- bytes_to_term/2
- term_to_bytes/2
Control:
Attributes
- get_var_bounds/3
- set_var_bounds/3
Other
- comment/2 (directive)
- include/1 (directive)
- test_and_setval/3
- New Libraries
-
- branch_and_bound (Generic branch-and-bound primitives)
- document (Tools for generating documentation from ECLiPSe sources)
- fcompile (Generate platform independent object files)
- hash (Hash table library)
- shadow_cons (A library implementing shadow, or 'local', constraint stores)
- test_util (Utilities for automated program tests)
- Compatibility Issues
-
The most likely problems when upgrading from ECLiPSe 4.2 are related to
the module system changes and new naming conventions in the constraint
libraries:
- When using several constraint libraries together, you may get
"ambiguous import" errors for constraints that have the same name
but different implementations. To resolve these correctly, please
read both the new chapters on modules in the User Manual and on the
common solver interface in the Library Manual.
- Global predicates have to be replaced with exported ones.
- Non-logical variables that are implicitly created by
setval/2 are now local as opposed to global in the previous release.
Should they need to be accessed in several modules, this should be
done through exported access predicates. As a temporary solution,
it is still possible to explicitly declare them global.
The same holds for record keys.
Other minor compatibility issues are:
- dump/1 and the .sd file format is no longer supported. It has been
superseded by lib(fcompile) and the .eco file format.
- precedence of (if) and (else) operators swapped
- write/1 now uses "m" print option, i.e. it prints the attributes
- line breaks are now allowed within quotes
- usage of compatibility libraries changed slightly due to changes
to the module system
- dim/2 now requires []/N functors when used to retrieve dimensions.
- absolute_file_name/2 replaced with more accurate canonical_path_name/2
and existing_file/4.
- Miscellaneous
-
- Almost all built-ins are now traced by the debugger
- ELSE port is now properly skipped
- Two new standard streams: warning_output and log_output.
Warning now usually go to warning_output (rather than output or error),
information like garbage-collection messages go to log_output.
That makes the easier to redirect, and warnings are printed in a different
colour in tkeclipse.
- After-event timer can be real or virtual time. Events can no
longer become due while a handler is running.
- ProTcl no longer supported
-
As of this release, the ProTcl interface to Tcl/Tk is no longer
included or supported. Refer to the Embedding Manual for how to embed
ECLiPSe applications into Tck/Tk and other host languages.
Previous release notes