Stratego/XT 0.9.5
Stratego -- Strategies for Program Transformation
Released March 26, 2004
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 8.0:
Redhat 9.0:
SuSE Linux RPM
SuSE 8.2:
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.
Summary of Changes
- JIRA Issue Tracking System
- Improved documentation of tools
- Many bug fixes
- New hashtable strategies
- Concise syntax for ParseUnit test-suites
- Upgrade of the SDF language
Configuration
Important: StrategoXT 0.9.5 requires more recent versions of
the SDF implementation in PGEN (2.0) and SGLR. The
sdf2-bundle 2.0.1 provides all required SDF packages and is
available from the release page of StrategoXT 0.9.5.
Packages that require StrategoXT usually apply the
USE_XT_PACKAGES
macro of
autoxt
to add
--with-x
configuration flags to the
configure script. This macro now also provides a
--with-strategoxt
flag, which is the preferred alternative to the
--with-stratego-xt
flag. The additional flag corresponds to the package name of
StrategoXT, which is
strategoxt
.
JIRA Issue Tracking System
We have finally adopted an issue tracking system for StrategoXT and
related projects. Arthur van Dam suggested to use JIRA, which is free
(not Free) for open-source projects. Fortunately he has taken care of
evaluating and installing it as well. We have just started to use the
system, but it looks very promising. The user-interface is very
attractive compared to Bugzilla and JIRA provides many useful
overviews for developers, without having to struggle with a generic
query interface.
Our JIRA installation is public and everyone can submit issues. Please
report issues directly to the JIRA issue tracking system from now on.
New issues reported in JIRA will be sent to the stratego-bugs
mailing list for notification. However, the issue in JIRA is the
preferred place too for comments. Of course you are welcome to discuss
issues at the stratego-dev mailing list first.
(Arthur van Dam)
Documentation
Documentation for users of StrategoXT has improved in several areas.
Rob Vermaas, who is now a scientific programmer at our institute, is
working on updating the completely out-of-date README files in
the distribution. Many sub-packages have already been updated, but
some work remains to be done at this point.
(Rob Vermaas)
Feedback by new users inspired us to revive the Tools web and start
working on a comprehensive reference for the tools in
StrategoXT. The reference is still far from complete, but it is a
start. Tool documentation in the tool reference should provide an
introduction, explanation of the command-line arguments and usage
examples. The tool reference is a Wiki, so you are all welcome to
improve and extend the available documentation. The tools of GPP
are already documented pretty thorough.
(Martin Bravenboer and Merijn de Jonge)
We have started to develop a central website for all information
related to SDF at the program-transformation Wiki. In this case as
well we were inspired by new users having problems to find
documentation and pointers to relevant information. The new website is
available at
(Martin Bravenboer)
Compiler
The name of a module declared in a file did not really matter in the
past. This was rather frustrating in the development of xDoc. From
StrategoXT 0.9.5 the compiler outputs a warning message if the
declared module name does not correspond with the name of the file.
StrategoXT 0.9.5 fixes several bugs and shortcomings in the
user-interface of the Stratego compiler and tools of stratego-front
such as
parse-stratego
and
pp-stratego
. From this release
pp-stratego
for example accepts an
-I
flag, which can be used to
provide a search path for parse tables used for concrete object
syntax.
(Rob Vermaas)
In StrategoXT 0.9.4 compiling programs that use term arguments
resulted in loads of warnings from the C compiler. These warnings are
caused by the type declarations of the term argument, which are not
declared correctly in the C code produced by the Stratego
compiler. This problem has been fixed in this release. The declared
types of the argument are now correct for term arguments.
(Martin Bravenboer)
Stratego Standard Library
The Stratego Standard Library (SSL) in 0.9.5 features a new hashtable
implementation. Hashtables used to be handled by name in the Stratego
runtime, SSL, and custom Stratego code. It is now possible to pass
hashtables around directly, not by a name. This feature is comparable
to the Stratego
Stream
representation of native streams. Hashtables
that are created in this way will not affect other parts of the
program, unless the hashtable is passed to the code. The old table
mechanism is of course still available and is still useful to
implicitly pass information around. The new hashtable strategies
include:
new-hashtable(|initial_size, max_load)
,
hashtable-put(|key, value)
,
hashtable-get(|key)
. We are
considering to lift hashtables from the API to the language level by
providing syntax for constructing and accessing hashtables. The old
hashtable strategies (
table-get
,
table-put
etc.) will be expressed
in terms of the new strategies in the next release.
(Martin Bravenboer)
A common mistake in the SUnit unit-testing framework is forgetting a
!
before an input or output term. SUnit now provides a variant of
the unit-testing strategies that accept term arguments for the
description, input, and expected output of a test e.g.
apply-test(foo | "foo test", input, output)
(Rob Vermaas)
The SSL module
term-io
in the SSL features new strategies for writing
ATerms to strings (
write-to-string
) and vice versa
(
read-from-string
). These strategies have been added to accept ATerm
values as command-line arguments, but they should be useful in
general.
(Martin Bravenboer)
The SSL module list-set provides a general subset checker (
set-eq
,
subset
,
subseteq
). All these strategies are parameterizable with a
user-defined compare/eq strategy.
(Arthur van Dam)
Utilities
Pretty-Printing
The pp-table-diff utility from now on fails if the output should not
be used as a patch (
--patch
), but the existing pp-table is not
complete. This is useful for signaling incompleteness of the
pretty-print table during a build, especially in the buildfarm.
More information:
The pretty-print table generator
ppgen
has been extended to handle a
wider range of SDF constructs.
(Merijn de Jonge)
Syntax Definition and Parsing
SDF related tools in StrategoXT 0.9.4 are using a rather old version
of SDF, namely 2.1. There are not a lot of differences between this
SDF version and the most recent one used in PGEN 2.0, but since SDF
will undergo more heavy changes in the near future, it is important to
be up-to-date. We are working on updating our SDF tools to support the
most recent version of SDF as found in PGEN 2.0. As a first step in
this direction the sdf-front package now includes both versions of
SDF. In the next release we will no longer distribute an SDF syntax
definition, but directly work on the definition provided in the SDF
distribution.
Unfortunately some tools are still using the old syntax definition.
For example
pack-sdf
uses the new one, but
sdf-to-sig
still uses the old one. This situation will be solved in the next
release, where SDF 2.1 will not be used anymore, except for its
syntax, signatures and pretty-printer.
ParseUnit
ParseUnit, a tool for unit-testing syntax definitions, has been
extended with a concise, concrete syntax for testsuites. The new
testsuite syntax also allows partial specification of expected
outcomes by using wildcards. The concrete syntax for ParseUnit
testsuites does not require escaping of special characters in the test
input. This makes the inputs much more readable, because special
characters are in practice not special in parse testsuites.
More information:
(Martin Bravenboer)
SDF Renamed Module Generator
Syntax definitions of concrete object syntax embeddings require
renamings of the sorts of the imported syntax definitions. Defining
these renaming modules by hand is annoying and error-prone. The
sdf-tools package of StrategoXT now features
gen-renamed-sdf-module
a tool that automates this task. It takes an SDF syntax definition and
produces an SDF module that renames the sorts in some user-definable
way, by prefixing it with the language name for example.
More information:
(Martin Bravenboer)
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
Not all bugs and known problems for StrategoXT have been solved in
this release, otherwise this would release 1.0 ;). See our issue
tracking systems for reports about (open) bugs:
For an overview of features planned for future releases:
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
- Arthur van Dam
- Merijn de Jonge
- Rob Vermaas