An overview of Ciao and its design philosophy

Abstract We provide an overall description of the Ciao multiparadigm programming system 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 finding non-trivial bugs, verifying that programs comply with specifications, 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 separate compilation throughout. The environment also includes a powerful autodocumenter 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.

[1]  Snezana Lawrence October , 1855, The Hospital.

[2]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[3]  Manuel V. Hermenegildo,et al.  An Abstract Machine for Restricted AND-Parallel Execution of Logic Programs , 1986, ICLP.

[4]  Alan H. Karp,et al.  A comparison of 12 parallel FORTRAN dialects , 1988, IEEE Software.

[5]  Saumya K. Debray,et al.  On the Practicality of Global Flow Analysis of Logic Programs , 1988, ICLP/SLP.

[6]  Lee Naish,et al.  The NU-Prolog Debugging Environment , 1989, ICLP.

[7]  R. Costa,et al.  YAP user''s manual , 1989 .

[8]  Manuel V. Hermenegildo,et al.  The DCG, UDG, and MEL Methods for Automatic Compile-time Parallelization of Logic Programs for Independent And-parallelism , 1990, ICLP.

[9]  Saumya K. Debray,et al.  Task granularity analysis in logic programs , 1990, PLDI '90.

[10]  Maurice Bruynooghe,et al.  A Practical Framework for the Abstract Interpretation of Logic Programs , 1991, J. Log. Program..

[11]  Manuel V. Hermenegildo,et al.  Combined Determination of Sharing and Freeness of Program Variables through Abstract Interpretation , 1991, ICLP.

[12]  Christian Holzbaur,et al.  Metastructures versus Attributed Variables in the Context of Extensible Unification , 1992, PLILP.

[13]  Manuel V. Hermenegildo,et al.  Compile-Time Derivation of Variable Dependency Using Abstract Interpretation , 1992, J. Log. Program..

[14]  Saumya K. Debray,et al.  Global Flow Analysis as a Practical Compilation Tool , 1992, J. Log. Program..

[15]  Simon L. Peyton Jones,et al.  Report on the programming language Haskell: a non-strict, purely functional language version 1.2 , 1992, SIGP.

[16]  Manuel V. Hermenegildo,et al.  Some Paradigms for Visualizing Parallel Execution of Logic Programs , 1993, ICLP.

[17]  Hassan Aït-Kaci An introduction to LIFE: Programming with Logic, Inheritance, Functions, and Equations , 1993, ILPS.

[18]  Manuel V. Hermenegildo,et al.  Automatic Exploitation of Non-Determinate Independent And-Parallelism in the Basic Andorra Model , 1993, LOPSTR.

[19]  Saumya K. Debray,et al.  Cost analysis of logic programs , 1993, TOPL.

[20]  Mats Carlsson,et al.  SICStus Prolog User''s Manual , 1993 .

[21]  David A. Wolfram,et al.  A Semantics for lambda-Prolog , 1994, Theor. Comput. Sci..

[22]  Manuel V. Hermenegildo,et al.  Some methodological issues in the design of CIAO, a generic, parallel concurrent constraint system , 1994 .

[23]  Manuel V. Hermenegildo,et al.  Extracting Non-Strict Independent And-Parallelism Using Sharing and Freeness Information , 1994, SAS.

[24]  Thom W. Frühwirth,et al.  Constraint Handling Rules , 2009, Constraint Programming.

[25]  Manuel V. Hermenegildo Some Methodological Issues in the Design of CIAO, a Generic, Parallel Concurrent Constraint Logic Programming System , 1994, PPCP.

[26]  Francesca Rossi,et al.  Strict and Nonstrict Independent And-Parallelism in Logic Programs: Correctness, Efficiency, and Compile-Time Conditions , 1995, J. Log. Program..

[27]  Arabellastrasse,et al.  Constraint Handling Rules ? , 1995 .

[28]  Manuel V. Hermenegildo,et al.  Implementation of multiple specialization in logic programs , 1995, PEPM '95.

[29]  John P. Gallagher,et al.  Approximating Constraint Logic Programs Using Polymorphic Types and Regular Descriptions , 1995, PLILP.

[30]  David Scott Warren,et al.  Tabled evaluation with delaying for general logic programs , 1996, JACM.

[31]  K. A. Ross,et al.  Tabled Evaluation with Delaying for General Logic Programs , 1996 .

[32]  Manuel V. Hermenegildo,et al.  The CIAO Multi-Dialect Compiler and System: An Experimentation Workbench for Future (C)LP Systems , 1995, APPIA-GULP-PRODE.

[33]  Manuel V. Hermenegildo,et al.  Towards Independent And-Parallelism in CLP , 1996, PLILP.

[34]  Zoltan Somogyi,et al.  The Execution Algorithm of Mercury, an Efficient Purely Declarative Logic Programming Language , 1996, J. Log. Program..

[35]  Manuel V. Hermenegildo,et al.  Implementing Distributed Concurrent Constraint Execution in the CIAO System , 1996, APPIA-GULP-PRODE.

[36]  Saumya K. Debray,et al.  A Methodology for Granularity-Based Control of Parallelism in Logic Programs , 1996, J. Symb. Comput..

[37]  Wlodzimierz Drabent,et al.  On the Role of Semantic Approximations on Validation and Diagnosis of Contraint Logic Programs , 1997, AADEBUG.

[38]  Saumya K. Debray,et al.  Lower Bound Cost Estimation for Logic Programs , 1997, ILPS.

[39]  Peter J. Stuckey,et al.  Optimization of Logic Programs with Dynamic Scheduling , 1997, ICLP.

[40]  Jan Maluszy¿ski,et al.  Lower Bound Cost Estimation for Logic Programs , 1997 .

[41]  Manuel V. Hermenegildo,et al.  Automatic Parallelization of Irregular and Pointer-Based Computations: Perspectives from Logic and Constraint Programming , 1997, Euro-Par.

[42]  Manuel V. Hermenegildo,et al.  Parallelism and implementation of logic and constraint logic programming , 1999 .

[43]  Manuel V. Hermenegildo,et al.  Using Global Analysis, Partial Specifications, and an Extensible Assertion Language for Program Validation and Debugging , 1999, The Logic Programming Paradigm.

[44]  Manuel V. Hermenegildo,et al.  Automatic Compile-Time Parallelization of Logic Programs for Restricted, Goal Level, Independent and Parallelism , 1999, J. Log. Program..

[45]  Manuel V. Hermenegildo,et al.  Concurrency in Prolog Using Threads and a Shared Database , 1999, ICLP.

[46]  Manuel V. Hermenegildo,et al.  Effectivness of abstract interpretation in automatic parallelization: a case study in logic programming , 1999, TOPL.

[47]  Leslie Lamport,et al.  Should your specification language be typed , 1999, TOPL.

[48]  Victor W. Marek,et al.  The Logic Programming Paradigm: A 25-Year Perspective , 2011 .

[49]  Manuel V. Hermenegildo,et al.  The Ciao Modular, Standalone Compiler and Its Generic Program Processing Library , 1999, Parallelism and Implementation Technology for Logic Programming@ICLP.

[50]  Manuel V. Hermenegildo,et al.  A Generic Processor for Program Validation and Debugging , 2000, Analysis and Visualization Tools for Constraint Programming.

[51]  Kim Marriott,et al.  Independence in CLP languages , 2000, TOPL.

[52]  Manuel V. Hermenegildo,et al.  An Assertion Language for Constraint Logic Programs , 2000, Analysis and Visualization Tools for Constraint Programming.

[53]  Manuel V. Hermenegildo,et al.  A Documentation Generator for (C)LP Systems , 2000, Computational Logic.

[54]  Manuel V. Hermenegildo,et al.  A New Module System for Prolog , 2000, Computational Logic.

[55]  Manuel V. Hermenegildo,et al.  Distributed WWW Programming using (Ciao-)Prolog and the PiLLoW library , 2001, Theory Pract. Log. Program..

[56]  Mats Carlsson,et al.  Parallel execution of prolog programs: a survey , 2001, TOPL.

[57]  James Cheney,et al.  Cyclone: A Safe Dialect of C , 2002, USENIX Annual Technical Conference, General Track.

[58]  Francisco Bueno,et al.  More Precise Yet Efficient Type Inference for Logic Programs , 2002, SAS.

[59]  M. Hanus,et al.  Curry: An Integrated Functional Logic Language , 2003 .

[60]  M. Hermenegildo,et al.  A Generic Persistence Model for (C)LP Systems (and Two Useful Implementations) , 2004, PADL.

[61]  Manuel V. Hermenegildo,et al.  Multivariant Non-failure Analysis via Standard Abstract Interpretation , 2004, FLOPS.

[62]  Manuel V. Hermenegildo,et al.  Improved Compilation of Prolog to C Using Moded Types and Determinism Information , 2004, PADL.

[63]  Robert Cartwright,et al.  Soft typing , 2004, SIGP.

[64]  Manuel V. Hermenegildo,et al.  Some Techniques for Automated, Resource-Aware Distributed and Mobile Computing in a Multi-paradigm Programming System , 2004, Euro-Par.

[65]  Manuel V. Hermenegildo,et al.  Integrated program debugging, verification, and optimization using abstract interpretation (and the Ciao system preprocessor) , 2005, Sci. Comput. Program..

[66]  George C. Necula,et al.  CCured: type-safe retrofitting of legacy software , 2005, TOPL.

[67]  Enrico Pontelli,et al.  Integrating an Answer Set Solver into Prolog: ASP-PROLOG , 2005, LPNMR.

[68]  Manuel V. Hermenegildo,et al.  High-level languages for small devices: a case study , 2006, CASES '06.

[69]  Manuel V. Hermenegildo,et al.  A Syntactic Approach to Combining Functional Notation, Lazy Evaluation, and Higher-Order in LP Systems , 2006, FLOPS.

[70]  Manuel V. Hermenegildo Why Ciao? An overview of the ciao system's design philosophy , 2006 .

[71]  Manuel V. Hermenegildo,et al.  Abstract Interpretation with Specialized Definitions , 2006, SAS.

[72]  Péter Szeredi,et al.  Improving the ISO Prolog Standard by Analyzing Compliance Test Results , 2006, ICLP.

[73]  Manuel V. Hermenegildo,et al.  Context-Sensitive Multivariant Assertion Checking in Modular Programs , 2006, LPAR.

[74]  Manuel V. Hermenegildo,et al.  Annotation Algorithms for Unrestricted Independent And-Parallelism in Logic Programs , 2008, LOPSTR.

[75]  Gary T. Leavens,et al.  Specification and verification challenges for sequential object-oriented programs , 2007, Formal Aspects of Computing.

[76]  Jorge A. Navas,et al.  User-Definable Resource Bounds Analysis for Logic Programs , 2007, ICLP.

[77]  Davide Ancona,et al.  RPython: a step towards reconciling dynamically and statically typed OO languages , 2007, DLS '07.

[78]  Sam Tobin-Hochstadt,et al.  The design and implementation of typed scheme , 2008, POPL '08.

[79]  Manuel V. Hermenegildo,et al.  Abstraction-Carrying Code: a Model for Mobile Code Safety , 2008, New Generation Computing.

[80]  Manuel V. Hermenegildo,et al.  Towards execution time estimation in abstract machine-based languages , 2008, PPDP.

[81]  Manuel V. Hermenegildo,et al.  Comparing tag scheme variations using an abstract machine generator , 2008, PPDP '08.

[82]  Manuel V. Hermenegildo,et al.  A High-Level Implementation of Non-deterministic, Unrestricted, Independent And-Parallelism , 2008, ICLP.

[83]  Bart Demoen,et al.  Towards Typed Prolog , 2008, ICLP.

[84]  Manuel V. Hermenegildo,et al.  A practical type analysis for verification of modular prolog programs , 2008, PEPM '08.

[85]  Peter J. Stuckey,et al.  Efficient constraint propagation engines , 2006, TOPL.

[86]  Manuel V. Hermenegildo,et al.  Automatic Inference of Determinacy and Mutual Exclusion for Logic Programs Using Mode and Type Analyses , 2008, New Generation Computing.

[87]  Manuel V. Hermenegildo,et al.  Integrating Software Testing and Run-Time Checking in an Assertion Verification Framework , 2009, ICLP.

[88]  Elvira Albert,et al.  On the Generation of Test Data for Prolog by Partial Evaluation , 2009, ArXiv.

[89]  Manuel V. Hermenegildo,et al.  The &-Prolog system: Exploiting independent and-parallelism , 1991, New Generation Computing.

[90]  Francisco Bueno Carrillo A Framework for Verification and Debugging of Resource Usage Properties , 2010, ICLP 2010.

[91]  Reinhard Wilhelm,et al.  Logic Programming Languages , 2010 .

[92]  Manuel V. Hermenegildo,et al.  The ciao system , 2013 .

[93]  Schloss Dagstuhl , .