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.
We are currently working on implementing protocols and our extension
of Java with multimethods in the OpenJDK compiler to serve as a platform
for future language design research.
Collaborators
Former Students
-
Sergey Butkevich, Rentaissance Technologies
-
Arjav J. Chakravarti (PhD, June 2004),
Dasra
- Ronnie Gilkey (MS, May 2012)
-
Jason O. Hallstrom, School of Computing, Clemson University
-
Martin Jansche (MS, March 2004), Symptotic
-
Brian Larkins,
Dept. of Computer Science, Coastal Carolina University
-
Pei Lu, Microsoft
-
Christopher D. Peisert, Bellagio
-
Marco Renedo, Bank of America
-
Lakshmi (Sindhu) Rimmalapudi (MS, December 2008),
Active Networks
- Darshat Shah, Microsoft
-
Archana Vallabhaneni (MS, December 2012),
Revolverdocs/MightyJunn Productions
-
Xiaojin Wang (MS, December 2001),
Amazon.com
Software
Publications
2002
2001
-
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.
2000
- Safe Structural Conformance for Java
K. Läufer, G. Baumgartner, V.F. Russo.
Computer Journal, Vol. 43, No. 6, 2000, pp. 469-481.
Also available as Technical Report
OSU-CISRC-6/98-TR20,
Dept. of Computer and Information Science, The Ohio State University,
June 1998.
-
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.
- Compiler and Tool Support for Debugging Object Protocols
S. Butkevich, M. Renedo, G. Baumgartner, M. Young.
Technical Report OSU-CISRC-3/00-TR10, Dept. of Computer and
Information Science, The Ohio State University, March 2000.
An improved version
appears 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.
1998
-
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.
1997
-
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.
1996
1995
- Signatures: A Language Extension for Improving
Type Abstraction and Subtype Polymorphism in C++
G. Baumgartner, V.F. Russo.
Software - Practice & Experience, Vol. 25, No. 8,
pp. 863-889, August 1995.
Also available as Technical Report
CSD-TR-95-051,
Dept. of Computer Sciences, Purdue University, August 1995.
-
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.
- Implementing Signatures for C++
G. Baumgartner, V.F. Russo.
Technical Report CSD-TR-95-025, Dept. of Computer Sciences,
Purdue University, August 1995.
An improved version
appears in
ACM Transactions on Programming Languages and Systems
(TOPLAS), Vol. 19, No. 1, January 1997, pp. 153-187.
1994
- Signatures: A C++ Extension for
Type Abstraction and Subtype Polymorphism
G. Baumgartner, V.F. Russo.
Technical Report CSD-TR-93-059, Dept. of Computer Sciences,
Purdue University, December 1994.
Superseded by Technical Report
CSD-TR-95-051,
Dept. of Computer Sciences, Purdue University, 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.
Funding
- The Ohio State University, 1998 - 1999.