Stratego/XT 0.14
Stratego -- Strategies for Program Transformation
Stratego/XT 0.14 -- released May 9th, 2005
Download
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.
License
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.
Support
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
strc
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)
pack-stratego
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.
Example:
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
- 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
- collection/tuple
- collection/set
- 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)
Verbose
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
E.g.
$ 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:
http://www.stratego-language.org/Stratego/StrategoDevManual
(Martin Bravenboer)
pkg-config
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:
http://www.stratego-language.org/Stratego/PkgConfig
(Martin Bravenboer)
StrategoXT Transformation Tools
General
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)
pp-aterm
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.
Contributions
Developments, beta tests, and bug fixes were carried out by
- Martin Bravenboer
- Eelco Dolstra
- Rene de Groot
- Rob Vermaas
- Eelco Visser
Thanks!