I am actively working on computational reflection, and in its application to software engineering, distribution, security and compiler design.
I have been involved in most of the recent events related to reflection: Reflection 2001, WERS'01, EWRMA'00, OORaSE99.
In the sequel of the page I will describe in detail the projects currently under development.
The main objective of RMI- and object-based middleware is to provide a convenient environment for the realization of distributed computations. In most cases, unfortunately, interaction policies in these middleware platforms are hardwired into the platform itself.
In this way, distributed algorithms must be exclusively embedded in the application code, breaking any separation of concerns between functional and nonfunctional code.
We can summarize these kinds of problems with current middleware platforms as follows:
Key Words: Reflection, Distributed Middleware, Reflective Middleware, Multicast Communication.
Collaboration:
Tokyo Institute of Technology, Prof. Shigeru Chiba.
The main objective of this application of reflection consists of separating the security aspect from the rest of a system. Such an idea is based on the fact that the security is a non-functional feature with respect to the application behavior. The advantages due to such a separation are:
At the moment we studied several different reflective approaches to security, and prototyped some different authorization policies with our reflective model (mChaRM).
Key Words: Reflection, Security, Authorization Policy.
Collaboration:
Florida Atlantic University, Prof. Eduardo B. Fernandez.
At the moment, the authorization policies we have developed are part of the mChaRM project and distributed with it. However, you can download our first attempt of using reflection to separate them from the functional aspect of the application from this web-page.
We have developed a new type of reflection whose domain is no more the computation but rather its high-level description. Architectural reflection is thought to allow in a simple way dynamic reconfiguration of computational system. The idea is to use at run-time the software architecture of the system, and by modifying the architecture dynamically, it is possible to reconfigure the entire system. Passing through the software architecture grants the validity and the soundness of each modification.
Key Words: Reflection, Software Architecture, Dynamic Reconfiguration.
Collaborations:
Università di Milano Bicocca, Prof. Francesco Tisato.
Department of Computer Science, University College London, Dr. Andrea Savigni.
The main objective consists of designing a methodology which applies to the standard object-oriented development approach (e.g., UML) some concepts from the reflection area, as the separation of concerns. This approach to the software development will allow to model reflective systems, separating functional from nonfunctional aspect and improving reuse and design quality as well as to design standard object-oriented systems.
Key Words: Reflection, Software Engineering, UML.
Collaborations:
Università di Milano Bicocca, Prof. Francesco Tisato.
Otto-von-Guericke-Universität Magdeburg, Prof. Gunter Saake and Dr. Ahmed Ghoneim.
Reflection has been around for several year and many researchers have pointed out its potential and promises. However, its has never penetrated the programming realm at a level that we consider adequate for its capabilities. In our opinion, this is due to the absence of a characterization of the real essence of reflection that may lead to a very simple (i.e., minimal) and orthogonal (i.e., independent of the programming language) implementation.
Reflective programming paradigm covers a programming abstraction which is not considered by other paradigms, like the functional, the procedural, the logic, and the object-oriented one. It aggregates unrelated behaviors to achieve a composite component playing the behavior represented by the composition of the basic behaviors. Such a composition is performed through the causality relation existing among software components of a system.
The basic idea consists of shifting up reflective concepts from the programming to system level: a) reflection has a minimal impact on the programming language clauses. b) changes needed to support reflection are moved in the compiler's back-end.
To validate our ideas, we developed from scratch a simple programming system, named Io, which embeds reflection from its early design stage.
Key Words: Reflection, Programming Language, Programming Paradigm, Compiler Design.
All the cited paper and many others about these and past projects can be download from my bibliography page.