MultiJava is an extension to the Java programming language that adds open classes and symmetric multiple dispatch. Open classes allow programmers to add methods to existing classes without editing those classes, or even having their source code. Multiple dispatch allows the code invoked by a method call to depend on the run-time type of all the arguments, instead of just the receiver. This is useful for event handlers and for binary methods, like equals in Java.

The MultiJava project provides mjc, a MultiJava compiler, that translates MultiJava programs to regular Java bytecode that will run on any standard Java Virtual Machine. We also provide mjdoc, for generating html documentation from javadoc comments. The project also includes a variant of MultiJava, called Relaxed MultiJava, that permits a greater range of program extension than MultiJava. Relaxed MultiJava provides this extensibility by replacing some compile-time errors with warnings and adding additional load-time checks.

The MultiJava project also serves as a framework for the tools of the Java Modeling Language, or JML. JML is a specification language for Java. JML supports specifications ranging from simple design-by-contract (think pre- and post-conditions) to full abstract modelling, which allows complete formal specification of behavior without exposing the implementation. JML tools built atop mjc include a specification type checker (jml), run-time assertion checker (jmlc), HTML documentation generator (jmldoc), and a facility for automatically generating JUnit test cases for classes from their specifications (jmlunit).


August 17, 2006

Version 1.3.2 Released!

The MultiJava project team is pleased to announce the release of version 1.3.2 of the MultiJava tool suite. This release adds support for the Universe type system. It also does not crash when used with JDK 1.5. However, it does not (yet) support the Java 5 source language.

December 14, 2004

Version 1.3.1 Released!

The MultiJava project team is pleased to announce the release of version 1.3.1 of the MultiJava tool suite. This is a bug fix release. The main fixes are to the compilation strategy for external generic functions. The fixes here cover two unanticipated cases: calls to external generic functions before static initialization is completed and loading of an external generic function in multiple concurrent threads.

December 12, 2004

We’re pleased to announce the availability of an updated paper on the MultiJava programming language. MultiJava: Design Rationale, Compiler Implementation, and Applications provides the most comprehensive and readable description of the language to date. The paper describes MultiJava’s open classes and multiple dispatch with a pair of motivating examples. It also describes the key techniques used in compiling MultiJava source code to run on the standard Java Virtual Machine. Finally, an extensive discussion of actual use cases for MultiJava provides insight into many useful applications of the language’s features.

August 16, 2004

Version 1.3 Released!

The MultiJava project team is pleased to announce the release of version 1.3 of the MultiJava tool suite. This release of MultiJava adds supports for the Universes type-system in MultiJava. The release also includes a few bug fixes and improved GUI support.

Old News

An archive of previous news items about the MultiJava project is available.

Site Technology

This web site is designed using XHTML 1.0 and CSS2. We highly recommend using the latest version of your favorite browser, not just for this site, but as a general guideline.

– The MultiJava Team

Page last modified Friday, August 18, 2006.