This demonstration will address how the technique of logic meta-programming can be used to build state-of-the-art software development support tools. By capturing and expressing the interaction between the higher levels of software development (design, analysis, etc...) and the actual implementation level, we can co-evolve the source code and the higher-level software artifacts. The goal is to keep design, documentation and source code synchronised when the software evolves.
The interaction between source code and higher-level artifacts is expressed using a logic meta-programming language. This approach allows us to express these artifacts in a declarative way as meta-information of the program itself. This information can be actively used by the programming environment to guide the software development process in a variety of ways: to generate design from implementation and vice-versa; to provide support for refactoring, software reuse and evolution, aspect-oriented programming, generative programming, etc...
During this presentation, we will demonstrate SOUL (Smalltalk Open Unification Language), an open, reflective logic programming environment written in Smalltalk VisualWorks 5i4 and ported to various other Smalltalk dialects (such as Squeak). In the first part of the presentation we show how the environment and associated tools can be used in practice to:
During the second part of the presentation, we take a closer look at the technical details. We show how high-level software artifacts can be expressed in terms of logic facts and rules. For this, we require that the logic meta programming language lives in symbiosis with the object-oriented base language, allowing base level programs to be manipulated as terms, facts or rules in the meta level. In the case of Smalltalk, we use the reflection facilities to implement a logic meta layer on top of the Smalltalk meta-object protocol.