In previous work, we presented Typed Assembly Language (TAL). TAL is su#ciently expressive to serve as a target language for compilers of high-level languages such as ML. That work assumed such a compiler would perform a continuation-passing style transform and eliminate the control stack by heap-allocating activation records. However, most compilers are based on stack allocation. This paper presents STAL, an extension of TAL with stack constructs and stack types to support the stack allocation style. We show that STAL is su#ciently expressive to support languages such as Java, Pascal, and ML; constructs such as exceptions and displays; and optimizations such as tail call elimination and callee-saves registers. This paper also formalizes the typing connection between CPS-based compilation and stack-based compilation and illustrates how STAL can formally model calling conventions by specifying them as formal translations of source function types to STAL types.
|
919
|
The Java Virtual Machine Specification
– Lindholm, Yellin
- 1996
|
|
606
|
Compiling with Continuations
– Appel
- 1992
|
|
501
|
From system F to typed assembly language
– MORRISETT, WALKER, et al.
- 1998
|
|
275
|
Types, abstraction, and parametric polymorphism
– Reynolds
- 1983
|
|
263
|
The Mechanical Evaluation of Expressions
– Landin
- 1964
|
|
224
|
Til: A type-directed optimizing compiler for ml
– Tarditi, Morrisett, et al.
- 1996
|
|
208
|
ORBIT: An optimizing compiler for Scheme
– Kranz, Kelsey, et al.
- 1986
|
|
199
|
Standard ML of New Jersey
– Appel, MacQueen
- 1991
|
|
185
|
A type system for Java bytecode subroutines
– Abadi, Stata
- 1998
|
|
174
|
Unboxed objects and polymorphic typing
– Leroy
- 1992
|
|
141
|
Typed closure conversion
– Minamide, Morrisett, et al.
- 1996
|
|
117
|
The Glasgow Haskell compiler: a technical overview
– Jones, Hall, et al.
- 1993
|
|
113
|
Continuation-passing, closure-passing style
– Appel, Jim
- 1989
|
|
108
|
Inheritance as implicit coercion
– Breazu-Tannen, Coquand, et al.
- 1991
|
|
103
|
Compiling with Types
– Morrisett
- 1995
|
|
92
|
Rabbit: A compiler for Scheme
– Jr
- 1978
|
|
87
|
From region inference to von Neumann machines via region representation inference
– Birkedal, Tofte, et al.
- 1990
|
|
84
|
An overview of the FLINT/ML compiler
– Shao
- 1997
|
|
71
|
Representing control in the presence of first-class continuations
– Hieb, Dybvig, et al.
- 1990
|
|
68
|
Flexible representation analysis
– Shao
- 1997
|
|
67
|
Continuation-based multiprocessing
– Wand
- 1980
|
|
61
|
The Java Virtual Machine Speci cation
– Lindholm, Yellin
- 1997
|
|
59
|
A simple, comprehensive type system for Java bytecode subroutines
– O’Callahan
- 1999
|
|
58
|
Implementation of the typed call-by-value -calculus using a stack of regions
– Tofte, Talpin
- 1994
|
|
48
|
Implementation of the typed call-by-value λ-calculus using a stack of regions
– Tofte, Talpin
- 1994
|
|
41
|
Memory subsystem performance of programs using copying garbage collection
– Diwan, Tarditi, et al.
- 1994
|
|
40
|
The TIL/ML compiler: Performance and safety through types
– Morrisett, Tarditi, et al.
- 1996
|
|
38
|
The ML Kit (version 1
– Birkedal, Rothwell, et al.
- 1993
|
|
29
|
An empirical and analytic study of stack vs. heap cost for languages with clsoures
– Appel, Shao
- 1993
|
|
24
|
Callee-saves registers in continuation-passing style
– Appel, Shao
- 1992
|
|
19
|
Memory system performance of programs with intensive heap allocation
– Diwan, Tarditi, et al.
- 1995
|
|
14
|
From system F to typed assembly language (extended version
– Morrisett, Walker, et al.
- 1997
|
|
13
|
Foundations for the implementation of higher-order subtyping
– Crary
- 1997
|
|
10
|
Using functor categories to generate intermediate code
– Reynolds
- 1995
|
|
7
|
A formal model of procedure calling conventions
– Bailey, Davidson
- 1995
|
|
5
|
Strongly typed flow-directed reprsentation transformations
– Dimock, Muller, et al.
- 1997
|
|
5
|
Representing control in the presence of rst-class continuations
– Hieb, Dybvig, et al.
- 1990
|
|
3
|
ORBIT:Anoptimizingcompilerfor Scheme
– DavidKranz, Rees, et al.
- 1986
|
|
2
|
Intel Architecture Optimization Manual
– Corporation
- 1997
|
|
1
|
Tofte and Jean-Pierre Talpin. Implementation of the typed call-by-value #- calculus using a stack of regions
– Mads
- 1994
|
|
1
|
Strongly typed ow-directed reprsentation transformations
– Dimock, Muller, et al.
- 1997
|