×

An overview of Ciao and its design philosophy. (English) Zbl 1244.68019

Summary: 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.

MSC:

68N17 Logic programming
68N15 Theory of programming languages
68N20 Theory of compilers and interpreters

Software:

COMET
Full Text: DOI

References:

[1] Hermenegildo, Principles and Practice of Constraint Programming pp 123– (1994) · doi:10.1007/3-540-58601-6_95
[2] DOI: 10.1016/0743-1066(92)90053-6 · doi:10.1016/0743-1066(92)90053-6
[3] DOI: 10.1016/0743-1066(93)00007-F · Zbl 0829.68023 · doi:10.1016/0743-1066(93)00007-F
[4] DOI: 10.1016/j.scico.2005.02.006 · Zbl 1076.68540 · doi:10.1016/j.scico.2005.02.006
[5] DOI: 10.1007/978-3-642-60085-2_7 · doi:10.1007/978-3-642-60085-2_7
[6] DOI: 10.1007/BF03037164 · doi:10.1007/BF03037164
[7] Hermenegildo, Proc. of the European Conference on Parallel Processing (EURO-PAR ’04) pp 21– (2004)
[8] Hermenegildo, International Conference on Computational Logic (CL ’00) pp 1345– (2000)
[9] DOI: 10.1007/BFb0002715 · doi:10.1007/BFb0002715
[10] Mera, Proc. of the International Conference on Logic Programming (ICLP ’09) pp 281– (2009)
[11] Mera, Proc. of the Symposium on Principles and Practice of Declarative Programming (PPDP ’08) pp 174– (2008)
[12] López-García, Journal of Symbolic Computation, Special Issue on Parallel Symbolic Computation 21 pp 715– (1996)
[13] López-García, Proc. of the Technical Communications of the International Conference on Logic Programming (ICLP) pp 104– (2010)
[14] López-García, New Generation Computing 28 pp 117– (2010) · Zbl 1192.68130 · doi:10.1007/s00354-008-0085-1
[15] DOI: 10.1007/s00165-007-0026-7 · Zbl 1121.68074 · doi:10.1007/s00165-007-0026-7
[16] DOI: 10.1145/319301.319317 · doi:10.1145/319301.319317
[17] DOI: 10.1109/52.7943 · doi:10.1109/52.7943
[18] Jim, Proc. of the USENIX Annual Technical Conference, General Track pp 275– (2002)
[19] Hudak, Haskell Special Issue, ACM Sigplan Notices 27 pp 1– (1992)
[20] Holzbaur, Proc. of the Symposium on Programming Languages: Implementations, Logics, and Programs (PLILP ’92) pp 260– (1992) · doi:10.1007/3-540-55844-6_141
[21] Carro, Proc. of the 1999 International Conference on Logic Programming pp 320– (1999)
[22] Hermenegildo, Parallelism and Implementation of Logic and Constraint Logic Programming pp 65– (1999)
[23] Hermenegildo, Proc. of the International Conference on Logic Programming (ICLP ’86) pp 25– (1986) · doi:10.1007/3-540-16492-8_62
[24] DOI: 10.1145/504083.504085 · doi:10.1145/504083.504085
[25] García de la Banda, ACM Transactions on Programming Languages and Systems 22 pp 269– (2000) · doi:10.1145/349214.349224
[26] García de la, Proc. of the Symposium on Programming Languages: Implementations, Logics, and Programs (PLILP ’96) pp 77– (1996) · doi:10.1007/3-540-61756-6_78
[27] Wolfram, A Semantics for {\(\lambda\)} Prolog (1992)
[28] Warren, Proc. of the International Conference on Logic Programming (ICLP ’88) pp 684– (1988)
[29] DOI: 10.1017/CBO9780511609886 · Zbl 1182.68039 · doi:10.1017/CBO9780511609886
[30] Debray, Proc. of the International Symposium on Logic Programming (ILPS ’97) (1997)
[31] DOI: 10.1145/93542.93564 · doi:10.1145/93542.93564
[32] DOI: 10.1145/161468.161472 · doi:10.1145/161468.161472
[33] Cousot, Proc. of the Symposium on Principles of Programming Languages (POPL ’77) pp 238– (1977)
[34] Vaucheret, Proc. of the International Static Analysis Symposium (SAS ’02) pp 102– (2002)
[35] Morales, Proc. of the Symposium on Principles and Practice of Declarative Programming (PPDP ’08) pp 32– (2008)
[36] DOI: 10.1007/978-3-540-24836-1_7 · doi:10.1007/978-3-540-24836-1_7
[37] Cabeza, Proc. of the International Static Analysis Symposium (SAS ’94) pp 297– (1994)
[38] DOI: 10.1007/978-3-540-24754-8_9 · doi:10.1007/978-3-540-24754-8_9
[39] DOI: 10.1145/316686.316688 · doi:10.1145/316686.316688
[40] Bueno, Proc. of the 3rd International WS on Automated Debugging (AADEBUG) pp 155– (1997)
[41] DOI: 10.1016/0743-1066(91)80001-T · Zbl 0717.68010 · doi:10.1016/0743-1066(91)80001-T
[42] DOI: 10.1145/1297081.1297091 · doi:10.1145/1297081.1297091
[43] DOI: 10.1007/s00354-008-0039-7 · Zbl 1169.68356 · doi:10.1007/s00354-008-0039-7
[44] Aït-Kaci, Proc. of the 1993 International Symposium on Logic Programming pp 52– (1993)
[45] DOI: 10.1007/978-3-540-24836-1_8 · doi:10.1007/978-3-540-24836-1_8
[46] Van Hentenryck, Constraint-Based Local Search (2005)
[47] DOI: 10.1145/227595.227597 · Zbl 0882.68050 · doi:10.1145/227595.227597
[48] Tobin-Hochstadt, Proc. of the Principles of Programming Languages (POPL) pp 395– (2008)
[49] Casas, Proc. of the 24th International Conference on Logic Programming (ICLP’08) pp 651– (2008)
[50] DOI: 10.1016/S0743-1066(96)00068-4 · Zbl 0877.68015 · doi:10.1016/S0743-1066(96)00068-4
[51] DOI: 10.1145/1452044.1452046 · doi:10.1145/1452044.1452046
[52] Schrijvers, Proc. of the International Conference on Logic Programming (ICLP ’08) pp 693– (2008)
[53] Casas, Proc. of the International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR ’07) pp 138– (2007)
[54] DOI: 10.1145/113445.113469 · doi:10.1145/113445.113469
[55] Carro, Compilers, Architecture, and Synthesis for Embedded Systems pp 271– (2006)
[56] Carro, Proc. of the International Conference on Logic Programming (ICLP ’93) pp 184– (1993)
[57] DOI: 10.1145/215465.215561 · doi:10.1145/215465.215561
[58] DOI: 10.1017/S147106840100117X · doi:10.1017/S147106840100117X
[59] Puebla, Proc. of the International Conference on Logic Programming (ICLP ’97) pp 93– (1997)
[60] Cabeza, Special Issue on Parallelism and Implementation of (C)LP Systems (2000)
[61] DOI: 10.1007/10722311_2 · doi:10.1007/10722311_2
[62] Cabeza, Proc. of the International Conference on Computational Logic (CL ’00) pp 131– (2000)
[63] DOI: 10.1007/10722311_3 · doi:10.1007/10722311_3
[64] Cabeza, Proc. of the COMPULOG-NET Workshop on Parallelism and Implementation Technologies (COMPULOG-NET ’95) (1995)
[65] Puebla, Proc. of the International Static Analysis Symposium (SAS ’06) pp 107– (2006)
[66] DOI: 10.1145/1328408.1328418 · doi:10.1145/1328408.1328418
[67] DOI: 10.1007/11916277_27 · Zbl 1165.68411 · doi:10.1007/11916277_27
[68] Olmedilla, Proc. of the Workshop on Logic Program Synthesis and Transformation (LOPSTR ’93) pp 177– (1993)
[69] DOI: 10.1145/1065887.1065892 · doi:10.1145/1065887.1065892
[70] Naish, Proc. of the International Conference on Logic Programming (ICLP ’89) pp 521– (1989)
[71] DOI: 10.1016/0743-1066(92)90035-2 · Zbl 0776.68032 · doi:10.1016/0743-1066(92)90035-2
[72] Muthukumar, Proc. of the International Conference on Logic Programming (ICLP ’91) pp 49– (1991)
[73] Muthukumar, Proc. of the International Conference on Logic Programming (ICLP ’90) pp 221– (1990)
[74] DOI: 10.1016/S0743-1066(98)10022-5 · Zbl 0927.68018 · doi:10.1016/S0743-1066(98)10022-5
This reference list is based on information provided by the publisher or from digital mathematics libraries. Its items are heuristically matched to zbMATH identifiers and may contain data conversion errors. In some cases that data have been complemented/enhanced by data from zbMATH Open. This attempts to reflect the references listed in the original paper as accurately as possible without claiming completeness or a perfect matching.