JaCo is an extensible compiler for the programming language Java. It implements the full language up to JDK 1.4. Generics and other new language features that will be introduced with the forthcoming JDK 1.5 are not yet supported.

The compiler is written in a slightly extended Java dialect supporting extensible algebraic datatypes with defaults. These datatypes are described in our corresponding ICFP paper. Since extensible algebraic types are compiled to regular Java classfiles, it is possible to run Jaco on any platform on which a Java Virtual Machine is available (at least JDK 1.2 is required).

JaCo is currently used in a couple of projects at EPFL and the School of Computer and Information Science of the University of South Australia.

Recently, we designed a new programming language Keris which adds an expressive module system to Java. A re-implementation of Jaco in Keris can be downloaded from the Keris homepage. You can also download the source code of the re-implementation. Unfortunately, I cannot publish the source code of Jaco on this webpage. If you are interested in browsing the code (or using Jaco as a basis for implementing a new language extension), I would be happy if you could contact me per e-mail.



Programming Language Abstractions for Extensible Software Components
Matthias Zenger
PhD Thesis No. 2930, EPFL, Switzerland, March 2004.
Extensible Algebraic Datatypes with Defaults
Matthias Zenger, Martin Odersky.
International Conference on Functional Programming, Firenze, September 2001.
Implementing Extensible Compilers
Matthias Zenger, Martin Odersky.
ECOOP 2001 Workshop on Multiparadigm Programming with Object-Oriented Languages, Budapest, June 2001.
Erweiterbare Übersetzer
Matthias Zenger.
Masters Thesis, University of Karlsruhe, August 1998.


There are currently four different distributions of JaCo available. One just contains the base compiler, the others implement various language extensions. The most mature language extension is implemented by Pico. Pico compiles Java with extensible algebraic types; it is, for instance, used in the Scala project for developing the various Scala tools (more than 70000 lines of code).

Please note, all distributions contain only binary files. Send me an e-mail if you want the source-code.

  • JaCo 1.3
    This is the base version of all Jaco distributions. It only contains a Java compiler which can be used as a replacement for Sun's javac.

  • PiCo 1.4
    JaCo is written with PiCo, an extension of itself. PiCo maps Java + extensible algebraic types to Java bytecodes. This distribution also contains the base Java compiler JaCo.

  • SJavaC 0.4
    SJavaC is a compiler for Synchronous Java, developed at the Computer Networking Laboratory at EPFL. The compiler supports already assert statements as specified for the forthcoming J2SDK 1.4. This software is joint work with David Cavin.

  • CJavaC 1.0
    CJavaC is a compiler for Java with Compound Types, proposed by Büchi and Weck at OOPSLA 1998. Details about the compilation of compound types can be found here. This project is joint work with Stephane Zermatten.

The distributions are best installed on a Unix system with a Java 2 Software Development Kit. Installation is simple. Just include the bin directory of the JaCo distribution in your path.



Please let me know if you have any suggestions or comments concerning Jaco or one of its extensions. You can also contact me, if you are interested in developing an extension of Java yourself.

Matthias Zenger

An extensible
compiler for the
Java Programming