The Reinventing Computing group in the MIT Artificial Intelligence Laboratory is working on technologies which take into account the fact that the computing landscape for the 21 century will be radically different; the key theme is engineering software and hardware technologies that can adapt to inevitable and rapid changes in base hardware and software technologies and in patterns of application usage.
Some specific ideas currently being explored include:
Quasistatic computing is a term which was coined to describe the effects of designing software systems to evolve themselves with minimal user/programmer intervention, in response to the rapid change of base hardware technologies over time, and to the wide variety (at any given time) of platforms with very different performance characteristics. In particular, fielded software systems would be able to evolve while in actual use, rather than remain rigid between manual upgrades. Quasistatic computing systems would track the shifts in patterns of software usage and the changes in availability of hardware and other available resources, and optimize software accordingly. Quasistatic computing may manifest itself in processor designs and machine architectures, operating systems, programming languages, and compilers/interpreters; the lattermost is the topic of this thesis.
Key to quasistatic computing is drastically modifying the current model of software delivery, in which a programmer (or team of programmers...) finishes writing a program, and then delivers the same unchanging executable to all the different end-users for consumption. Although this antiquated model is taken to an extreme with mass-market commodity programs (where fifty million users may be running the same executables), even with vertical-market or custom-written programs, there is usually still a notion that at some point there is a compilation which freezes the software for delivery until the next bug fix or version upgrade. By modifying this traditional model so that the program is periodically and dynamically recompiled, a smart compiler can incorporate newly acquired knowledge (from any of a number of different sources) to improve program performance, and users see long-term incremental benefits for very little manual intervention effort. The term ``quasistatic computing'' itself emphasizes the fact that there is a blurring of the line between static (compile-time) computation and dynamic (run-time) computation.