Version/Change Log

Version 1.15 (2011/7/8, 11:48:1 CEST)
New development version (Jose Morales)
Version 1.14#2 (2011/8/12, 18:14:31 CEST)
Merging r13606 (trunk) into 1.14. This backports an optimization for DARWIN platforms (Jose Morales)
Version 1.14#1 (2011/8/10, 18:17:10 CEST)
Merging r13583 through r13586 (trunk) into 1.14. This fixes problems in the Windows version of Ciao (Edison Mera, Jose Morales)
Version 1.14 (2011/7/8, 10:51:55 CEST)
It has been a long while since declaring the last major version (basically since moving to subversion after 1.10/1.12), so quite a bit is included in this release. Here is the (longish) summary:

  • Extensions to functional notation:
    • Introduced fsyntax package (just functional syntax). (Daniel Cabeza)
    • Added support to define on the fly a return argument different from the default one (e.g. ~functor(~,f,2)). (Daniel Cabeza)
    • Use of ':- function(defined(true)).' so that the defined function does not need to be preceded by ~ in the return expression of a functional clause. (Daniel Cabeza)
    • Functional notation: added to documentation to reflect more of the FLOPS paper text and explanations. Added new functional syntax examples: arrays, combination with constraints, using func notation for properties, lazy evaluation, etc. (Manuel Hermenegildo)
    • Added functional abstractions to fsyntax and correct handling of predicate abstractions (the functions in the body where expanded outside the abstraction). (Jose Morales)
    • Improved translation of functions. In particular, old translation could lose last call optimization for functions with body or with conditional expressions. Furthermore, the translation avoids now some superfluous intermediate unifications. To be studied more involved optimizations. (Daniel Cabeza, Jose Morales).
    • More superfluous unifications taken out from translated code, in cases where a goal ~f(X) = /Term/ appears in the body. (Daniel Cabeza)
    • Added library/argnames_fsyntax.pl: Package to be able to use $~/2 as an operator. (Daniel Cabeza)
    • Added a new example for lazy evaluation, saving memory using lazy instead of eager evaluation. (Amadeo Casas)

  • Improvements to signals and exceptions:
    • Distinguished between exceptions and signals. Exceptions are thrown and caught (using throw/1 and catch/3). Signals are sent and intercepted (using send_signal/1 and intercept/3). (Jose Morales, Remy Haemmerle)
    • Back-port of the (improved) low-level exception handling from optim_comp branch. (Jose Morales)
    • Fixed intercept/3 bug, with caused the toplevel to not properly handle exceptions after one was handled and displayed (bug reported by Samir Genaim on 04 Dec 05, in ciao mailing list, subject “ciao top-level : exception handling”). Updated documentation. (Daniel Cabeza)
    • intercept/3 does not leave pending choice points if the called goal is deterministic (the same optimization that was done for catch/3). (Jose Morales)

  • New/improved libraries:
    • New assoc library to represent association tables. (Manuel Carro, Pablo Chico)
    • New regexp library to handle regular expressions. (Manuel Carro, Pablo Chico)
    • Fixed bug in string_to_number that affected ASCII to floating point number conversions (number_codes/2 and bytecode read). (Jose Morales)
    • system.pl: Added predicates copy_file/2 and copy_file/3. Added predicates get_uid/1, get_gid/1, get_pwnam/1, get_grnam/1 implemented natively to get default user and groups of the current process. (Edison Mera)
    • Added library for mutable variables. (Remy Haemmerle)
    • Added package for block declarations (experimental). (Remy Haemmerle)
    • Ported CHR as a Ciao package (experimental). (Tom Schrijvers)
    • Debugged and improved performance of the CHR library port. (Remy Haemmerle)
    • contrib/math: A library with several math functions that dependes on the GNU Scientific Library (GSL). (Edison Mera)
    • io_aux.pl: Added messages/1 predicate. Required to facilitate printing of compact messages (compatible with emacs). (Edison Mera)
    • Added library hrtimer.pl that allow us to measure the time using the higest resolution timer available in the current system. (Edison Mera)
    • Global logical (backtrackable) variables (experimental). (Jose Morales)
    • New dynamic handling (dynamic_clauses package). Not yet documented. (Daniel Cabeza)
    • Moved = from iso_misc to term_basic. (Daniel Cabeza)
    • lib/lists.pl: Added predicate sequence_to_list/2. (Daniel Cabeza)
    • lib/lists.pl: Codification of subordlist/2 improved. Solutions are given in other order. (Daniel Cabeza)
    • lib/filenames.pl: Added file_directory_base_name/3. (Daniel Cabeza)
    • library/symlink_locks.pl: preliminary library to make locks a la emacs. (Daniel Cabeza)
    • lib/between.pl: Bug in between/3 fixed: when the low bound was a float, an smaller integer was generated. (Daniel Cabeza)
    • Fixed bug related to implication operator -> in Fuzzy Prolog (Claudio Vaucheret)
    • contrib/gendot: Generator of dot files, for drawing graphs using the dot tool. (Claudio Ochoa)
    • Addded zeromq library (bindings for the Zero Message Queue (ZeroMQ, 0MQ) cross-platform messaging middleware) (Dragan Ivanovic)
    • Minor documentation changes in javall library (Jesus Correas)
    • Fix a bug in calculator pl2java example (Jesus Correas)
    • lib/aggregates.pl: Deleted duplicated clauses of findnsols/4, detected by Pawel. (Daniel Cabeza)
    • Added library to transform between color spaces (HSL and HVS) (experimental). (Jose Morales)
    • Added module qualification in DCGs. (Remy Haemmerle, Jose Morales)
    • prolog_sys:predicate_property/2 behaves similar to other Prolog systems (thanks to Paulo Moura for reporting this bug). (Jose Morales)
    • Added DHT library (implementation of distributed hash table) (Arsen Kostenko)
    • Adding property intervals/2 in native_props.pl (for intervals information) (Luthfi Darmawan)
    • Added code to call polynomial root finding of GSL (Luthfi Darmawan)
    • Some improvements (not total, but easy to complete) to error messages given by errhandle.pl . Also, some of the errors in sockets_c.c are now proper exceptions instead of faults. (Manuel Carro)
    • sockets library: added a library (nsl) needed for Solaris (Manuel Carro)
    • Driver, utilities, and benchmarking programs from the ECRC suite. These are aimed at testing some well-defined characteristics of a Prolog system. (Manuel Carro)
    • library/getopts.pl: A module to get command-line options and values. Intended to be used by Ciao executables. (Manuel Carro)

  • Improved ISO compliance:
    • Ported the Prolog ISO conformance testing.
    • Fixed read of files containing single “%” char (reported by Ulrich Neumerkel). (Jose Morales)
    • Added exceptions in =../2. (Remy Haemmerle)
    • Added exceptions in arithmetic predicates. (Remy Haemmerle)
    • Arithmetics integer functions throw exceptions when used with floats. (Remy Haemmerle)
    • Added exceptions for resource errors. (Remy Haemmerle)

  • Improvements to constraint solvers:
    • Improved CLPQ documentation. (Manuel Hermenegildo)
    • Added clp_meta/1 and clp_entailed/1 to the clpq and clpr packages (Samir Genaim):
      • clp_meta/1: meta-programming with clp constraints, e.g, clp_meta([A.>.B,B.>.1]).
      • clp_entailed/1: checks if the store entails specific cnstraints, e.g, clp_entailed([A.>.B]) succeeds if the current store entailes A.>.B, otherwise fails.
    • Exported the simplex predicates from CLP(Q,R). (Samir Genaim)

  • Other language extensions:
    • Added new bf/bfall package. It allows running all predicates in a given module in breadth-first mode without changing the syntax of the clauses (i.e., no <- needed). Meant basically for experimentation and, specially, teaching pure logic programming. (Manuel Hermenegildo)
    • Added afall package in the same line as bf/bfall (very useful!). (Manuel Hermenegildo)
    • Improved documentation of bf and af packages. (Manuel Hermenegildo)
    • Added partial commons-style dialect support, including dialect flag. (Manuel Hermenegildo)
    • yap_compat and commons_compat compatibility packages (for Yap and Prolog Commons dialects). (Jose Morales)
    • argnames package: enhanced to allow argument name resolution at runtime. (Jose Morales)
    • A package for conditional compilation of code (:- use_package(condcomp)). (Jose Morales)

  • Extensions for parallelism (And-Prolog):
    • Low-level support for andprolog library has been taken out of the engine and moved to library/apll in a similar way as the sockets library. We are planning to reduce the size of the actual engine further, by taking some components out of engine, such as locks, in future releases. (Amadeo Casas)
    • Improved support for deterministic parallel goals, including some bug fixes. (Amadeo Casas)
    • Goal stack definition added to the engine. (Amadeo Casas)
    • And-parallel code and the definition of goal stacks in the engine are now wrapped with conditionals (via AND_PARALLEL_EXECUTION variable), to avoid the machinery necessary to run programs in parallel affects in any case the sequential execution. (Amadeo Casas)
    • Stack expansion supported when more than one agent is present in the execution of parallel deterministic programs. This feature is still in experimental. Support for stack expansion in nondeterministic benchmarks will be added in a future release. (Amadeo Casas)
    • Support for stack unwinding in deterministic parallel programs, via metachoice/metacut. However, garbage collection in parallel programs is still unsupported. We are planning to include support for it in a future release. (Amadeo Casas)
    • Backward execution of nondeterministic parallel goals made via events, without speculation and continuation join. (Amadeo Casas)
    • Improved agents support. New primitives included that aim at increasing the flexibility of creation and management of agents. (Amadeo Casas)
    • Agents synchronization is done now by using locks, instead of using assertz/retract, to improve efficiency in the execution of parallel programs. (Amadeo Casas)
    • Optimized version of call/1 to invoke deterministic goals in parallel has been added (call_handler_det/1). (Amadeo Casas)
    • Optimization: locks/new_atom only created when the goal is stolen by other process, and not when this is pushed on to the goal_stack. (Amadeo Casas)
    • Integration with the new annotation algorithms supported by CiaoPP, both with and without preservation of the order of the solutions. (Amadeo Casas)
    • New set of examples added to the andprolog library. (Amadeo Casas)
    • Several bug fixes to remove some cases in execution of parallel code in which races could appear. (Amadeo Casas)
    • andprolog_rt:& by par_rt:& have been moved to native_builtin (Amadeo Casas)
    • indep/1 and indep/2 have been moved to native_props, as ground/1, var/1, etc. (Amadeo Casas)
    • Added assertions to the library/apll and library/andprolog libraries. (Amadeo Casas)
    • Removed clauses in pretty_print for the &>/2 and <&/1 operators. (Amadeo Casas)
    • Shorter code for <& / 1 and <&! / 1 (Manuel Carro)
    • Trying to solve some problems when resetting WAM pointers (Manuel Carro)
    • Better code to clean the stacks (Manuel Carro)

  • Improvements to foreign (C language) interface:
    • Better support for cygwin and handling of dll libraries in Windows. Now usage of external dll libraries are supported in Windows under cygwin. (Edison Mera)
    • Improvements to documentation of foreign interface (examples). (Manuel Hermenegildo)
    • Allow reentrant calls from Prolog to C and then from C to Prolog. (Jose Morales)
    • Fix bug that prevented ciaoc -c MODULE from generating dynamic .so libraries files. (Jose Morales)
    • Fix bug that prevented ciaoc MODULE && rm MODULE && ciaoc MODULE from emitting correct executables (previously, dynamic .so libraries files where ignored in executable recompilations when only the main file was missing). (Jose Morales)

  • Run-Time Checking and Unit Tests:
    • Added support to perfom run-time checking of assertions and predicates outside ciaopp (see the documentation for more details). In addition to those already available, the new properties that can be run-time checked are: exception/1, exception/2, no_exception/1, no_exception/2, user_output/2, solutions/2, num_solutions/2, no_signal/1, no_signal/2, signal/1, signal/2, signals/2, throws/2. See library assertions/native_props.pl (Edison Mera)
    • Added support for testing via the unittest library. Documentation available at library(unittest/unittest). (Edison Mera)

  • Profiling:
    • Improved profiler, now it is cost center-based and works together with the run-time checking machinery in order to also validate execution time-related properties. (Edison Mera)
    • A tool for automatic bottleneck detection has been developed, which is able to point at the predicates responsible of lack of performance in a program. (Edison Mera)
    • Improved profiler documentation. (Manuel Hermenegildo)

  • Debugger enhancements:
    • Added the flag check_cycles to control whether the debugger takes care of cyclic terms while displaying goals. The rationale is that to check for cyclic terms may lead to very high response times when having big terms. By default the flag is in off, which implies that a cyclic term in the execution could cause infinite loops (but otherwise the debugger is much more speedy). (Daniel Cabeza)
    • Show the variable names instead of underscores with numbers. Added option v to show the variables list. Added v <N> option, where N is the Name of the variable you like to watch (experimental). (Edison Mera)
    • Distinguish between program variables and compiler-introduced variables. Show variables modified in the current goal. (Edison Mera)
    • debug_mode does not leave useless choicepoints (Jose Morales)

  • Emacs mode:
    • Made ciao mode NOT ask by default if one wants to set up version control when first saving a file. This makes more sense if using other version control systems and probably in any case (several users had asked for this). There is a global customizable variable (which appears in the LPdoc area) which can be set to revert to the old behaviour. Updated the manual accordingly. (Manuel Hermenegildo)
    • Added possibility of chosing which emacs Ciao should use during compilation, by LPdoc, etc. Previously only a default emacs was used which is not always the right thing, specially, e.g., in Mac OS X, where the latest/right emacs may not even be in the paths. Other minor typos etc. (Manuel Hermenegildo)
    • Moved the version control menu entries to the LPdoc menu. (Manuel Hermenegildo)
    • Updated highlighting for new functional syntax, unit tests, and all other new features. (Manuel Hermenegildo)
    • Completed CiaoPP-java environment (menus, buttons, etc.) and automated loading when visiting Java files (still through hand modification of .emacs). CiaoPP help (e.g., for properties) now also available in Java mode. (Manuel Hermenegildo)
    • Changes to graphical interface to adapt better to current functionality of CiaoPP option browser. Also some minor aesthetic changes. (Manuel Hermenegildo)
    • Various changes and fixes to adapt to emacs-22/23 lisp. In particular, fixed cursor error in emacs 23 in Ciao shell (from Emilio Gallego). Also fixed prompt in ciaopp and LPdoc buffers for emacs 23. (Manuel Hermenegildo)
    • Unified several versions of the Ciao emacs mode (including the one with the experimental toolbar in xemacs) that had diverged. Sorely needed to be able to make progress without duplication. (Manuel Hermenegildo)
    • New version of ciao.el supporting tool bar in xemacs and also, and perhaps more importantly, in newer emacsen (>= 22), where it previously did not work either. New icons with opaque background for xemacs tool bar. (Manuel Hermenegildo)
    • Using key-description instead of a combination of text-char-description and string-to-char. This fixes a bug in the Ciao Emacs Mode when running in emacs 23, that shows wrong descriptions for M-... key bindings. The new code runs correctly in emacs 21 and 22. (Jose Morales)
    • Coloring strings before functional calls and 0' characters (strings like "~w" were colored incorrectly) (Jose Morales)
    • @begin{verbatim} and @include colored as LPdoc commands only inside LPdoc comments. (Jose Morales)
    • Fixed colors for dark backgrounds (workaround to avoid a bug in emacs) (Jose Morales)
    • Added an automatic indenter (contrib/plindent) and formatting tool, under emacs you can invoque it using the keyword C-c I in the current buffer containing your prolog source. (Edison Mera)

  • Packaging and distribution:
    • User-friendly, binary installers for several systems are now generated regularly and automatically: Ubuntu/Debian, Fedora/RedHat, Windows (XP, Vista, 7) and MacOSX. (Edison Mera, Remy Haemmerle)

  • Improvements in Ciao toplevel:
    • Introduced check_cycles prolog_flag which controls whether the toplevel handles or not cyclic terms. Flag is set to false by default (cycles not detected and handled) in order to speed up responses. (Daniel Cabeza)
    • Modified valid_solution/2 so that it asks no question when there are no pending choice points and the prompt_alternatives_no_bindings prolog flag is on. (Jose Morales)
    • Now 'Y' can be used as well as 'y' to accept a solution of a query. (Daniel Cabeza)
    • Added newline before true when displaying empty solutions. (Jose Morales)
    • Multifile declarations of packages used by the toplevel were not properly handled. Fixed. (Daniel Cabeza)
    • Fixed bug in output of bindings when current output changed.
    • Changes so that including files in the toplevel (or loading packages) does not invoke an expansion of the ending end_of_file. This makes sense because the toplevel code is never completed, and thus no cleanup code of translations is invoked. (Daniel Cabeza)

  • Compiler enhancements and bug fixes:
    • Added a command line option to ciaoc for generating code with runtime checks. (Daniel Cabeza)
    • Now the compiler reads assertions by default (when using the assertion package), and verifies their syntax. (Edison Mera)
    • Added option -w to ciaoc compiler to generate the WAM code of the specified prolog files. (Edison Mera)
    • Fixed bug in exemaker: now when main/0 and main/1 exists, main/0 is always the program entry (before in modules either could be). (Daniel Cabeza)
    • Fixed bug: when compiling a file, if an imported file had no itf and it used the redefining declaration, the declaration was forgotten between the reading of the imported file (to get its interface) and its later compilation. By now those declarations are never forgotten, but perhaps it could be done better. (Daniel Cabeza)
    • The unloading of files kept some data related to them, which caused in some cases errors or warnings regarding module redefinitions. Now this is fixed. (Daniel Cabeza)
    • Undefined predicate warnings also for predicate calls qualified with current module (bug detected by Pawel Pietrzak). (Daniel Cabeza)
    • Fixed bug debugger_include (that is, now a change in a file included from a module which is debugged is detected when the module is reloaded). (Daniel Cabeza)
    • Fixed a(B) :- _=B, b, c(B) bug in compilation of unification. (Jose Morales)

  • Improving general support for language extensions:
    • Every package starts with ':- package(...)' declaration now. This allows a clear distinction between packages, modules, and files that are just included; all of them using the same .pl extension. (Jose Morales)
    • Added priority in syntax translations. Users are not required to know the details of translations in order to use them (experimental: the the correct order for all the Ciao packages is still not fixed) (Jose Morales)
    • Now the initialization of sentence translations is done in the translation package, when they are added. In this way, previous active translations cannot affect the initialization of new translations, and initializations are not started each time a new sentence translation is added. Additionally, now the initialization of sentence translations in the toplevel is done (there was a bug). (Daniel Cabeza)
    • Added addterm(Meta) meta-data specification for the implementation of the changes to provide a correct clause/2 predicate. (Daniel Cabeza)
    • Generalized addmodule meta-data specification to addmodule(Meta), addmodule is now an alias for addmodule(?). Needed for the implementation of the changes to provide a correct clause/2 predicate. (Daniel Cabeza)

  • Improvements to system assertions:
    • Added regtype basic_props:num_code/1 and more assertions to basic_props.pl (German Puebla)
    • Added trust assertion for atomic_basic:number_codes/2 in order to have more accurate analysis info (first argument a number and second argument is a list of num_codes) (German Puebla)
    • Added some more binding insensitivity assertions in basic_props.pl (German Puebla)
    • Added the basic_props:filter/2 property which is used at the global control level in order to guarantee termination. (German Puebla)
    • Added equiv assertion for basiccontrol:fail/0 (German Puebla)
    • Modified eval assertion so that partial evaluation does not loop with ill-typed, semi-instantiated calls to is/2 (this problem was reported some time ago) (German Puebla)
    • Replaced true assertions for arithmetic predicates with trust assertions (arithmetic.pl). (German Puebla)
    • Added assertions for term_basic:'='/2 (the not unification) (German Puebla)
    • Added assertions for lists:nth/3 predicate and lists:reverse/3. (German Puebla)
    • Changed calls to atom/1 to atm/1 in c_itf_props:moddesc/1 (it is a regular type) (Jesus Correas)
    • formulae:assert_body_type/1 switched to prop, it is not a regtype. (Jesus Correas)
    • Added assertions to atom_concat/2. (Jesus Correas)
    • Added some assertions to dec10_io, lists, strings libraries. (Jesus Correas)
    • Removed check from pred and success froom many library assertions. (Jesus Correas)
    • Fixed a problem when reading multiple disjunction in assertions (library/formulae.pl and lib/assertions/assrt_write.pl). (Pawel Pietrzak)
    • Added/improved assertions in several modules under lib/ (Pawel Pietrzak)

  • Engine enhancements:
    • Added support for Ciao compilation in ppc64 architecture. (Manuel Carro)
    • sun4v added in ciao_get_arch. (Amadeo Casas)
    • Solved compilation issue in Sparc. (Manuel Carro, Amadeo Casas)
    • Support for 64 bits Intel processor (in 32-bit compatibility mode). (Manuel Carro)
    • Switched the default memory manager from linear to the binary tree version (which improves management of small memory blocks). (Remy Haemmerle)
    • Using mmap in Linux/i86, Linux/Sparc and Mac OS X (Manuel Carro)
    • A rename of the macro REGISTER to CIAO_REGISTER. There have been reports of the macro name clashing with an equally-named one in third-party packages (namely, the PPL library). (Manuel Carro)
    • A set of macros CIAO_REG_n (n currently goes from 1 to 4, but it can be enlarged) to force the GCC compiler to store a variable in a register. This includes assignments of hardware registers for n = 1 to 3, in seemingly ascending order of effectiveness. See coments in registers.h (Manuel Carro)
    • An assignement of (local) variables to be definitely stored in registers for some (not all) functions in the engine -- notably wam.c. These were decided making profiling of C code to find out bottlenecks and many test runs with different assignments of C variables to registers. (Manuel Carro)
    • Changed symbol name to avoid clashes with other third-party packages (such as minisat). (Manuel Carro)
    • Fixed a memory alignment problem (for RISC architectures where words must be word-aligned, like Sparc). (Jose Morales)
    • Unifying some internal names (towards merge with optim_comp experimental branch). (Jose Morales)

  • Attributed variables:
    • Attributes of variables are correctly displayed in the toplevel even if they contain cyclic terms. Equations added in order to define cyclic terms in attributes are output after the attributes, and do use always new variable names (doing otherwise was very involved). (Daniel Cabeza)
    • lib/attrdump.pl: The library now works for infinite (cyclic) terms. (Daniel Cabeza)
    • Changed multifile predicate dump/3 to dump_constraints/3. (Daniel Cabeza)
    • Added copy_extract_attr_nc/3 which is a faster version of copy_extract_attr/3 but does not handle cyclic terms properly. (Daniel Cabeza)
    • Added term_basic:copy_term_nat/2 to copy a term taking out attributes. (Daniel Cabeza)

  • Documentation:
    • Added deprecated/1. (Manuel Hermenegildo)
    • Improvements to documentation of rtchecks and tests. (Manuel Hermenegildo)
    • Many updates to manuals: dates, copyrights, etc. Some text updates also. (Manuel Hermenegildo)
    • Fixed all manual generation errors reported by LPdoc (still a number of warnings and notes left). (Manuel Hermenegildo)
    • Adding some structure (minor) to all manuals (Ciao, LPdoc, CiaoPP) using new LPdoc doc_structure/1. (Jose Morales)

  • Ciao Website:
    • Redesigned the Ciao website. It is generated again through LPdoc, but with new approach. (Jose Morales)
Version 1.13 (2005/7/3, 19:5:53 CEST)
New development version after 1.12. (Jose Morales)
Version 1.12 (2005/7/3, 18:50:50 CEST)
Temporary version before transition to SVN. (Jose Morales)
Version 1.11#1 (2003/4/4, 18:30:31 CEST)
New development version to begin the builtin modularization (Jose Morales)
Version 1.10#8 (2007/1/28, 18:1:27 CEST)
Backports and bug fixes to stable 1.10:
  • Changes to make Ciao 1.10 compile with the latest GCC releases.
  • Imported from CiaoDE/branches/CiaoDE-memory_management-20051016, changes from revisions 4909 to 4910: Changes to make Ciao issue a better message at startup if the allocated memory does not fall within the limits precomputed at compile time (plus some code tidying).
  • Port of revisions 5415, 5426, 5431, 5438, 5546, 5547 applied to Ciao 1.13 to Ciao 1.10 in order to make it use mmap() when possible and to make it compile on newer Linux kernels. Tested in Ubuntu, Fedora (with older kernel) and MacOSX.
  • Configuration files for DARWIN (ppc) and 64-bit platforms (Intel and Sparc, both in 32-bit compatibility mode).
  • Force the creation of the module containing the foreign interface compilation options before they are needed.
Version 1.10 (2004/7/29, 16:12:3 CEST)
  • Classical prolog mode as default behavior.
  • Emacs-based environment improved.
    • Improved emacs inferior (interaction) mode for Ciao and CiaoPP.
    • Xemacs compatibility improved (thanks to A. Rigo).
    • New icons and modifications in the environment for the preprocessor.
    • Icons now installed in a separate dir.
    • Compatibility with newer versions of Cygwin.
    • Changes to programming environment:
      • Double-click startup of programming environment.
      • Reorganized menus: help and customization grouped in separate menus.
      • Error location extended.
      • Automatic/Manual location of errors produced when running Ciao tools now customizable.
      • Presentation of CiaoPP preprocessor output improved.
    • Faces and coloring improved:
      • Faces for syntax-based highlighting more customizable.
      • Syntax-based coloring greatly improved. Literal-level assertions also correctly colored now.
      • Syntax-based coloring now also working on ASCII terminals (for newer versions of emacs).
      • Listing user-defined directives allowed to be colored in special face.
      • Syntax errors now colored also in inferior buffers.
      • Customizable faces now appear in the documentation.
      • Added new tool bar button (and binding) to refontify block/buffer.
      • Error marks now cleared automatically also when generating docs.
      • Added some fixes to hooks in lpdoc buffer.
  • Bug fixes in compiler.
    • Replication of clauses in some cases (thanks to S. Craig).

  • Improvements related to supported platforms
    • Compilation and installation in different palatforms have been improved.
    • New Mac OS X kernels supported.

  • Improvement and bugs fixes in the engine:
    • Got rid of several segmentation violation problems.
    • Number of significant decimal digits to be printed now computed accurately.
    • Added support to test conversion of a Ciao integer into a machine int.
    • Unbound length atoms now always working.
    • C interface .h files reachable through a more standard location (thanks to R. Bagnara).
    • Compatibility with newer versions of gcc.

  • New libraries and utilities added to the system:
    • Factsdb: facts defined in external files can now be automatically cached on-demand.
    • Symfnames: File aliasing to internal streams added.

  • New libraries added (in beta state):
    • fd: clp(FD)
    • xml_path: XML querying and transformation to Prolog.
    • xdr_handle: XDR schema to HTML forms utility.
    • ddlist: Two-way traversal list library.
    • gnuplot: Interface to GnuPlot.
    • time_analyzer: Execution time profiling.

  • Some libraries greatly improved:
    • Interface to Tcl/Tk very improved.
      • Corrected many bugs in both interaction Prolog to Tcl/Tk and viceversa.
      • Execution of Prolog goals from TclTk revamped.
      • Treatment of Tcl events corrected.
      • Predicate tcl_eval/3 now allows the execution of Tcl procedures running multiple Prolog goals.
      • Documentation heavily reworked.
      • Fixed unification of prolog goals run from the Tcl side.
    • Pillow library improved in many senses.
      • HTTP media type parameter values returned are always strings now, not atoms.
      • Changed verbatim() pillow term so that newlines are translated to <br>.
      • Changed management of cookies so that special characters in values are correctly handled.
      • Added predicate url_query_values/2, reversible. Predicate url_query/2 now obsolete.
      • Now attribute values in tags are escaped to handle values which have double quotes.
      • Improved get_form_input/1 and url_query/2 so that names of parameters having unusual characters are always correctly handled.
    • Fixed bug in tokenizer regarding non-terminated single or multiple-line comments. When the last line of a file has a single-line comment and does not end in a newline, it is accepted as correct. When an open-comment /* sequence is not terminated in a file, a syntax error exception is thrown.

  • Other libraries improved:
    • Added native_props to assertions package and included nonground/1.
    • In atom2terms, changed interpretation of double quoted strings so that they are not parsed to terms.
    • Control on exceptions improved.
    • Added native/1,2 to basic_props.
    • Davinci error processing improved.
    • Foreign predicates are now automatically declared as implementation-defined.
    • In lists, added cross_product/2 to compute the cartesian product of a list of lists. Also added delete_non_ground/3, enabling deletion of nonground terms from a list.
    • In llists added transpose/2 and changed append/2 implementation with a much more efficient code.
    • The make library has been improved.
    • In persdb, added pretractall_fact/1 and retractall_fact/1 as persdb native capabilities.
    • Improved behavior with user environment from persdb.
    • In persdb, added support for persistent_dir/4, which includes arguments to specify permission modes for persistent directory and files.
    • Some minor updates in persdb_sql.
    • Added treatment of operators and module:pred calls to pretty-printer.
    • Updated report of read of syntax errors.
    • File locking capabilities included in open/3.
    • Several improvements in library system.
    • New input/output facilities added to sockets.
    • Added most_specific_generalization/3 and most_general_instance/3 to terms_check.
    • Added sort_dict/2 to library vndict.
    • The xref library now treats also empty references.

  • Miscellaneous updates:
    • Extended documentation in libraries actmods, arrays, foreign_interface, javall, persdb_mysql, prolog_sys, old_database, and terms_vars.
Version 1.9 (2002/5/16, 23:17:34 CEST)
New development version after stable 1.8p0 (MCL, DCG)
Version 1.8 (2002/5/16, 21:20:27 CEST)
  • Improvements related to supported platforms:
    • Support for Mac OS X 10.1, based on the Darwin kernel.
    • Initial support for compilation on Linux for Power PC (contributed by Paulo Moura).
    • Workaround for incorrect C compilation while using newer (> 2.95) gcc compilers.
    • .bat files generated in Windows.

  • Changes in compiler behavior and user interface:
    • Corrected a bug which caused wrong code generation in some cases.
    • Changed execution of initialization directives. Now the initialization of a module/file never runs before the initializations of the modules from which the module/file imports (excluding circular dependences).
    • The engine is more intelligent when looking for an engine to execute bytecode; this caters for a variety of situations when setting explicitly the CIAOLIB environment variable.
    • Fixed bugs in the toplevel: behaviour of module:main calls and initialization of a module (now happens after related modules are loaded).
    • Layout char not needed any more to end Prolog files.
    • Syntax errors now disable .itf creation, so that they show next time the code is used without change.
    • Redefinition warnings now issued only when an unqualified call is seen.
    • Context menu in Windows can now load a file into the toplevel.
    • Updated Windows installation in order to run CGI executables under Windows: a new information item is added to the registry.
    • Added new directories found in recent Linux distributions to INFOPATH.
    • Emacs-based environment and debugger improved:
      • Errors located immediataly after code loading.
      • Improved ciao-check-types-modes (preprocessor progress now visible).
      • Fixed loading regions repeatedly (no more predicate redefinition warnings).
      • Added entries in ciaopp menu to set verbosity of output.
      • Fixed some additional xemacs compatibility issues (related to searches).
      • Errors reported by inferior processes are now explored in forward order (i.e., the first error rewported is the first one highlighted). Improved tracking of errors.
      • Specific tool bar now available, with icons for main fuctions (works from emacs 21.1 on). Also, other minor adaptations for working with emacs 21.1 and later.
      • Debugger faces are now locally defined (and better customization). This also improves comtability with xemacs (which has different faces).
      • Direct access to a common use of the preprocessor (checking modes/types and locating errors) from toolbar.
      • Inferior modes for Ciao and CiaoPP improved: contextual help turned on by default.
      • Fixes to set-query. Also, previous query now appears in prompt.
      • Improved behaviour of stored query.
      • Improved behaviour of recentering, finding errors, etc.
      • Wait for prompt has better termination characteristics.
      • Added new interactive entry points (M-x): ciao, prolog, ciaopp.
      • Better tracking of last inferior buffer used.
      • Miscellanous bugs removed; some colors changed to adapt to different Emacs versions.
      • Fixed some remaining incompatibilities with xemacs.
      • :- doc now also supported and highlighted.
      • Eliminated need for calendar.el
      • Added some missing library directives to fontlock list, organized this better.

  • New libraries added to the system:
    • hiord: new library which needs to be loaded in order to use higher-order call/N and P(X) syntax. Improved model for predicate abstractions.
    • fuzzy: allows representing fuzzy information in the form or Prolog rules.
    • use_url: allows loading a module remotely by using a WWW address of the module source code
    • andorra: alternative search method where goals which become deterministic at run time are executed before others.
    • iterative deepening (id): alternative search method which makes a depth-first search until a predetermined depth is reached. Complete but in general cheaper than breadth first.
    • det_hook: allows making actions when a deterministic situation is reached.
    • ProVRML: read VRML code and translate it into Prolog terms, and the other way around.
    • io_alias_redirection: change where stdin/stdout/stderr point to from within Ciao programs.
    • tcl_tk: an interface to Tcl/Tk programs.
    • tcl_tk_obj: object-based interface to Tcl/Tk graphical objects.
    • CiaoPP: options to interface with the CiaoPP Prolog preprocessor.

  • Some libraries greatly improved:
    • WebDB: utilities to create WWW-based database interfaces.
    • Improved java interface implementation (this forced renaming some interface primitives).
    • User-transparent persistent predicate database revamped:
      • Implemented passerta_fact/1 (asserta_fact/1).
      • Now it is never necessary to explicitly call init_persdb, a call to initialize_db is only needed after dynamically defining facts of persistent_dir/2. Thus, pcurrent_fact/1 predicate eliminated.
      • Facts of persistent predicates included in the program code are now included in the persistent database when it is created. They are ignored in successive executions.
      • Files where persistent predicates reside are now created inside a directory named as the module where the persistent predicates are defined, and are named as F_A* for predicate F/A.
      • Now there are two packages: persdb and 'persdb/ll' (for low level). In the first, the standard builtins asserta_fact/1, assertz_fact/1, and retract_fact/1 are replaced by new versions which handle persistent data predicates, behaving as usual for normal data predicates. In the second package, predicates with names starting with 'p' are defined, so that there is not overhead in calling the standard builtins.
      • Needed declarations for persistent_dir/2 are now included in the packages.

    • SQL now works with mysql.
    • system: expanded to contain more predicates which act as interface to the underlying system / operating system.

  • Other libraries improved:
    • xref: creates cross-references among Prolog files.
    • concurrency: new predicates to create new concurrent predicates on-the-fly.
    • sockets: bugs corrected.
    • objects: concurrent facts now properly recognized.
    • fast read/write: bugs corrected.
    • Added 'webbased' protocol for active modules: publication of active module address can now be made through WWW.
    • Predicates in library(dynmods) moved to library(compiler).
    • Expansion and meta predicates improved.
    • Pretty printing.
    • Assertion processing.
    • Module-qualified function calls expansion improved.
    • Module expansion calls goal expansion even at runtime.

  • Updates to builtins (there are a few more; these are the most relevant):

    • Added a prolog_flag to retrieve the version and patch.
    • current_predicate/1 in library(dynamic) now enumerates non-engine modules, prolog_sys:current_predicate/2 no longer exists.
    • exec/* bug fixed.
    • srandom/1 bug fixed.

  • Updates for C interface:
    • Fixed bugs in already existing code.
    • Added support for creation and traversing of Prolog data structures from C predicates.
    • Added support for raising Prolog exceptions from C predicates.
    • Preliminary support for calling Prolog from C.

  • Miscellaneous updates:
    • Installation made more robust.
    • Some pending documentation added.
    • 'ciao' script now adds (locally) to path the place where it has been installed, so that other programs can be located without being explicitly in the $PATH.
    • Loading programs is somewhat faster now.
    • Some improvement in printing path names in Windows.
Version 1.7 (2000/7/12, 19:1:20 CEST)
Development version following even 1.6 distribution.
Version 1.6 (2000/7/12, 18:55:50 CEST)
  • Source-level debugger in emacs, breakpts.
  • Emacs environment improved, added menus for Ciaopp and LPDoc.
  • Debugger embeddable in executables.
  • Standalone executables available for Unix-like operating systems.
  • Many improvements to emacs interface.
  • Menu-based interface to autodocumenter.
  • Threads now available in Win32.
  • Many improvements to threads.
  • Modular clp(R) / clp(Q).
  • Libraries implementing And-fair breadth-first and iterative deepening included.
  • Improved syntax for predicate abstractions.
  • Library of higher-order list predicates.
  • Better code expansion facilities (macros).
  • New delay predicates (when/2).
  • Compressed object code/executables on demand.
  • The size of atoms is now unbound.
  • Fast creation of new unique atoms.
  • Number of clauses/predicates essentially unbound.
  • Delayed goals with freeze restored.
  • Faster compilation and startup.
  • Much faster fast write/read.
  • Improved documentation.
  • Other new libraries.
  • Improved installation/deinstallation on all platforms.
  • Many improvements to autodocumenter.
  • Many bug fixes in libraries and engine.
Version 1.5 (1999/11/29, 16:16:23 MEST)
Development version following even 1.4 distribution.
Version 1.4 (1999/11/27, 19:0:0 MEST)
  • Documentation greatly improved.
  • Automatic (re)compilation of foreign files.
  • Concurrency primitives revamped; restored &Prolog-like multiengine capability.
  • Windows installation and overall operation greatly improved.
  • New version of O'Ciao class/object library, with improved performance.
  • Added support for "predicate abstractions" in call/N.
  • Implemented reexportation through reexport declarations.
  • Changed precedence of importations, last one is now higher.
  • Modules can now implicitly export all predicates.
  • Many minor bugs fixed.
Version 1.3 (1999/6/16, 17:5:58 MEST)
Development version following even 1.2 distribution.
Version 1.2 (1999/6/14, 16:54:55 MEST)
Temporary version distributed locally for extensive testing of reexportation and other 1.3 features.
Version 1.1 (1999/6/4, 13:30:37 MEST)
Development version following even 1.0 distribution.
Version 1.0 (1999/6/4, 13:27:42 MEST)
  • Added Tcl/Tk interface library to distribution.
  • Added push_prolog_flag/2 and pop_prolog_flag/1 declarations/builtins.
  • Filename processing in Windows improved.
  • Added redefining/1 declaration to avoid redefining warnings.
  • Changed syntax/1 declaration to use_package/1.
  • Added add_clause_trans/1 declaration.
  • Changed format of .itf files such that a '+' stands for all the standard imports from engine, which are included in c_itf source internally (from engine(builtin_exports)). Further changes in itf data handling, so that once an .itf file is read in a session, the file is cached and next time it is needed no access to the file system is required.
  • Many bugs fixed.
Version 0.9 (1999/3/10, 17:3:49 CET)
  • Test version before 1.0 release. Many bugs fixed.
Version 0.8 (1998/10/27, 13:12:36 MET)
  • Changed compiler so that only one pass is done, eliminated .dep files.
  • New concurrency primitives.
  • Changed assertion comment operator to #.
  • Implemented higher-order with call/N.
  • Integrated SQL-interface to external databases with persistent predicate concept.
  • First implementation of object oriented programming package.
  • Some bugs fixed.
Version 0.7 (1998/9/15, 12:12:33 MEST)
  • Improved debugger capabilities and made easier to use.
  • Simplified assertion format.
  • New arithmetic functions added, which complete all ISO functions.
  • Some bugs fixed.
Version 0.6 (1998/7/16, 21:12:7 MET DST)
  • Defining other path aliases (in addition to 'library') which can be loaded dynamically in executables is now possible.
  • Added the posibility to define multifile predicates in the shell.
  • Added the posibility to define dynamic predicates dynamically.
  • Added addmodule meta-argument type.
  • Implemented persistent data predicates.
  • New version of PiLLoW WWW library (XML, templates, etc.).
  • Ported active modules from “distributed Ciao” (independent development version of Ciao).
  • Implemented lazy loading in executables.
  • Modularized engine(builtin).
  • Some bugs fixed.
Version 0.5 (1998/3/23)
  • First Windows version.
  • Integrated debugger in toplevel.
  • Implemented DCG's as (Ciao-style) expansions.
  • Builtins renamed to match ISO-Prolog.
  • Made ISO the default syntax/package.
Version 0.4 (1998/2/24)
  • First version with the new Ciao emacs mode.
  • Full integration of concurrent engine and compiler/library.
  • Added new_declaration/1 directive.
  • Added modular syntax enhancements.
  • Shell script interpreter separated from toplevel shell.
  • Added new compilation warnings.
Version 0.3 (1997/8/20)
  • Ciao builtins modularized.
  • New prolog flags can be defined by libraries.
  • Standalone comand-line compiler available, with automatic "make".
  • Added assertions and regular types.
  • First version using the automatic documentation generator.
Version 0.2 (1997/4/16)
  • First module system implemented.
  • Implemented exceptions using catch/3 and throw/1.
  • Added functional & record syntax.
  • Added modular sentence, term, and goal translations.
  • Implemented attributed variables.
  • First CLPQ/CLPR implementation.
  • Added the posibility of linking external .so files.
  • Changes in syntax to allow P(X) and "string"||L.
  • Changed to be closer to ISO-Prolog.
  • Implemented Prolog shell scripts.
  • Implemented data predicates.
Version 0.1 (1997/2/13)
First fully integrated, standalone Ciao distribution. Based on integrating into an evolution of the &-Prolog engine/libraries/preprocessor [Her86,HG91] many functionalities from several previous independent development versions of Ciao [HC93,HC94,HCC95,Bue95,CLI95,HBdlBP95,HBC96,CHV96b,HBC99].