Reflective language SOUL

Tom Mens
Fri, 25 May 2001 10:04:04 +0200


On the page
you mention a number of languages supporting reflection.

There is another language that is not yet mentioned in your list, but which
is heavily being used for research purposes at our lab (the Programming
Technology Lab of the Vrije Universiteit Brussel, Belgium)

It is called SOUL, which is an acronym of "Smalltalk Open Unification
Language". Here is a short description of the language:

SOUL is an open, reflective logic meta programming language written in
Smalltalk. It allows reasoning about the structure of class-based
object-oriented languages. The language that is reasoned about is
represented using an internal parsetree representation, making SOUL a
meta-language. It is thus possible to query this structure and derive
relations between static elements. This allows to express, extract and
enforce the link between design and implementation. Currently the only
base-language supported is Smalltalk, but in the near future Java will be
added in order to show that the ideas of SOUL are independent of the
underlying base language.
Technically speaking SOUL is a 'Prolog in Smalltalk' with additions to make
it more open, and to have consistency between the system you are reasoning
about. Key point in the research is the introduction of the so-called
declarative framework, a layered set of rules that allows to do reasoning
about the structure on a high level of abstraction. The current version that
is available is a layered structure containing basic rules (for classes,
methods, instance variables), programming conventions (accessors, ...), or
design pattern structural rules (composite pattern).
Using SOUL it is possible to query an object-oriented system, and to enforce
user-defined rules on a system. We have used SOUL to make some pretty
advanced tools embedded in VisualWorks Smalltalk that allow this kind of
functionality to be used in practice.


*Some publications*
@inproceedings{Wuyts98, author = {R. Wuyts}, title = {Declarative Reasoning
about the Structure of Object-Oriented Systems}, booktitle = {Proceedings
TOOLS USA'98, IEEE Computer Society Press}, pages = {112-124}, year = 1998 }

@inProceedings{Mens&al99, author = "K. Mens, R. Wuyts and T. D'Hondt", title
= "Declaratively Codifying Software Architectures using Virtual Software
Classifications", booktitle = {Proceedings of TOOLS-Europe 99}, year =
"1999", month = "June", pages = "33-45", }

@techReport{Wuyts&al99, author = "R. Wuyts and K. Mens and T. D'Hondt",
title = {Explicit Support for Software Development Styles throughout the
Complete Life Cycle}, institution = {Vrije Universiteit Brussel}, year =
1999, number = {vub-prog-tr-99-07}, }