Byte Code Transformations in XMLVM: A Declarative Approach


Jessica Lee

Oral Defence Date: 



SCI 241


Professors Arno Puder & Barry Levine


Virtual machines (VMs) were introduced as a solution to computing in heterogeneous environments. VMs are platforms that execute an intermediate language called bytecode. With this technology, a program can be compiled to a single bytecode representation and run on a virtual machine, regardless of the computer’s actual underlying native machine code. The Java Virtual Machine (JVM), which was introduced in the mid-90’s, was the beginning of a large scale movement towards the common use of VMs. Microsoft has introduced its own VM solution in the form of its Common Language Runtime (CLR) platform. These two VMs are the most well-known and well-used, but they are not the only solutions available. Google has introduced its own VM with the Dalvik platform—and although programmers can use Java as its high-level programming language, it is compiled down to its own unique set of bytecode instructions. Unfortunately, the proliferation of multiple VMs results in the same sort of heterogeneous computing problems previously faced. Namely, multiple VMs are required in order to run different programs. Cross-compilation leveraging the XMLVM architecture is proposed as an answer to this problem. XMLVM is, as the name suggests, an XML-based solution for representing virtual machine bytecode in XML format in order to perform cross-compilation. In this paper, we provide prototype implementations showing how XML technologies can be used to achieve cross-compilation between different bytecode architectures. Specific use cases illustrating the translation of the CLR’s delegate and enum types to the JVM are presented.


XMLVM, Cross-compilation, Virtual Machine, XML, XSLT, XPATH, bytecode, CLR, JVM, delegate, enumeration


Jessica Lee