Type elaboration and subtype completion for Java bytecode

Java source code is strongly typed, but the translation from Java source to bytecode omits much of the type information originally contained within methods. Type elaboration is a technique for reconstructing strongly typed programs from incompletely typed bytecode by inferring types for local variables. There are situations where, technically, there are not enough types in the original type hierarchy to type a bytecode program. Subtype completion is a technique for adding necessary types to an arbitrary type hierarchy to make type elaboration possible for all verifiable Java bytecode. Type elaboration with subtype completion has been implemented as part of the Marmot Java compiler.

[1]  Erik Ruf,et al.  Marmot: an optimizing compiler for Java , 2000 .

[2]  John C. Mitchell,et al.  Lower bounds on type inference with subtypes , 1995, POPL '95.

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

[4]  Jakob Rehof,et al.  Type elaboration and subtype completion for Java bytecode , 2001 .

[5]  Erik Ruf,et al.  Marmot: an optimizing compiler for Java , 2000, Softw. Pract. Exp..

[6]  Karl Crary,et al.  From system F to typed assembly language , 1999, TOPL.

[7]  Marcin Benke Efficient Type Reconstruction in the Presence of Inheritance , 1993, MFCS.

[8]  Brian A. Davey,et al.  An Introduction to Lattices and Order , 1989 .

[9]  Paul Pettersson,et al.  Tools and Algorithms for the Construction and Analysis of Systems: 28th International Conference, TACAS 2022, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2022, Munich, Germany, April 2–7, 2022, Proceedings, Part II , 1998, TACAS.

[10]  Jens Palsberg,et al.  Efficient inference of partial types , 1992, Proceedings., 33rd Annual Symposium on Foundations of Computer Science.

[11]  David F. Bacon,et al.  Fast and effective optimization of statically typed object-oriented languages , 1997 .

[12]  Robert E. Tarjan,et al.  Depth-First Search and Linear Graph Algorithms , 1972, SIAM J. Comput..

[13]  Stephen N. Freund The Costs and Benefits of Java Bytecode Subroutines , 1998 .

[14]  J. Davenport Editor , 1960 .

[15]  AbadiMartin,et al.  A type system for Java bytecode subroutines , 1999 .

[16]  David Walker,et al.  From System F to Typed Assembly Language (Extended Version) , 1997 .

[17]  Zhong Shao,et al.  Representing Java classes in a typed intermediate language , 1999, ICFP '99.

[18]  Greg Morrisett,et al.  Compiling with Types , 1995 .

[19]  Yves Caseau Efficient handling of multiple inheritance hierarchies , 1993, OOPSLA '93.

[20]  Jens Palsberg,et al.  A type system equivalent to flow analysis , 1995, TOPL.

[21]  Robert O'Callahn A Simple, Comprehensive Type System for Java Bytecode Subroutines , 1999, POPL.

[22]  Tobias Nipkow,et al.  Machine-Checking the Java Specification: Proving Type-Safety , 1999, Formal Syntax and Semantics of Java.

[23]  Etienne Gagnon,et al.  Intra-procedural inference of static types for java bytecode , 1998 .

[24]  Jerzy Tiuryn,et al.  Satisfiability of Inequalities in a Poset , 1996, Fundam. Informaticae.

[25]  David Tarditi,et al.  Design and Implementation of Code Optimizations for a Type-Directed Compiler for Standard ML. , 1996 .

[26]  Phillip M. Yelland,et al.  A compositional account of the Java virtual machine , 1999, POPL '99.

[27]  Susan Eisenbach,et al.  Formal underpinnings of Java , 1998, OOPSLA Addendum.

[28]  Stephen N. Freund,et al.  A type system for object initialization in the Java bytecode language , 1998, OOPSLA '98.

[29]  John C. Mitchell,et al.  Algorithmic aspects of type inference with subtypes , 1992, POPL '92.

[30]  Zhenyu Qian,et al.  Toward a provably-correct implementation of the JVM bytecode verifier , 2000, Proceedings DARPA Information Survivability Conference and Exposition. DISCEX'00.

[31]  Jakob Rehof,et al.  Tractable Constraints in Finite Semilattices , 1999, Sci. Comput. Program..

[32]  Mark N. Wegman,et al.  An efficient method of computing static single assignment form , 1989, POPL '89.

[33]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[34]  Allen Goldberg,et al.  A specification of Java loading and bytecode verification , 1998, CCS '98.

[35]  Olin Shivers,et al.  Data-flow analysis and type recovery in Scheme , 1990 .

[36]  Patrick Lincoln,et al.  Efficient implementation of lattice operations , 1989, TOPL.

[37]  Jerzy Tiuryn Subtype inequalities , 1992, [1992] Proceedings of the Seventh Annual IEEE Symposium on Logic in Computer Science.

[38]  Wojciech A. Trybulec Partially Ordered Sets , 1990 .

[39]  Zhenyu Qian,et al.  A Formal Specification of Java Virtual Machine Instructions for Objects, Methods and Subrountines , 1999, Formal Syntax and Semantics of Java.

[40]  Martín Abadi,et al.  A type system for Java bytecode subroutines , 1999, TOPL.

[41]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[42]  Xavier Leroy,et al.  Types in Compilation , 1998, Lecture Notes in Computer Science.

[43]  Cornelia Pusch,et al.  Proving the Soundness of a Java Bytecode Verifier Specification in Isabelle/HOL , 1999, TACAS.