Virgil: Objects on the Head of a Pin |
Virgil: Objects on the Head of a PinResearch Paper Wednesday, Oct 25, from 10:30 to 12:00
Embedded microcontrollers are becoming increasingly prolific, serving as the primary or auxiliary processor in products and research systems from microwaves to sensor networks. Microcontrollers represent perhaps the most severely resource-constrained embedded processors, often with as little as a few bytes of memory and a few kilobytes of code space. Language and compiler technology has so far been unable to bring the benefits of modern object oriented languages to such processors. In this paper, I will present the design and implementation of Virgil, a lightweight object-oriented language designed with careful consideration for resource-limited domains. Virgil explicitly separates initialization time from runtime, allowing complex data structures to be built by the application during compilation, and the resulting program can be run directly on the bare hardware without a virtual machine or any language runtime. This clean separation allows the entire program heap to be available at compile time and enables three new data-sensitive optimizations: reachable members analysis, reference compression, and ROM-ization. Experimental results demonstrate that Virgil is well suited for writing microcontroller programs, with five demonstrative applications fitting in less than 256 bytes of RAM with fewer than 50 bytes of metadata. Experimental results show the optimizations presented in this paper reduced code size between 20% and 80% and RAM size by as much as 75%. Ben L. Titzer, UCLA Compilers Group
|