The Ciao programming language
Ciao is a programming language that builds up from a logic-based simple kernel, and is designed to be extensible and modular. Its supports:
- constraint logic programming (and, in particular, Prolog),
- different levels of modularity (from small to large scale):
- modules as (analysis-friendly) compilation units
- bundles as collections of modules,
- packages as modules implementing language extensions (syntactic definitions, compilation options, compiler plugins),
- assertions (as a homogeneous framework that allows static and dynamic verification to work cooperatively in a unified way),
- multiparadigm constructs (meta-programming, higher-order, mutables, concurrency, functions, etc.) and interfacing with foreign code.
The system implements some advanced features such as separate and incremental compilation, global program analysis and static debugging and optimization (via source to source program transformation, CiaoPP preprocessor), a build automation system, documentation generator, debugger, and (Emacs-based) development environment.