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
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.
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
- 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
- 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
- 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
The distributions are best installed on a Unix system with a
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.