Research Assistant: Gerald Baumgartner

This research focuses on designing module constructs that incorporate the best features found among module constructs of object-oriented languages and of functional languages. In particular, we plan to incorporate parametric polymorphism, subtype polymorphism, overloading, type abstraction, and compile-time type inference in a semantically clean manner.
The main use of module constructs is to offer mechanisms to help structure large programs. However, the semantics of the module constructs found in object-oriented languages are often not very precisely defined. For example, the use of inheritance as a substitute for subtype polymorphism in many object-oriented languages either leads to an unsound or a too inflexible type system. In addition, it is felt that adding module constructs found in functional languages to object-oriented languages would increase their expressiveness, and vice versa.
We are trying to find a compromise between highly expressive module
constructs and an efficient implementation on the one hand and a
compromise between full type inference as in functional languages
and requiring all variables to be declared on the other hand.
Currently, we have an implementation of a type abstraction
construct for C++ that allows us to decouple subtyping and
inheritance, and we are investigating an extension of ML with
subtyping and inheritance.