Alice is a functional programming language that extends Standard ML with support
for distributed and concurrent as well as constraint programming. One key feature of
the system is that code is communicated in a high-level platform-independent format,
called Alice Abstract Code, which is statically generated from Alice source code. The
system ensures efficient execution by run-time compilation to native code. However,
the native code compiler is not portable and it is hard to maintain.
This thesis develops a portable execution unit based on byte code. A new run-time compiler compiles the Abstract Code to Alice byte code that is executed by a register- based interpreter. Specialized instructions and dynamic code rewriting are used to speed up interpretation. The module system of Alice imposes a strict separation of software blocks. This is only resolved at run-time as modules are linked dynamically. Thus, the run-time compiler has much more knowledge about the current state of the system than the static compiler. One optimization that is particularly effective at run-time is inlining. Two different forms of inlining (inlining of primitive operations, procedure integration) are investigated to reduce the overhead of procedure calls. The compilation strategy of the native code compiler is generalized to selective compilation in order to avoid compilation of rarely executed procedures. The byte code system sets the new standard for platform-independent execution in Alice, starting from release 1.2. This thesis presents a careful analysis of the system and shows that its performance is competitive to the native code system.
Download PDF Show BibTeX
Login to edit