Stratego/XT 0.14

Stratego -- Strategies for Program Transformation
Stratego/XT 0.14 -- released May 9th, 2005


See the installation instructions if you are not familiar with the standard installation procedure of tarballs or RPMs.

Source tar.gz

Source RPM

Redhat Linux RPM

Redhat 9.0:

SuSE Linux RPM

SuSE 9.0:

Fedora Core RPM

Fedora Core 2:

Fedora Core 3:

Microsoft Windows Cygwin binaries

  • The *-cygwin.tar.gz files contain a file readme.txt with installation instructions.

Mac OS X binaries

  • The *-macosx.tar.gz files contain a file readme.txt with installation instructions.


StrategoXT is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.


Despite the disclaimer above we do our best to help users of Stratego/XT. Subscribe to the Stratego mailing lists, in particular the stratego-announce and stratego mailing lists to get announcements of new releases and ask questions about usage of the languages and tools. Also we're interested to know what people are using Stratego/XT for and how it might be improved, so feel free to drop us a line.

Summary of Changes

StrategoXT 0.14, which represents over 3 months of development, features a wide variety of updates. A few highlights are wildcard imports in Stratego, the hierarchical Stratego library, the introduction of pkg-config and much more.

Stratego Language

Wildcard imports

We have introduced wildcard imports to allow easy importing of multiple modules in the same package/directory.

  imports strategy/-

The import statement above instructs the compiler/interpreter to import all Stratego files from the directory 'strategy', relative to the include paths.

(Rob Vermaas)

Dependent Dynamic Rules

There has been a change in dynamic rules terminology. When defining a dependent dynamic rule, strategies kill-R and new-R(|_) were defined by the compiler. Since we also use the term `undefine' for, well, undefining rules, it is more consistent to use undefine-R instead of kill-R.

new-R and undefine-R now take all their arguments as term arguments. Thus, new-R(|x,x) and undefine-R(|x) instead of x and x. This entails that there is no need to wrap these invocations in where clauses anymore.

Remaining (JIRA) issues concerning dynamic rules: STR-251, STR-269, STR-275.

Please note that Dependent Dynamic Rules still have the experimental status in Stratego. Even though they are stabilizing, changes in semantics can occur in a next version.

(Eelco Visser)

Stratego Compiler


Since the introduction of the new style dynamic rules in StrategoXT 0.11, strc had an option for choosing the semantics of dynamic rules. From this version on, the default semantics are the new semantics. ('--dr new' by default)

As optimization levels below 2 are broken (see STR-15), we have disabled them. If one chooses an optimization level below 2, a warning will be shown and the optimization level will be set to 2. The problem of broken optimizations are being addressed in the strc-core package, which holds the new version of the Stratego compiler.

(Rob Vermaas)


The packing process has been altered to improve the error reporting of pack-stratego, similar to the error reporting of pack-sdf.

The '--imports' flag has been removed from pack-stratego.

(Rob Vermaas)

Stratego Library

Hierarchical structure

We have started changing the Stratego library to a hierarchical structure. The new structure should make it easier to find strategies in the Stratego library.


    module strategy/collect

The initial packages and their modules are:

  • lang
    • dynamic-rules, dynamic-rules-refactored, scoped-finite-map
  • strategy
    • collect, conditional, iteration
  • strategy/traversal
    • environment, fixpoint, list, list-environment, simple
  • strategy/general
    • free-variables, option, parenthesize, rename, substitution, unification
  • strategy/pack
    • common, graph, modules
  • system/io
    • char, dir, exec, file, pipe, process, term
  • system/posix
    • error, file, process, signal
  • term
    • annotation, common, integer, placeholder, properties, real, share, string, zip
  • collection/hash-table
    • common, nested
  • collection/tuple
    • common, cons
  • collection/set
    • indexed
  • collection/list
    • bag, common, cons, filter, index, integer, lookup, set, sort, zip
  • util
    • date-format, log, sunit, time
  • util/config
    • common, cpl, keep, options, parse-options, verbose

For compatibility reasons, the old modules are still distributed. These modules only contains imports to the corresponding modules above. It is expected that these modules will be removed from the distribution at the next release.

(Rob Vermaas)


We have changed the default verbosity level to 1 (one). Previously this was 0 (zero).

From this release on the verbosity can be set using any of the following verbose level descriptors:

  • emergency, alert, critical, error, info, warning, notice, debug, vomit


   $ sglri ... --verbose debug ...

These descriptors translate to the verbosity levels as described in the util/log module of the Stratego library.

(Rene de Groot)

StrategoXT Deployment and Build System

Baseline development

The Stratego/XT source code highly depends on itself: Stratego and various generative tools are used everywhere. Previously we had bootstrapped sources in the repository. We have changed to a system where we are using a baseline to compile a Stratego/XT source tree from Subversion.

The big advantage of a baseline is that you basically cannot break anything. In the past, we used bootstrapped sources in the Subversion repository, which was very fragile and required great care of contributors. The baseline setup is much easier to use and more safe. We hope this will encourage contributions.

More information on contributing to StrategoXT and working with a baseline can be found at:

(Martin Bravenboer)


In this release we have introduced pkg-config for locating packages and their configuration. The use of pkg-config has several advantages:

  • Distributions of packages that have been created using a certain Stratego/XT are more likely to work on future versions of Stratego/XT. Thus, package don't have to be re-distributed if a new Stratego/XT comes out.

  • Users of packages that use Stratego/XT don't need to configure this package with the location of Stratego/XT. Pkg-config is used to find the location of Stratego/XT on the system of the user.

  • Internally, the installation of Stratego/XT is less complicated. The installation of packages in the directory local-baseline is no longer necessary.

  • Users can use pkg-config to pass the right includes paths to the Stratego compiler.

More info:

(Martin Bravenboer)

StrategoXT Transformation Tools


In the previous release we added the log (previously logging) module in the Stratego library. We have started adapting the existing tools to use these logging facilities, to allow cleaner and more uniform messages from the tools.

(Rob Vermaas)


The default behaviour of the pp-aterm tool has changed. Previously the tool showed strings unescaped. This makes the pretty printed terms easier to read, but results in a malformed ATerm in cases where there are characters that need escaping.

The pp-aterm tool now escapes the '\', '"', '\n', '\t' and '\r' characters by default. If you prefer the old behaviour you can pass the -u or --unescaped flag to pp-aterm.

(Rene de Groot)

Detailed List of Issues

The full list of issues closed in this release is available at:

Download and Installation

The release page contains the source distributions, binary RPMs, and detailed instructions on how to install the distributions:

Bugs and Known Problems

See our issue tracking systems for reports about (open) bugs:

Please report any problems with installation or bugs in the implementation to our issue tracking system. Please check the existing issues to see if a report about the problem was already submitted.


Developments, beta tests, and bug fixes were carried out by

  • Martin Bravenboer
  • Eelco Dolstra
  • Rene de Groot
  • Rob Vermaas
  • Eelco Visser