PhDOOS Logo

Supported by AITO.

These pages are currently maintained by Alex Potanin

 

An Open Run-time Metaobject Protocol

Eric Tanter
( French )

University of Chile, Chile
Beaucheff 850 3e Piso - AccessNova Santiago CHILE
tel: +56 2 678 4812
fax: +56 2 699 0464
etanter@dcc.uchile.cl

Keywords:

distribution frameworks meta architectures

Abstract:

Run-time MetaObject Protocols (MOPs) are reflective systems that allow objects to be controlled at run time by one or many metaobjects. Such an object is called a reflective object. Applications of run-time MOPs are many, but their main advantage above other transformation systems (such as compile-time MOPs, AOP systems, macros, etc.) relies in the existence at run time of a causal connection link, that is, the link between a reflective object and its metaobject(s). The fact that this link exists at run time makes it possible to dynamically change the metaobjects of an object, therefore achieving dynamic adaptability. Run-time MOPs are therefore particularly adequate for situations where dynamic adaptability is required (such as adaptable mobile code). They are also adequate in cases where instance-specific alterations are needed.

However, existing run-time MOPs are closed software systems. Though they allow the implementation of open systems, there are themselves closed. This non-openness of run-time MOPs is annoying because fine-tuning a MOP is compulsory if a MOP is to be used at all. Indeed, jumping to the meta level to alter the semantics of execution is powerful but costly. It is therefore required to allow the user of a MOP to fine-tune it to specific needs, in order to limit the overcost of using a run-time MOP.

In this PhD thesis, I am investigating on how to build an open run-time MOP that enables fine-tuning. I am working on a prototype of such MOP, Reflex. When achieved, Reflex will allow its users to fine-tune:

  • Which are the base events that are controlled at the meta level: to achieve a high expressiveness, I have been working on a semantic inliner, Jinline, that I will use in Reflex to insert hooks into the bytecode for any language mechanism occurence. Handling so many types of base events implies the need to support several causal connection links for a single object.
  • How is the delegation from the base level to the meta level done: users are provided with a fairly simple way to specialize or specify hooks (the piece of code that does the delegation).
  • Which types/instances are made reflective: Reflex can transform a whole type or sub-hierarchy of types at load time or can generate implicit reflective subclasses on demand at run time, making it possible to have reflective and non-reflective objects of a same type coexist in a running application.

The Reflex framework defines abstract interfaces for user extension and includes implementation of generic components that are able to take into account user extensions. Reflex is relies on a generic MOP and a generic class builder into which transformers can be plugged-in. Once the framework is finalized, we plan to work on a domain-specific language or aspect language that will be used to specify the reflective aspect of an application.

In parallel, I am also working on applications of such a run-time MOP. I am investigating adaptibility in mobile object systems, in particular the issue of reference management upon object migration.

The PhD work started: March 2001



HTML3
JAVA

 


Last modified on Mon Aug 15 14:59:24 2005