There are already several projects providing a language-independant program transformation environment. However we needed some features that were not all provided by the existing projects. See section What makes Aurelia different?.

Related projects



Tom is an extension of Java providing a term library and pattern matching.



ASF+SDF provides parsing tools and a high-level semantic language.


Stratego is a programming language turned towards program transformation.




Spoofax is a Stratego environment for Eclipse. Spoofax can generate code able to run on a Java virtual machine.



Rascal is still in alpha state. It is available as binary. The source is not accessible. The license is not stated.



Semantic Designs' DMS®


What makes Aurelia different?

Aurelia is born from the fact that most of generic meta-programming environment do not scale well for analysing programs written in C++. For instance, while developing projects Transformers, efficiency (in memory like in run time) was a problem.


The different other environment move towards providing complete IDE for the transformed language. DMS® lead the way, Rascal and Spoofax/IMP are following. However, they forget the problems of efficiency, prorbably because nobody wants to touch C++.

Aurelia has for goals:

  • Efficiency in memory and run-time:
  • Static type-checking: a majority of projects on the page have dynamic types, or no types at all.
  • Portability: Aurelia is generic, and is intended to work on any architecture where a standard compiler and library for C++ is available.
  • Parallelism: In Transformers, parrallelism was missing. Parsing non deterministic and ambiguous grammars can profit of multi-core architecture. Attribute grammar evaluation as well.

Why not Java (or .Net)?

It appears that the JVM made improvements and it is often a better choice to use Java than C++. However C++ provides fine tuning. Aurelia is responsible of this tuning, not . In Java, it is not possible to explicitely differentiate between virtual and non virtual calls. But to ensure optimization, Aurelia needs to be able to decide between those. Aurelia also is heavily based on meta-programming to provide efficient genericity. This is not possible in Java.