A certifying compiler for Java

This paper presents the initial results of a project to determine ifthe techniques of proof-carrying code and certifying compilers can be applied to programming languages of realistic size and complexity. The experiment shows that: (1) it is possible to implement a certifying native-code compiler for a large subset of the Java programming language; (2) the compiler is freely able to apply many standard local and global optimizations; and (3) the PCC binaries it produces are of reasonable size and can be rapidly checked for type safety by a small proof-checker. This paper also presents further evidence that PCC provides several advantages for compiler development. In particular, generating proofs of the target code helps to identify compiler bugs, many of which would have been difficult to discover by testing.

[1]  Robert W. Floyd,et al.  Assigning meaning to programs , 1967 .

[2]  F. Honsell,et al.  A Framework for De ning LogicsRobert Harper , 1987 .

[3]  Xavier Leroy,et al.  The ZINC experiment : an economical implementation of the ML language , 1990 .

[4]  F. Pfenning Logic programming in the LF logical framework , 1991 .

[5]  Furio Honsell,et al.  A framework for defining logics , 1993, JACM.

[6]  Robert W. Floyd,et al.  Assigning Meanings to Programs , 1993 .

[7]  Frank Yellin,et al.  The java virtual machine , 1996 .

[8]  George C. Necula,et al.  Safe kernel extensions without run-time checking , 1996, OSDI '96.

[9]  ScienceYale UniversityNew Haven An Overview of the Flint/ml Compiler , 1997 .

[10]  Manuel Blum,et al.  Software reliability via run-time result-checking , 1997, JACM.

[11]  George C. Necula,et al.  Efficient representation and validation of proofs , 1998, Proceedings. Thirteenth Annual IEEE Symposium on Logic in Computer Science (Cat. No.98CB36226).

[12]  George C. Necula,et al.  Safe, Untrusted Agents Using Proof-Carrying Code , 1998, Mobile Agents and Security.

[13]  George C. Necula,et al.  The design and implementation of a certifying compiler , 1998, PLDI.

[14]  G. Necula,et al.  Eecient Representation and Validation of Proofs , 1998 .

[15]  David Walker,et al.  Stack-based typed assembly language , 1998, Journal of Functional Programming.

[16]  George C. Necula,et al.  Compiling with proofs , 1998 .

[17]  Trevor Jim,et al.  Certifying Compilation and Run-Time Code Generation , 1999, High. Order Symb. Comput..

[18]  Dan Grossman,et al.  TALx86: A Realistic Typed Assembly Language∗ , 1999 .

[19]  MorrisettGreg,et al.  From system F to typed assembly language , 1999 .

[20]  Andrew W. Appel,et al.  A semantic model of types and machine instructions for proof-carrying code , 2000, POPL '00.