The concept of co-evolution is inspired by biology, where it describes the process whereby organisms interact and mutually influence genetic characteristics. In the case of software, it describes the way different phases in the life cycle of some system (initially design and implementation) evolve and are causally connected in some way. We propose to make this link explicit by means of declarative meta programming. We use for instance a Prolog-like meta layer on top of Squeak (with the proper reflection and reification features) to embed design in the derived implementation; this allows us to perform all kinds of interesting experiments ...
An initial description of this subject can be found in the proceedings of symposium on Software Architectures and Component Technology (SACT, January 2000 in Enschede, the Netherlands). A copy can be downloaded here.
REFLECTIVE VIRTUAL MACHINES
Strong mobility of objects in a heterogeneous distributed system requires some pretty sophisticated and high-level language models and implementations. The ultimate migrating object encapsulates its own interpreter; again this is taken from biology, where organisms contain their own biochemical engine to interpret their genetic program.
Our first approximation to this state of affairs consists of a reflective virtual machine. We want a virtual machine to be able to execute a program that has direct access to the machine's semantics; we want to explore the constraints that guarantee stability when these semantics are modified.
A first objective is to support strong mobility by having really first class computational state. More information can be found here.
The basis for this research is an experimental virtual machine called Pico, originally developed as a teaching tool. More information can be found here.