[Next] [Previous] [Top]
Cecil Project Overview
1 Language Design Research
We are studying several aspects of object-oriented languages with the aim of developing more flexible features and experimenting with how well they address practical programming problems. We are studying these features in the context of a new purely object-oriented language named Cecil. The principal areas that we are investigating are:
- More flexible method dispatching. Multi-method dispatching, such as that found in CLOS, generalizes both traditional receiver-based method dispatching and static function overloading by allowing method lookup to depend on the dynamic type of any subset of a message's arguments. Consequently, multi-methods are a promising approach to increasing the expressiveness of object-oriented programming. In Cecil, we are striving to develop and study simpler multi-method lookup semantics, mechanisms for achieving modularity and object encapsulation in the presence of multi-methods, and programming methodologies that support object-centered programming styles as well as multi-methods. An ECOOP '92 paper discusses some of these issues [Chambers 92]. An OOPSLA '94 paper builds on this work, describing a module design that enables components of an application to be isolated from one another and reasoned about independently, despite the presence of multi-methods [Chambers & Leavens 94].
- Implicit object classification. In Cecil we have extended the traditional inheritance mechanism to allow an object's inheritance (and consequently its implementation) to be computed automatically based on its run-time state. As this state changes, the object's inheritance can change, conferring new behavior on the object. This implicit, property-based inheritance mechanism complements the standard explicit, fixed inheritance of most object-oriented languages, and it leads to more direct solutions to some otherwise difficult problems in object-oriented modelling. An ECOOP '93 paper details this work [Chambers 93b].
- Static type systems. Much attention has been directed at developing static type systems for object-oriented languages. However, most of this work has taken place in the context of simplified theoretical languages, and little practical experience using advanced type systems has been gained. In Cecil we are studying practical type systems for object-oriented languages, incorporating some of the results of the theoretical studies as well as developing new approaches to typechecking multi-methods, property-based inheritance, parameterized types and methods, and mixed statically- and dynamically-typed code. Since Cecil is a practical language in which a large body of real code has been written, we can determine the extent to which the type system handles real programs and we can identify remaining obstacles to typechecking of object-oriented programs. An OOPSLA '94 paper describes a new type system and typechecking algorithm for multi-method-based languages in which subtyping can be distinct from code inheritance and in which some classes can be declared to be abstract [Chambers & Leavens 94].
To make programming more expressive, Cecil incorporates other important features, including closures, lazily-initialized instance variables, and a distinction between mutable and immutable variables. A rich library of standard data structures has been constructed.
As of Spring 1995, a first version of the Cecil language has been defined and documented [Chambers 93a], a second version has been defined (with documentation in progress), and roughly 60,000 lines of Cecil code has been written. We plan to make the language available for external use and experimentation soon. We also hope to explore using Cecil as a language for teaching programming language concepts.
Cecil Project Overview - 11 MAY 95
[Next] [Previous] [Top]