2003 | Abstracts

Design of the Portable.NET Interpreter

Rhys Weatherley

BiographyBioPaperPaper AudioAudio

The Common Language Infrastructure (CLI) is a set of specifications that describe a bytecode-based development and runtime environment. Portable.NET is an implementation of the CLI, whose primary design goal is portability to as many platforms as possible.

Portable.NET achieves portability primarily through its use of interpretation rather than Just-In-Time compilation. However, the bytecode format of the CLI presents some challenges to efficient interpreter implementation.

The approach we take is very similar to a JIT: the bytecode is translated into instructions for a simpler abstract machine, dubbed CVM (for "Converted Virtual Machine"). This machine is then interpreted using a high-performance engine.

Traditionality, abstract machines have used the same bytecode representation "on the wire" as for execution (e.g. JVM, Parrot). Our work shows that there are definite performance advantages to using different bytecode representations internally and externally.

This isn't necessarily a new result: JIT's have been demonstrating this fact for some time. Bytecode translation has also been common in the Forth interpreter community. But it isn't as well known in the wider developer community.

This paper will discuss the Portable.NET engine design, and its implications for designing Open Source and Free Software VM's in the future.

Other Information:

Portable.NET is part of the DotGNU project (, an initiative of the GNU Project and

More information on Portable.NET can be found at the following site:

The original Tux penguin is copyright by Larry Ewing.
Linux is a trademark of Linus Torvalds.
© 2002 Linux Australia.