We motivate the design of a typed assembly language (TAL) and present a type-preserving translation from System F to TAL. The typed assembly language we present is based on a conventional RISC assembly language, but its static type system provides support for enforcing high-level language abstractions, such as closures, tuples, and user-defined abstract data types. The type system ensures that well-typed programs cannot violate these abstractions. In addition, the typing constructs admit many low-level compiler optimizations. Our translation to TAL is specified as a sequence of type-preserving transformations, including CPS and closure conversion phases; type-correct source programs are mapped to type-correct assembly language. A key contribution is an approach to polymorphic closure conversion that is considerably simpler than previous work. The compiler and typed assembly language provide a fully automatic way to produce certified code, suitable for use in systems where untrusted and potentially malicious code must be checked for safety before execution.
|
1463
|
A Proposal for Standard ML
– Milner
- 1984
|
|
890
|
The Java virtual machine specification
– Lindholm, Yellin
- 1999
|
|
811
|
Proof-Carrying Code
– Necula
- 1997
|
|
588
|
Compiling with Continuations
– Appel
- 1992
|
|
500
|
A semantics of multiple inheritance
– Cardelli
- 1984
|
|
491
|
The Definition of Standard ML (Revised
– Milner, Tofte, et al.
- 1997
|
|
479
|
On the unity of logic
– Girard
- 1993
|
|
393
|
Comprehending monads
– Wadler
- 1992
|
|
390
|
Extensibility, safety and performance in the SPIN operating system
– Bershad, Savage, et al.
- 1995
|
|
361
|
Safe kernel extensions without run-time checking
– Necula, Lee
- 1996
|
|
317
|
Towards a theory of type structure
– Reynolds
- 1974
|
|
277
|
Abstract types have existential type
– Mitchell, Plotkin
- 1988
|
|
257
|
The mechanical evaluation of expressions
– Landin
- 1964
|
|
238
|
Garbage collection in an uncooperative environment
– Boehm, Weiser
- 1988
|
|
227
|
Interpr'etation Fonctionelle et ' Elimination des Coupures dans l'Arithm'etique d'ordre Sup'erieure
– Girard
- 1972
|
|
218
|
TIL: A type-directed optimizing compiler for ML
– Tarditi, Morrisett, et al.
- 1996
|
|
205
|
Orbit: An optimizing compiler for Scheme
– Kranz, Kelsey, et al.
- 1986
|
|
195
|
Standard ML of New Jersey
– Appel, MacQueen
- 1991
|
|
183
|
Une extension de l'interpretation de Godel a l'analyse, et son application a l'elimination des coupures dans l'analyse et la theorie des types
– Girard
- 1971
|
|
182
|
Simple type-theoretic foundations for object-oriented programming
– Pierce, Turner
- 1994
|
|
169
|
Unboxed objects and polymorphic typing
– Leroy
- 1992
|
|
138
|
Typed closure conversion
– Minimide, Morrisett, et al.
- 1996
|
|
136
|
A paradigmatic object-oriented programming language: Design, static typing and semantics
– Bruce
- 1992
|
|
131
|
Call-by-name, call-by-value, and the lambda calculus
– Plotkin
- 1975
|
|
123
|
Stack-based typed assembly language
– Morrisett, Crary, et al.
- 2000
|
|
118
|
TALx86: A realistic typed assembly language
– Morrisett, Crary, et al.
- 1999
|
|
116
|
The Glasgow Haskell Compiler: A Technical Overview
– Jones, Hall, et al.
- 1993
|
|
114
|
Intensional polymorphism in type-erasure semantics
– Crary, Weirich, et al.
- 1999
|
|
112
|
closure-passing style
– Appel, Jim, et al.
- 1989
|
|
110
|
Comparing object encodings
– Bruce, Cardelli, et al.
- 1999
|
|
110
|
Type inference for polymorphic references
– Tofte
- 1990
|
|
107
|
Inheritance as implicit coercion
– Breazu-Tannen, Coquand, et al.
- 1991
|
|
104
|
Compiling with Proofs
– Necula
- 1998
|
|
102
|
Danvy and Andrzej Filinski. Representing control, a study of the CPS transformation
– Olivier
- 1992
|
|
101
|
Compiling with Types
– Morrisett
- 1995
|
|
100
|
Linear types can change the world
– WADLER
- 1990
|
|
97
|
types can change the world
– Linear
- 1990
|
|
96
|
Lambda calculus schemata
– Fischer
- 1972
|
|
94
|
Abstract models of memory management
– Morrisett, Felleisen, et al.
- 1995
|
|
91
|
Rabbit: A compiler for Scheme
– Jr
- 1978
|
|
84
|
From region inference to von Neumann machines via region representation inference
– Birkedal, Tofte, et al.
- 1996
|
|
83
|
An overview of the FLINT/ML compiler
– Shao
- 1997
|
|
83
|
Garbage collection in an uncooperative environment, Software Practice and Experience
– Boehm, Weiser
- 1988
|
|
78
|
Simple imperative polymorphism
– Wright
- 1995
|
|
70
|
Flexible type analysis
– Crary, Weirich
- 1999
|
|
68
|
Tag-free garbage collection using explicit type parameters
– Tolmach
- 1994
|
|
67
|
Explicit polymorphism and CPS conversion
– Harper, Lillibridge
- 1993
|
|
64
|
Flexible representation analysis
– Shao
- 1997
|
|
59
|
Type-safe linking and modular assembly language
– Glew, Morrisett
- 1999
|
|
56
|
Representing control: A study of the CPS transformation
– Danvy, Fillinski
- 1992
|