The Cecil Language: Specification & Rationale
Craig Chambers and the Cecil Group
Cecil is a purely object-oriented language intended to support rapid
construction of high-quality, extensible software. Cecil combines
multi-methods with a simple classless object model, a kind of dynamic
inheritance, modules, and optional static type checking. Instance
variables in Cecil are accessed solely through messages, allowing
instance variables to be replaced or overridden by methods and vice
versa. Cecil's predicate objects mechanism allows an object to be
classified automatically based on its run-time (mutable)
state. Cecil's static type system distinguishes between subtyping and
code inheritance, but Cecil enables these two graphs to be described
with a single set of declarations, streamlining the common case where
the two graphs are parallel. Cecil includes a fairly flexible form of
parameterization, including explicitly parameterized objects, types,
and methods, as well as implicitly parameterized methods related to
the polymorphic functions commonly found in functional languages. By
making type declarations optional, Cecil aims to allow mixing of and
migration between exploratory and production programming styles.
Cecil supports a module mechanism that enables independently-developed
subsystems to be encapsulated, allowing them to be type-checked and
reasoned about in isolation despite the presence of multi-methods and
subclassing. Objects can be extended externally with additional
methods and instance variables, often encapsulated in separate
modules, supporting a kind of role-based or subject-oriented
programming style.
This document mixes the specification of the language with
discussions of design issues and explanations of the reasoning that
led to various design decisions.
To get the PostScript file for the most recent version of the Cecil language
specification, click here.
Cecil/Vortex
Project