The goal of this research is to improve the design of statically-typed object-oriented programming languages, especially with regard to issues of programming in the medium to large scale. Research will focus on:
1. Module systems for object-oriented languages: Modules provide support for organizing code, abstraction barriers to hide information, and support for separate compilation. However, current module systems lack the flexibility to capture a number of common ways in which to design programs in object-oriented languages. 2. Simultaneous modification of mutually recursive types and classes: This research will develop ways to support incremental modification of mutually recursive types while preserving type safety and important relations between types and classes. 3. Typed intermediate languages and virtual machines for object-oriented languages: Run-time systems like the target virtual machines for Java and C# lack support for advanced object-oriented languages and module systems. Exploring compilation techniques and virtual machines to support these features is necessary to ensure their eventual adoption. This research will continue using LOOM as a test bed for further investigations into the best way to support features of object-oriented languages, while also investigating how to use the best of these ideas to enhance real languages like Java and its successors.