Stratego Release 08
Stratego -- Strategies for Program Transformation
See
DependencyGraph08? for an overview of the dependencies between the packages involved
in Release 0.8
Release 0.8
--
EelcoVisser - 27 Jun 2002
From the NEWS file
Version 0.8
released: June 26, 2002
SUMMARY OF CHANGES
* Support for concrete object syntax is provided in the stratego-front package
- this includes the full syntax of Stratego in SDF
- a pretty-printer for Stratego
- a signature for Stratego abstract syntax
- stratego-desugar: removes simple syntactic abstractions
- meta-explode: explodes embedded abstract syntax into Stratego abstract syntax
- MetaStratego: specification of transformations on Stratego programs
using concrete syntax
- Paper "Meta-Programming with Concrete Object Syntax" -- explanation
- Paper "Building Interpreters with Rewriting Strategies" -- application
* The implementation of term annotations has been completed.
* Syntax for list variables, with implementation of very simple list
matching [t*] and [t,t*] (this is still an experimental feature;
full support to follow)
* Innermost fusion: an optimization that specializes applications of innermost
to its argument, typically a choice of rules.
- Paper "Fusing logic and control with local transformations:
An example optimization."
* Use of configuration ATerm files instead of wrapper scripts
* Better usage information for `sc -h'
* Changes and deletions to overcome problems with case insensitiveness on
windows and macos; Stratego should now install on Windows+cygwin
* Lower-level primitives for process control such as fork, exec, and pipe.
High-level combinations to connect to a child process via a
pipe. (experimental feature)
* Stratego-connect: a separate package extending Stratego with interprocess
communication (experimental; this package is not yet part of the standard
stratego bundle because of portability problems)
MORE INFORMATION
* http://www.stratego-language.org/Stratego/StrategoRelease08
CONTRIBUTIONS
* Martin Bravenboer provided test suite and library modules for
annotations
* Collaboration with Patricia Johann on the reimplementation of
innermost fusion with dynamic rules and concrete syntax
* Merijn de Jonge worked on porting to Cygwin
* Eelco Dolstra worked on porting to MacOS
CONFIGURATION
* See ./configure --help for all configuration options. Here are some
typical configurations:
* To get a Stratego installation without concrete syntax configure as
./configure --prefix=`pwd` \
--with-aterm=/home/xt/XT-1.0
assuming that the aterm installation in /home/xt/XT-1.0 is used. This
set-up will not compile the sources in stratego-front *and* will also
not compile the source of the Stratego compiler in sc.
* To use concrete syntax a number of additional configuration parameters are
required. For example, this is how I configure the stratego distribution:
./configure --prefix=`pwd` \
--with-aterm=/home/xt/XT-1.0 \
--with-sglr=/home/xt/XT-1.0 \
--with-pgen=/home/xt/XT-1.0 \
--with-asfix-tools=/home/xt/XT-1.0 \
--with-stratego-tools=/home/xt/XT-1.0 \
--with-sdf-tools=/home/xt/XT-1.0 \
--enable-concrete
The components in the stratego-front package are not bootstrapped, i.e.,
require the Stratego compiler. However, the generated C files are
included in the distribution.
This requires an installation of XT-1.0. Future distributions of XT will
integrate the Stratego packages with concrete syntax support. A minimal
bundle for Stratego with concrete syntax will also be provided.
* To bootstrap the compiler sources in sc/ use the option
--enable-boot
This requires configuring the options needed for concrete syntax, since some
of the compiler components are written in MetaStratego.
* To install on Windows platform with Cygwin use the --enable-exe option.
STRATEGO FRONT (CONCRETE SYNTAX)
* Support for concrete syntax is provided in the stratego-front package, including
- Stratego.sdf: the full syntax of Stratego in SDF
- astratego2text: a pretty-printer for Stratego
- Stratego.r: a signature for Stratego abstract syntax
- stratego-desugar: removes simple syntactic abstractions
- meta-explode: a transformation that translates embedded abstract syntax
into Stratego abstract syntax
- MetaStratego: specification of transformations on Stratego programs
using concrete syntax
* Paper
- E. Visser. Meta-programming with concrete object syntax.
In D. Batory and C. Consel, editors, Generative Programming and
Component Engineering (GPCE'02), Lecture Notes in Computer
Science. Springer-Verlag, October 2002. To appear.
- Describes the use and implementation of concrete syntax in Stratego and
extends the approach to arbitrary (meta-)programming languages.
- http://www.stratego-language.org/Stratego/MetaProgrammingWithConcreteObjectSyntax
* Example
- An example of the use of concrete syntax is provided in the lambdapp package,
which contains the specification from the LDTA'02 paper "Building
Interpreters with Rewriting Strategies"; a collection of interpreters for
the lambda calculus extended with pattern matching rules, failure, and choice.
- http://www.stratego-language.org/Stratego/BuildingInterpretersWithRewritingStrategies
- http://www.stratego-language.org/ftp/lambdapp-0.1.tar.gz
STRATEGO COMPILER (SC, SC-BOOT)
* Innermost fusion
- An optimization that specializes applications of innermost
to its argument, typically a choice of rules. This an elaboration
of the optimization described in the WRS'01 paper "Fusing Logic and
Control".
- http://www.stratego-language.org/Stratego/FusingLogicAndControl
* The implementation of annotations has been completed
* Syntax for list variables, with implementation of very simple list
matching [t*] and [t,t*] (this is still an experimental feature;
full support to follow)
* Use of configuration ATerm files instead of wrapper scripts.
* Better usage information for `sc -h'.
STRATEGO STANDARD LIBRARY (SSL)
* Installing .rtree files (parsed modules) instead of .r files
(sources); saves time when compiling and ensures syntactic
correctness of library modules. First step towards separate
compilation.
* simple-list-traversal.r, spec/env-list-traversal.r: generic
traversals in which lists are traversed by visiting head and tail,
instead of visiting all elements (behaviour of all). Contributed by
Otto Skrove Bagge.
* fixpoint-traversal.r: innermost-tagged uses annotations to tag
terms that are in normal form.
* annotations.r: List of annotations. Additional operators for
annotations: has-annotation, if-annotation, preserve-annotation
(Martin Bravenboer) test in annotations-test.r
* annotations-test.r: Contains an extensive set of unit tests describing
the behaviour of annotations.
* annotation-props.r: key/value pairs
* config.r: Maintenance, import, and export of configuration
information such as locations of executables and data files.
* options.r: Use set-config to store option values in configuration
table. Use <run-time> instead of dtime to measure time in iowrap.
* time.r: support for time measurements extended with primitives calling
the system calls clock and time. Module time defines a number of useful
abstractions over this. In particular, <run-time> returns the seconds
of total run-time so far, including the run-time of all child processes.
The operator profile(msg, s) measures the time used to apply s and then
prints user and system time, including children time.
* dir.r: <readdir> d gives list of filenames of directory d
* exec.r, Lower-level primitives for process control such as
fork, exec, and pipe.
* pipe.r: High-level combinations to connect to a child process via a
pipe. (experimental)
STRATEGO-CONNECT
* This package provides an implementation of interprocess communication for
Stratego. This package is experimental and not quite flushed
out. There might be portability problems. Therefore, stratego-connect is
not yet bundled in the main distribution. The basic
implementation was made by Hedzer Westra.