by Simon Peyton Jones, Thomas Nordin, Dino Oliva
http://research.microsoft.com/Users/simonpj/Papers/pal-ifl.ps.gz
Add To MetaCart
Abstract:
Abstract. Of late it has become very common for research compilers to emit C as their target code, relying on a C compiler to generate machine code. In effect, C is being used as a portable compiler target language. It offers a simple and effective way of avoiding the need to re-implement effective register allocation, instruction selection, and instruction scheduling, and so on, all for a variety of target architectures. The trouble is that C was designed as a programming language not as a compiler target language, and is not very suitable for the latter purpose. The obvious thing to do is to define a language that is designed as a portable target language. This paper describes C--, a portable compiler target language, or assembler. C-- has to strike a balance between being high-level enough to allow the back end a fair crack of the whip, while being low level enough to give the front end the control it needs. It is not clear that a path exists between these two rocks; the ghost of UNCOL lurks ominously in the shadows [6]. Yet the increasing popularity of C as a compiler target language (despite its unsuitability) suggests strong demand, and provides an existence proof that something useful can be done.
Citations
|
588
|
Compiling with Continuations
– Appel
- 1992
|
|
483
|
From System F to typed assembly language
– Morrisett, Walker, et al.
- 1998
|
|
344
|
The Java Language Environment: A White Paper
– Gosling, McGilton
- 1996
|
|
218
|
TIL: A type-directed optimizing compiler for ML
– Tarditi, Morrisett, et al.
- 1996
|
|
176
|
Implementing lazy functional languages on stock hardware: the spineless tagless g-machine
– Jones
- 1992
|
|
129
|
RABBIT: A compiler for SCHEME
– Steele
- 1978
|
|
123
|
Stack-based typed assembly language
– Morrisett, Crary, et al.
- 2000
|
|
61
|
SCHEME->C A Portable Scheme-to-C Compiler
– Bartlett
- 1989
|
|
51
|
No assembly required: Compiling Standard ML to C
– Tarditi, Acharya, et al.
- 1990
|
|
40
|
The advantages of machinedependent global optimization
– Benitez, Davidson
- 1994
|
|
33
|
Omniware: A Universal Substrate for Web Programming
– Lucco, Sharp, et al.
- 1995
|
|
31
|
Tail recursion without space leaks
– Jones
- 1992
|
|
26
|
MLRISC: Customizable and reusable code generators
– George
- 1997
|
|
20
|
Proposal for an UNCOL
– Conway
- 1958
|
|
17
|
Compiling logic programs to C using GNU C as a portable assembler
– Henderson, Conway, et al.
- 1995
|
|
7
|
CONS Should not CONS its Arguments
– Baker
- 1995
|
|
6
|
Clarity MCode: A retargetable intermediate representation for compilation
– Lewis, Deutsch, et al.
- 1995
|
|
6
|
XIL and YIL: The intermediate languages of TOBEY
– O'Brien, O'Brien, et al.
- 1995
|
|
5
|
The C-- manual
– Reig, Jones
- 1998
|
|
5
|
Machine-Independent Support for Garbage Collection, Debugging, Exception Handling, and Concurrency
– Jones, Ramsey
- 1998
|
|
5
|
Simulating tail calls in C
– Pettersson
- 1995
|
|
4
|
ANDF: Finally an UNCOL after 30 years
– Benitez, Chan, et al.
- 1989
|