Cecil is a new purely object-oriented language designed here at UW which is serving as a vehicle for research into the design and implementation of advanced object-oriented programming languages. On the language design front, we are investigating a number of non-standard object and method dispatching models. Most notably, Cecil is based on multi-methods, methods that can be overloaded not only on the dynamic class of the receiver argument but symmetrically on the dynamic classes of any arguments. We are also investigating inheritance mechanisms where the system can dynamically compute the specific class for an object based on its run-time state ( predicate classes) and object models where methods, instance variables, and even new superclasses can be added to existing classes externally without modifying the original class definition ( extensible objects). On top of this expressive core language, we are investigating advanced static type systems, adapting and extending type theory research to work in a practical setting, while also supporting mixed static and dynamic typing. We also are studying module mechanisms that allow libraries to be developed and typechecked independently even in the presence of multi-methods and extensible objects.
Since languages will only develop a user base if they are implemented efficiently enough, we are striving to devise implementation techniques for object-oriented languages that will virtually eliminate the performance gap between heavily object-oriented languages and traditional procedural languages like C. We are focusing on whole-program analysis and optimization, combining static interprocedural analyses with dynamic profile information to drive optimizations such as inlining and procedure specialization. To balance execution speed-ups against compile-time costs, we are developing support for incremental reanalysis and recompilation and we are attempting to be very selective in where we apply expensive analyses and optimizations.
Our implementation research targets the Cecil language initially, but we are hoping to incorporate front-ends for other object-oriented languages soon. Our compiler is written in Cecil itself, thereby providing feedback to the language design research as well as an excellent test-bed for the implementation research. As the compiler becomes more effective, it runs faster.
Principal Investigator: Chambers