The Brew Project
Object-oriented languages provide abstraction mechanisms that help
with structuring large software. Many commercial programs, such as
desktop applications or games, are produced in an OO style, either in
an OO language or by hand-coding OO techniques in a language such as
C. However, as our analysis of OO design patterns shows, the
abstraction mechanisms provided by the most widely used OO languages
C++ and Java are still not sufficient. An OO programming style
is the appropriate language mechanism for structuring data and if the
software is expected to evolve by refining data representations.
However, OO languages do not provide adequate support for introducing
new abstractions retroactively or if the software evolves by adding
functionality to a stable data structure. Many OO design patterns can
be considered work-arounds for applying an OO style to problems that
are more adequately solved in a different, e.g., a functional,
programming style.
We have designed an extension of C++ with interfaces (then called
signatures) and structural subtyping, which allow adding
abstractions retroactively, and an extension of Java with structural
subtyping. Our C++ extension has been part of the GCC
distribution until Version 2.95. We implemented structural
subtyping for Java as an extension of the Sun JDK 1.1.5 compiler.
Currently, we are working on designing the language Brew as an
extension of Java with an object model based on our analysis of design
patterns and on implementing a compiler for the language in Brew.
Until Brew and the Brew compiler are sufficiently far developed, we
are framing our research results in the context of Java. For evolving
software by adding functionality to a stable data structure, it would
be desirable to have support for multimethods in the language. We
developed an extension of Java with retroactive abstraction and
multimethods, called Half & Half, and are currently working on
implementing it. We have shown that multimethods together
with a closure mechanism allow programming in a functional style
similar to that in ML.
When developing OO software, it is necessary to ensure that the
methods on an object are called in the correct order. We have
designed language support for specifying the object protocols in class
and interface declarations in Java. This language support allows the
compiler to verify that the class protocol satisfies the interface
protocol and to generate debugging code for monitoring the order of
method calls at run time. We are implementing support for protocols
as an extension of the Sun JDK compiler. We are also working on
language support for mobility. Mobile object libraries for Java, such
as the Aglets library do not allow migrating the execution state of
methods executing in an agent. We have developed a translation
mechanism and mobile threads that allow a multithreaded agent to
migrate with all of its execution state. We implemented the
translator as a preprocessor in the Brew compiler. We are using these
multithreaded agents for scheduling scientific applications on a
desktop grid, see the Organic Grid
web page.
Collaborators
-
Konstantin Läufer,
Dept. of Computer Science, Loyola University Chicago
- Vincent F. Russo
-
Michal Young,
Dept. of Computer and Info. Sci., University of Oregon
Former Students
Publications
-
Half & Half: Multiple Dispatch and Retroactive Abstraction
for Java
G. Baumgartner, M. Jansche, K. Läufer.
Technical Report No. OSU-CISRC-5/01-TR08,
Dept. of Computer and Information Science, The Ohio State University,
March 2002.
-
Support for Functional Programming in Brew
G. Baumgartner, M. Jansche, C.D. Peisert.
In Kei Davis, Yannis Smaragdakis, Jörg Striegnitz: Proceedings
of the Multiparadigm Programming with Object-Oriented
Languages, 1st International Workshop (MPOOL '01),
Budapest, Hungary, 18 June 2001, Publication Series of the John
von Neumann Institute for Computing, Vol. 7, pp. 111-125.
-
Reliability Through Strong Mobility
X. Wang, J. Hallstrom, G. Baumgartner.
In Proceedings of the 7th ECOOP Workshop on Mobile
Object Systems: Development of Robust and High Confidence
Agent Applications (MOS '01), Budapest, Hungary,
18 June 2001, pp. 1-13.
-
Compiler and Tool Support for Debugging Object Protocols
S. Butkevich, M. Renedo, G. Baumgartner, M. Young.
In Proceedings of the 8th International Symposium on the
Foundations of Software Engineering (FSE-8/ACM SIGSoft 2000),
San Diego, California, 6-10 November 2000, pp. 50-59.
-
Safe Structural Conformance for Java
K. Läufer, G. Baumgartner, V.F. Russo.
Technical Report OSU-CISRC-6/98-TR20, Dept. of Computer and
Information Science, The Ohio State University, June 1998.
An improved version appeared in
Computer Journal, Vol. 43, No. 6, 2001, pp. 469-481.
-
On the Interaction of Object-Oriented
Design Patterns and Programming Languages
G. Baumgartner, K. Läufer, V.F. Russo.
Technical Report CSD-TR-96-020, Dept. of Computer Sciences,
Purdue University, February 1996.
-
Implementing Signatures for C++
G. Baumgartner, V.F. Russo.
ACM Transactions on Programming Languages and Systems
(TOPLAS), Vol. 19, No. 1, January 1997, pp. 153-187.
-
Signatures: A Language Extension for Improving
Type Abstraction and Subtype Polymorphism in C++
G. Baumgartner, V.F. Russo.
Technical Report CSD-TR-95-051, Dept. of Computer Sciences,
Purdue University, August 1995.
A slightly improved version of this paper appeared in
Software - Practice & Experience, Vol. 25, No. 8,
pp. 863-889, August 1995.
- Implementing Signatures for C++
G. Baumgartner, V.F. Russo.
In Proceedings of the 1994 USENIX C++ Conference,
11-14 April 1994, Cambridge, Massachusetts, USENIX Association,
pp. 37-56.
Software
Gerald Baumgartner
Last modified: Sun Feb 13 18:27:01 CST 2005