An overview of Ciao and its design philosophy

Hermenegildo, Manuel V. and Bueno Carrillo, Francisco and Carro Liñares, Manuel and López García, Pedro and Mera, E. and Morales Caballero, José Francisco and Puebla Sánchez, Alvaro Germán (2012). An overview of Ciao and its design philosophy. "Theory and practice of logic programming", v. 12 (n. 1-2); pp. 219-252. ISSN 1471-0684.


Title: An overview of Ciao and its design philosophy
  • Hermenegildo, Manuel V.
  • Bueno Carrillo, Francisco
  • Carro Liñares, Manuel
  • López García, Pedro
  • Mera, E.
  • Morales Caballero, José Francisco
  • Puebla Sánchez, Alvaro Germán
Item Type: Article
Título de Revista/Publicación: Theory and practice of logic programming
Date: January 2012
ISSN: 1471-0684
Volume: 12
Freetext Keywords: Prolog, Logic programming System, Assertions, Veriflcation, Extensible languages,Sistemas de programación lógica, lenguajes extensibles
Faculty: Facultad de Informática (UPM)
Department: Inteligencia Artificial
Creative Commons Licenses: Recognition - No derivative works - Non commercial

Full text

PDF - Requires a PDF viewer, such as GSview, Xpdf or Adobe Acrobat Reader
Download (1MB) | Preview


We provide an overall description of the Ciao multiparadigm programming sy stem emphasizing some of the novel aspects and motivations behind its design and implementation. An important aspect of Ciao is that, in addition to supporting logic programming (and, in particular, Prolog), it provides the programmer with a large number of useful features from different programming paradigms and styles, and that the use of each of these features (including those of Prolog) can be turned on and off at will for each program module. Thus, a given module may be using, e.g., higher order functions and constraints, while another module may be using assignment, predicates, Prolog meta-programming, and concurrency. Furthermore, the language is designed to be extensible in a simple and modular way. Another important aspect of Ciao is its programming environment, which provides a powerful preprocessor (with an associated assertion language) capable of statically flnding non-trivial bugs, verifying that programs comply with speciflcations, and performing many types of optimizations (including automatic parallelization). Such optimizations produce code that is highly competitive with other dynamic languages or, with the (experimental) optimizing compiler, even that of static languages, all while retaining the flexibility and interactive development of a dynamic language. This compilation architecture supports modularity and sepárate compilation throughout. The environment also includes a powerful auto-documenter and a unit testing framework, both closely integrated with the assertion system. The paper provides an informal overview of the language and program development environment. It aims at illustrating the design philosophy rather than at being exhaustive, which would be impossible in a single journal paper, pointing instead to previous Ciao literature.

More information

Item ID: 4738
DC Identifier:
OAI Identifier:
DOI: 10.1017/S1471068411000457
Official URL:
Deposited by: Biblioteca Facultad de Informatica
Deposited on: 17 Nov 2012 07:52
Last Modified: 20 Apr 2016 13:50
  • Logo InvestigaM (UPM)
  • Logo GEOUP4
  • Logo Open Access
  • Open Access
  • Logo Sherpa/Romeo
    Check whether the anglo-saxon journal in which you have published an article allows you to also publish it under open access.
  • Logo Dulcinea
    Check whether the spanish journal in which you have published an article allows you to also publish it under open access.
  • Logo de Recolecta
  • Logo del Observatorio I+D+i UPM
  • Logo de OpenCourseWare UPM