Claire (programming language)
From Seo Wiki - Search Engine Optimization and Programming Languages
|Usual file extensions|
|Paradigm||multi-paradigm: functional, object-oriented (class-based), rule processing, reflective|
|Designed by||Yves Caseau|
|Stable release||3.3.46 (2009-2-17)|
|Typing discipline||strong, both static and dynamic|
|Major implementations||Claire (reference implementation), WebClaire|
|Influenced by||Smalltalk, SETL, OPS5, Lisp, ML, C, LORE, LAURE|
|License||Permissive free software license|
Claire is a high-level functional and object-oriented programming language with rule processing capabilities. It was designed by Yves Caseau at Bouygues' e-Lab research laboratory, and received its final definition in 2004.
- a simple object system with parametric classes and methods
- polymorphic and parametric functional programming
- production rules triggered by events
- versioned snapshots of the state of the whole system or any part of it, supporting rollback and easy exploration of search spaces
- explicit relations between entities; for example, two entities might be declared inverses of one another
- first-class sets with convenient syntax for set-based programming
- an expressive set-based type system allowing both second-order static and dynamic typing
Claire's reference implementation, consisting of an interpreter and compiler, was fully open-sourced with the release of version 3.3.46 in February 2009. Another implementation, WebClaire, is commercially supported.
Claire is a general-purpose language, best suited to applications requiring sophisticated data modeling, rule processing or problem solving. WebClaire adds extensions for fuller integration with the operating system and for programming web applications.
Though Claire can be used for complete projects, it is designed to integrate smoothly with C++ or Java: Claire programs may include C++ or Java code, and Claire code may be translated into C++ or Java for use in C++ or Java projects.
The key set of features that distinguishes Claire from other programming languages has been dictated by experience in solving complex optimization problems. Two features not found in other mixed functional/object-oriented languages, such as OCaml, Scala and F#, are versioning and production rules.
Versions can be viewed as a stack of snapshots of some part of the system, which can be made as large (for expressiveness) or small (for efficiency) as necessary. Creation and roll-back of versions permit backtracking, as found in logic programming, though Claire's backtracking may cover any user-defined structure rather than just a set of logic variables.
A production rule in Claire is composed of an event, a condition and a response to be evaluated if the condition is satisfied. An event may be any change in an object's slot or the instantiation of a class, and a response may itself set off further events. Such production rules are especially useful in describing reactive algorithms, such as those for constraint propagation.
Claire was created as a successor to LAURE, an expressive but complex language designed by Caseau in the 1980s that combined many paradigms. Claire was intended to be both easier to learn than its predecessor and to impose no performance overhead relative to C++; it is thus a much smaller language, omitting features such as constraints and deductive rules, and is closer to C in spirit and syntax. Its main users in industry have been the Bouygues and Thales groups.
A function to compute the nth Fibonacci number:
fib(n:integer) : integer -> (if (n < 2) 1 else fib(n - 1) + fib(n - 2))
- The latest version of Claire and its documentation are available from the "claireprogramminglanguage" Yahoo! group, which requires free registration.
- Documentation for Claire and WebClaire.
- "Introduction to the CLAIRE Programming Language Version 3.2" by Yves Caseau and François Laburthe.
- "CLAIRE: Combining Sets, Search and Rules to Better Express Algorithms" by Yves Caseau, François-Xavier Josset and François Laburthe (2002). A 26-page overview, intended for an academic audience, with benchmarks.