Date of this Version
Programs written in a typed language are guaranteed to satisfy the safety properties of the type system without runtime checks. A type system for an intermediate language allows static verification of safety properties independent of source languages, and opens up opportunities for advanced compiler optimizations.
This paper surveys three major intermediate languages: Java bytecode, typed assembly language and proof-carrying code. Java bytecode requires minimal type annotation but sophisticated verification algorithms. Typed assembly language permits low-level constructs such as registers and instruction blocks, yet still enforces control- flow safety and memory safety. Proof-carrying code provides a general framework for any safety properties definable in a meta-logical framework.
We motivate the use of typed intermediate languages, illustrate the type systems of the three languages mentioned above with examples, and compare their tradeoffs of expressiveness versus complexity. Additionally, we assess the impact of the three languages and identify research directions for future work.
Date Posted: 22 June 2005