Object-oriented modelling languages such as EMOF are
often used to specify domain specific meta-models.
However, these modelling languages lack the ability
to describe behavior or operational semantics.
Several approaches have used a subset of Java mixed
with OCL as executable meta-languages. In this
experience report we show how we use Smalltalk as an
executable meta-language in the context of the Moose
reengineering environment. We present how we
implemented EMOF and its behavioral aspects. Over
the last decade we validated this approach through
incrementally building a meta-described
reengineering environment. Such an approach bridges
the gap between a code-oriented view and a
meta-model driven one. It avoids the creation of yet
another language and reuses the infrastructure and
run-time of the underlying implementation language.
It offers an uniform way of letting developers focus
on their tasks while at the same time allowing them
to meta-describe their domain model. The advantage
of our approach is that developers use the same
tools and environment they use for their regular
tasks. Still the approach is not Smalltalk specific
but can be applied to language offering an
introspective API such as Ruby, Python, CLOS, Java
and C#.