Ciao (programming language)


Ciao is a general-purpose programming language which supports logic, constraint, functional, higher-order, and object-oriented programming styles. Its main design objectives are high expressive power, extensibility, safety, reliability, and efficient execution.

Language Characteristics

Ciao provides a full Prolog system,
declarative subsets and extensions of Prolog, functional programming, higher-order, constraint programming, and objects, as well as feature terms
, persistence, several control rules, concurrency, distributed execution, and parallel execution. Libraries also support WWW programming, sockets, external interfaces, etc.

Ciao is built on a kernel with an extensible modular design which
allows both restricting and extending the language — it can be seen as a language building language. 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.

Developing Safe and Reliable Programs

Programming in the large in Ciao is supported via:


Ciao has also support for programming in the small: the compiler is
capable of producing small executables and the interpreter supports scripting.

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

The Ciao preprocessor supports static debugging and verification
assertion checking and optimization via source to source program
transformation. These tasks are performed by Ciaopp, distributed
separately).

Auto-Documentation

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

Portability and Efficiency

The Ciao compiler
generates several forms of architecture-independent and stand-alone
executables, which run with speed, efficiency and executable size
which are very competitive with other high-level languages in general
and in particular with commercial and academic Prolog/CLP
systems. Modules can be compiled into compact bytecode or C source
files, and linked statically, dynamically, or autoloaded.