Note that Stratego is now part of the Spoofax Language Workbench, which provides an Eclipse plugin for developing SDF and Stratego, and creating Eclipse IDE plugins for your own language. See the Spoofax website for information and downloads: http://metaborg.org. This website is still available for historical purposes. Refer the new site for up-to-date documentation.


Stratego/XT

Stratego/XT is now part of the Spoofax Language Workbench, which provides an Eclipse plugin for developing SDF and Stratego, and creating Eclipse IDE plugins for your own language. See the Spoofax website for information and downloads: http://spoofax.org.

Stratego/XT is a language and toolset for program transformation. The Stratego language provides rewrite rules for expressing basic transformations, programmable rewriting strategies for controlling the application of rules, concrete syntax for expressing the patterns of rules in the syntax of the object language, and dynamic rewrite rules for expressing context-sensitive transformations, thus supporting the development of transformation components at a high level of abstraction.

The XT toolset offers a collection of extensible, reusable transformation tools, such as powerful parser and pretty-printer generators and grammar engineering tools. Stratego/XT supports the development of program transformation infrastructure, domain-specific languages, compilers, program generators, and a wide range of meta-programming tasks.

Latest Developments

2013-10-05

FTP available via HTTP

All the material of the ftp directory of strategoxt.org, including all historic releases of Stratego and Stratego/XT are now also available via HTTP:

http://ftp.strategoxt.org/

Spoofax 1.1 released

We are happy to announce the release of Spoofax 1.1! This is the first major release since version 1.0.2 and includes major features and improvements. Spoofax 1.1 supports all current Eclipse versions, up to version 4.2.2.

You can update your Eclipse from http://download.spoofax.org/update/stable

One of the most important improvements in Spoofax 1.1 is the inclusion of NaBL, the Spoofax Name Binding Language. NaBL is used in all new projects created and significantly simplifies name binding analysis, as well as any editor services that depend on it (e.g., code completion, reference resolving)

NaBL is documented at the following pages:

Other highlights of the 1.1 release include:

And there were a number of notable changes under the hood:

A comprehensive list of changes can be viewed at http://yellowgrass.org/tag/Spoofax/1.1.

2013-01-28

Spoofax Q&A

We have started a Q&A site for Spoofax to build a knowledge base of common questions and answers. Join us at http://yellowgrass.org/questions/Spoofax

2012-02-15

Spoofax 1.0.2 maintenance release

Today we're releasing a minor maintenance release of Spoofax, version 1.0.2. This release fixes a memory leak that was introduced in the 1.0 release. There are no new features in this release, those will be included in the upcoming 1.1 release instead. The new version is now available from the update site at http://spoofax.org/update/stable.

2011-12-28

Spoofax 1.0

We're pleased to announce the release of Spoofax 1.0. A number of significant new features have been added since the last stable release, a long list of bugs has been fixed, and various minor improvements were introduced.

Highlights of the release include:

The new version is now available from the update site at http://spoofax.org/update/stable.

In addition to these features, we're actively working on improving Spoofax with new features. In particular, we are now working on providing full support for debugging, on an interactive shell for Stratego and custom languages, and a new meta-language called SpoofaxLang to define languages in a more modular fashion.

A full list of feature requests and issues addressed in the new version is provided at http://yellowgrass.org/tag/Spoofax/1.0.

2010-05-28

Introducing the Spoofax Language Workbench

Installation

We're pleased to announce the 0.5 release of the Spoofax language workbench, an Eclipse plugin that seamlessly integrates Java versions of Stratego and SDF into Eclipse. Spoofax can be used to develop new languages and transformations based on SDF and Stratego in the Eclipse environment. Read on below and be sure to follow our tour with screenshots for more information.

Stratego and SDF for Java

Stratego and SDF have traditonally been implemented using C, but to increase portability we have developed Java versions of the Stratego compiler and the JSGLR parser for SDF. These new implementations are seamlessly integrated into the Spoofax environment, but can also be used as stand-alone tools.

Building programming languages with IDE support

IDE support has become essential for developers to be productive with programming languages. Spoofax provides IDE support for Stratego and SDF for developers of languages and transformations. It also aids in the development of IDE support for new languages: from the first version of an SDF grammar, an editor can be created for the language and used side-by-side with the definition in Eclipse. Using Stratego, the editor can be enhanced with transformations and semantic editor services such as reference resolving and content completion.

The screenshot below illustrates some of the IDE features supported by editors created with Spoofax (click to enlarge):

Spoofax editor features

More information

Spoofax can be downloaded from spoofax.org or strategoxt.org/Spoofax. When installed in Eclipse, the plugin provides a "New project" wizard that creates a new skeleton project illustrating some of the Spoofax features. The website also includes a tour further showcasing the features of the workbench. For migrating C-based Stratego projects to Spoofax, please read our FAQ or contact us in case of other questions.

An overview of the architecture of Spoofax and how Spoofax can be used in the development of new languages and IDE services is given in the paper The Spoofax Language Workbench. Rules for Declarative Specification of Languages and IDEs by Lennart Kats and Eelco Visser, accepted for publication at SPLASH/OOPSLA 2010. Further documentation can be found on the Spoofax website.

2008-05-24

Stack traces on "rewriting failed"

Since late March, the Stratego compiler and auxiliary libraries have supported stack traces upon rewriting failed. The following trace is taken from a typical XTC component that uses io-wrap:

./prog: rewriting failed, trace:
        main_0_0
        io_wrap_1_0
        option_wrap_5_0
        lifted144
        input_1_0
        lifted145
        output_1_0
        lifted0
        my_wrap_1_0
        foo_0_0
        bar_0_0
        zap_0_0

More details may be found in two posts to our planet.

2008-04-24

New URLs for Subversion, Releases, and Bug-tracking

All the Stratego/XT development tools have been moved to subdomains of strategoxt.org. An overview:

Thanks to Eelco Dolstra for doing most of this work!

2007-04-26

Global Variables

Stratego now supports scoped global variables. In the context of a dynamic rules section one can now write

    rules( Foo := <compute> )
which abbreviates the following commonly used programming pattern:
    x := <compute>
    ; rules( Foo : _ -> x )
The value bound in the assignment can be retrieved by the application <Foo>. The usual scoping features of dynamic rules apply to global variable as well. For more information see this blog.

2007-04-03

AspectJ-front revived, support for Microsoft Windows

The AspectJ-front package has been updated to be easier to install and be more portable. The AspectJ syntax definition of AspectJ-front heavily exercises the SDF parser generator, which used to make it rather difficult to install the package on machines with a limited amount of memory. The new packages includes the compiled parse tables and also the package is more portable, including support for native Microsoft Windows! The package now also provides a library (DLL on Microsoft Windows) for parsing and pretty-printing AspectJ source files.

2007-03-01

x86-64 support for Stratego/XT!

Stratego/XT supports x86-64 processors (in 64-bit mode) from release 0.17M3pre16744 (or later), the sdf2-bundle from release 2.4pre212034 (or later). The preliminary releases are available from our new Nix buildfarm at the TU Delft. The x86-64 support is based on a branch of the ATerm library developed by Eelco Dolstra and Erik Scheffers, and some new 64-bit patches for the sdf2-bundle. The x86-64 bit requirements are completely hidden in the ATerm library and the Auto/XT build system, thus packages based on Stratego/XT should support x86-64 machines out of the box if they do not contain custom native C code. The preliminary releases with 64-bit support will soon be used in the Stratego/XT packages integration build, which currently still refers to the Nix Buildfarm at Utrecht University. More information about the issues and the specific patches required for x86-64 support is available in a post at Subject to Meta Programming.

2007-01-18

Stratego/XT Packages Channel

The Stratego/XT packages channel now provides integration builds for Stratego/XT, its dependencies, and packages based on Stratego/XT. We have created this channel after frequent questions about which packages work together. From now on, this is the way to install the latest developments of Stratego/XT. If you install packages from this channel, then they are guaranteed to work together. If your favorite Stratego/XT package is currently not on the channel, just send us a request. If the package is maintained and in reasonable use, then we will add it to the channel.