Mauro Marinilli's Self Designing Software

marinilli.com > Projects

Self-Designing Software

Imagine a software that is able to design itself, i.e. change its structural behavior (not just mere runtime data, but its source code) while it is running.

This page introduces the subject of my PhD Thesis, at a very informal and practical way. For the details and the academic rigor, see the end of this page.

Introduction

Challenged with representing a given problem or application domain in software, what we have done, almost since the beginning of modern computer science is to represent the changing part of the problem using data and the rest of the application domain using code. We introduced the concept of compile-time (or of a human that changes by hand the code or script in our programs, even if the script needs not to be compiled human intervention is needed anyway) and runtime (when we capture changing information through data, stored in a database or in files).

Some more details

to be completed.

What you can do with it

to be completed.

A Model-Driven Implementation

intro to be completed.

Referring to Fig.1 below, we have the standard layers of abstraction of software artifacts. Self-Designing Software manipulates other software (or usually itself) on M1 level (program-level, i.e. classes in an OOP language).



Layers of Abstraction
figure 1. Abstraction Layers (from J.Bézivin)




UARS Runtime Environment
figure 2. Runtime Environment


Artificial Intelligence and Self-Designing Software

I have used self-designing software to represent complex application domains in Artificial Intelligence.

to be completed.

Uses of Self-Designing Software

This approach is not only a nice academic research topic, this class of software systems has many uses. Here is a list:

Related Material


© 1998-2005 Mauro Marinilli