Typed Intermediate Languages Inside and Outside of Compilers

ÁNOQ of the Sun, Hardcore Processing *






1   Abstract

This document is for a talk about the use of intermediate languages in compilers - and even outside of compilers. The talk aims to give an overview of the projects FLINT, MLRISC, TAL and TILT which are all different kinds of intermediate langauges. Intermediate languages in compilers are usually meant to separate different phases of a compiler thus making the compiler more modular. This also makes it possible to support many different target languages and source languages in the compiler while sharing for instance the optimizing parts of the compiler. Some modern intermediate langauges are typed which usually means that programs can be verified to be correct by doing a simple typecheck on the intermediate form of the program. This makes typed intermediate languages suitable as a format for distribution of software components. There are also other interesting applications of these languages which will be mentioned in the talk.

2   MLRISC

MLRISC is a compiler backend which can translate from a relatively lowlevel typed intermediate language to multiple target machine languages - mostly for general purpose CPUs.

2.1   Goals of MLRISC

2.2   Supported targets

A MIPS backend is not complete yet, however more and more target specific parts are being generated from a machine description.

2.3   MLRISC is being used for real

MLRISC is already being used in the following projects:

2.4   How does it work

2.5   More about the MLTREE language

2.6   Other things

2.7   Future work

3   Typed Assembly Language (TAL)

3.1   What does it do?

3.2   Current uses

3.3   Potentials and capabilities

3.4   Current project status

The software is currently pre-alpha, contains little documentation, and comes with absolutely no warranty. Use at your own risk! :)

4   Typed Intermediate Language Two (TILT)

4.1   Reasons to typecheck

4.2   About the first TIL compiler

4.3   Project status

The sources for the original TIL compiler are available for perusal but it is unsupported. It seems that there is no notion of a current version of the TILT compiler - however I have not tried asking for it.

5   FLINT

5.1   The FLINT language

5.2   Some comparison with Java bytecode

Currently, Java Virtual Machine Language (JVML or Java bytecode) is an important langauge in the area of platform independence, so here are a few comparisons to FLINT:

On a side note - the security model that is now used by the Sun, Netscape, and Microsoft Java implementations was first explained and justified by the research of the authors of FLINT :)

5.3   Features and plans

5.4   Project status

References

[1]
Zhong Shao ``An Overview of the FLINT/ML Compiler``, Proc. 1997 ACM SIGPLAN Workshop on Types in Compilation (TIC'97).
[2]
Andrew W. Appel, Edward W. Felten, Zhong Shao ``Scaling Proof-Carrying Code to Production Compilers and Security Policies ``, January 1999 on the FLINT website.
[3]
D. Tarditi, G. Morrisett, P. Cheng, C. Stone, R. Harper, P. Lee ``TIL: A Type-Directed Optimizing Compiler for ML``, 1996 SIGPLAN Conference on Programming Language Design and Implementation.
[4]
Lal George, Allen Leung ``The MLRISC website``: http://www.cs.nyu.edu/leunga/www/MLRISC/Doc/html/index.html.
[5]
``The TAL website`` : http://www.cs.cornell.edu/talc/
[6]
``The TILT website`` : http://www.cs.cornell.edu/Info/People/jgm/tilt.html
[7]
``The FLINT website`` : http://flint.cs.yale.edu/

*
©2000 ÁNOQ of the Sun (alias Johnny Andersen)

This document was translated from LATEX by HEVEA.