Authors
Don Syme
Abstract
This paper describes several
extensions to the .NET Common Intermediary Language (CIL), each of which is
designed to eenable easier implementation of typed high-level programming
languages on the .NET platform, and to promote closer integration and
interoperability between those languages. In particular we aim for easier
interoperability between components whose interfaces are exposed using
function types, discriminated unions and parametric polymorphism, regardless
of the languages in which these components are implemented. We show that it
is possible to add these constructs to an existing, "real-world"
intermediary language and that this allows corresponding subsets of
constructs to be compiled uniformly, which in turn will allow programmers to
use these constructs seamlessly between different languages. In this paper
we discuss the motivations for our extensions, which are together called
Extended IL (ILX), and describe them via examples. In this setting, many of
the traditional responsibilities of the backend of a compiler must be moved
to ILX and the execution environment, in particular those related to
representation choices and low-level optimizations. We have modified a
Haskell compiler to generate this language, and have implemented an
assembler that translates the extensions to regular or polymorphic CIL code.
Full Text
[pdf]