The Ciao System

A New Generation, Multi-Paradigm Programming Language and Environment
(Including a State-of-the-Art ISO-Prolog)
The Computational logic, Languages,
Implementation, and Parallelism (CLIP) Lab
School of CS, T. U. of Madrid (UPM)
IMDEA Software Institute
Edited by:
Francisco Bueno
Manuel Carro
Remy Haemmerlé
Manuel Hermenegildo
Pedro López
Edison Mera
José F. Morales
Germán Puebla
The Ciao Documentation Series
Generated/Printed on: 2011/8/15
Technical Report CLIP 3/97-1.14#2
Version 1.14#2 (2011/8/12, 18:14:31 CEST)


Ciao is a public domain, next generation multi-paradigm programming environment with a unique set of features:

  • Ciao offers a complete Prolog system, supporting ISO-Prolog, but its novel modular design allows both restricting and extending the language. As a result, it allows working with fully declarative subsets of Prolog and also to extend these subsets (or ISO-Prolog) both syntactically and semantically. Most importantly, these restrictions and extensions can be activated separately on each program module so that several extensions can coexist in the same application for different modules.

  • Ciao also supports (through such extensions) programming with functions, higher-order (with predicate abstractions), constraints, and objects, as well as feature terms (records), persistence, several control rules (breadth-first search, iterative deepening, ...), concurrency (threads/engines), a good base for distributed execution (agents), and parallel execution. Libraries also support WWW programming, sockets, external interfaces (C, Java, TclTk, relational databases, etc.), etc.

  • Ciao offers support for programming in the large with a robust module/object system, module-based separate/incremental compilation (automatically --no need for makefiles), an assertion language for declaring (optional) program properties (including types and modes, but also determinacy, non-failure, cost, etc.), automatic static inference and static/dynamic checking of such assertions, etc.

  • Ciao also offers support for programming in the small producing small executables (including only those libraries actually used by the program) and support for writing scripts.

  • The Ciao programming environment includes a classical top-level and a rich emacs interface with an embeddable source-level debugger and a number of execution visualization tools.

  • The Ciao compiler (which can be run outside the top level shell) generates several forms of architecture-independent and stand-alone executables, which run with speed, efficiency, and executable size which are very competitive with other commercial and academic languages (including other Prolog/CLP systems). Library modules can be compiled into compact bytecode or C source files, and linked statically, dynamically, or autoloaded.

  • The novel modular design of Ciao enables, in addition to modular program development, effective global program analysis and static debugging and optimization via source to source program transformation. These tasks are performed by the Ciao preprocessor (ciaopp, distributed separately).

  • The Ciao programming environment also includes lpdoc, an automatic documentation generator for LP/CLP programs. It processes source files adorned with (Ciao) assertions and machine-readable comments and generates manuals in many formats including postscript, pdf, texinfo, info, HTML, man, etc. , as well as on-line help, ascii README files, entries for indices of manuals (info, WWW, ...), and maintains WWW distribution sites.

Ciao is distributed under the GNU Library General Public License (LGPL).

This documentation corresponds to version 1.14#2 (2011/8/12, 18:14:31 CEST).

Parts of this manual