Technical Overview of the Common Language Runtime

The functionality of the recently announced Microsoft .NET system is founded on the capabilities of the Common Language Infrastructure (CLI). Unlike some other recent systems based on virtual machines, the CLI was designed from the start to support a wide range of programming languages. It is also expected that ECMA standardization will make the CLI available on a wide range of computing platforms. This combination of multi-language capability and multiplatform implementation make the CLI an important target for future language compilers. In this paper, the technical details of the CLI are briefly described. To motivate some of the discussion a comparison is made with the Java virtual machine (JVM). The JVM was designed under rather different constraints, making it a much more difficult target for languages other than Java . We also briefly discuss the issues involved in mapping various language constructs to the primitives of the CLI.

[1]  K. John Gough Stacking them up: a comparison of virtual machines , 2001, Proceedings 6th Australasian Computer Systems Architecture Conference. ACSAC 2001.

[2]  Joshua J. Bloch Effective Java : programming language guide , 2001 .

[3]  John John Gough,et al.  Compiling for the .NET Common Language Runtime , 2001 .

[4]  Philip A. Nelson,et al.  A comparison of PASCAL intermediate languages , 1979, SIGPLAN '79.

[5]  S. Tucker Taft,et al.  Ada 95 Reference Manual , 1995, Lecture Notes in Computer Science.

[6]  Joshua Engel Programming for the Java¿ Virtual Machine , 1999 .

[7]  Andrew Kennedy,et al.  Design and implementation of generics for the .NET Common language runtime , 2001, PLDI '01.

[8]  Zhong Shao,et al.  Representing Java classes in a typed intermediate language , 1999, ICFP '99.

[9]  Robin Milner,et al.  Definition of standard ML , 1990 .

[10]  David L. Schleicher,et al.  System Overview of the Application System/400 , 1989, IBM Syst. J..

[11]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[12]  Andrew D. Gordon,et al.  Typing a multi-language intermediate code , 2001, POPL '01.

[13]  Richard L. Sites,et al.  Binary translation , 1993, CACM.

[14]  David L. Schleicher,et al.  System Overview of the Application System/400 , 1999, IBM Syst. J..

[15]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[16]  Melvin E. Conway,et al.  Proposal for an UNCOL , 1958, CACM.

[17]  K. John Gough Parameter passing for the Java virtual machine , 2000, Proceedings 23rd Australasian Computer Science Conference. ACSC 2000 (Cat. No.PR00518).

[18]  Simon L. Peyton Jones,et al.  C--: A Portable Assembly Language that Supports Garbage Collection , 1999, PPDP.

[19]  Per Bothner Kawa - Compiling Dynamic Languages to Java VM , 1998, USENIX Annual Technical Conference.

[20]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[21]  Jonathan C. Hardwick,et al.  Java as an Intermediate Language , 1996 .

[22]  Jr. Guy L. Steele,et al.  Rabbit: A Compiler for Scheme , 1978 .

[23]  Martin Odersky,et al.  Pizza into Java: translating theory into practice , 1997, POPL '97.

[24]  Jan Vitek,et al.  On Extending Java , 1997, JMLC.

[25]  Erik Meijer,et al.  What's In a Name? .NET as a Component Framework (DRAFT) , 2001 .

[26]  K. John Gough,et al.  Evaluating the Java Virtual Machine as a Target for Languages Other Than Java , 2000, JMLC.