FJsc: (Extended) Featherweight Java smart compiler


FJsc is a prototype implementation for smartest (re)compilation of a superset of Featherweight Java
based on the type system defined in AnconaZucca04 and the technique developed in AnconaLagorio04.

The first time a source file is compiled,  FJsc generates a .tc file containing a minimal
set of type constraints needed for generating the corresponding .class file.
By inspecting .tc files, FJsc is able to trigger recompilation of only those  source files whose recompilation
would lead to a different .class file (note that this might happen for unmodified source files, since
the generated bytecode also depends on the other classes available in the context), thus avoiding useless recompilations.

Requirements

JDK 1.4 or higher is needed.
Script for generating .class file via JDK javac is provided only for UNIX/LINUX.

Download

FJsc.tgz

Installation

The following instructions are valid only for UNIX/LINUX users:
If you do not have UNIX/LINUX you will not be able to run the scripts, however if your JDK
version is >= 1.4 you will still be able to run the application (see below)

Usage


NOTE: the script fjsc allows generation of the .class files via the JDK compiler,
      since the application only performs typechecking and generates the corresponding type constraints.
      If you cannot run fjsc, you will need to invoke the JDK compiler "by hand"
      since recompilation of a file is triggered whenever the corresponding .class file is missing      

Conventions on files

Language specification

The language is a proper super-set of Featherweight Java. Please
refer to the papers by Igarashi, Pierce and Wadler for the specification of Featherweight Java.

Here below are listed all implemented extensions:

References

Davide Ancona and Elena Zucca. Principal typings for Java-like Languages. In POPL 2004 - The 31st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 306-317, ACM press, 2004.

Davide Ancona and Giovanni Lagorio. Stronger typings for separate compilation of Java-like languages. Journal of Object Technology, 3(6), 2004.

Atsushi Igarashi, Benjamin Pierce, and Philip Wadler. Featherweight Java: A minimal core calculus for Java and GJ. In ACM SIGPLAN Conference on Object Oriented Programming: Systems, Languages, and Applications (OOPSLA), October 1999. Full version in ACM Transactions on Programming Languages and Systems (TOPLAS), 23(3), May 2001.