Stratego version 0.7 is now available.
-- Main.EelcoVisser - 13 Mar 2002
----
New in 0.7beta
* FixedLengthTuple
* ListConstructor
* ListTraversal
* PairConstructor
New in 0.7beta1
* GlobalBacktracking
* ConstantTermCaching
New in 0.7beta2
* GuardedLeftChoice
New in 0.7beta3
* StrategoSyntax updated to 0.7
* TermAnnotation
* PackStrategoShouldFailOnParserFailure
* GetOpt
* ConnectProcess
-- Main.EelcoVisser - 09 Jan 2002
-------
Version 0.7
released: March 13, 2002
SUMMARY OF CHANGES
(with respect to release 0.6.4)
* Support for `native' ATerm lists and tuples
* List traversal: lists considered as varyadic constructors
* Global choice operators ++ and <++ support global backtracking
* Bagof returns list of all possible results for ++ and <++
* Guarded left choice s1 < s2 + s3 commits after s1 succeeds
* Support for term annotations t1{t2}
* Many new library strategies
* Constant term caching in the compiler
DEPENDENCIES
* aterm-1.6.6: aterm library with support for tuples
* cpl-stratego-0.4: choice point library from INRIA (Nancy) with
some modifications (optional)
MIGRATION
* Existing code based on generic tuples (TCons/TNil) should be
rewritten
MORE INFORMATION
* http://www.stratego-language.org/Stratego/StrategoRelease07
CONTRIBUTIONS
* Bug reports by Martin Bravenboer (<++), Dick Kieburtz
(configuration), Otto Skrove Bagge (mapping reverse)
* Bug fixes: Eelco Dolstra & Eelco Visser (Sun/ATmap bug)
* Library contributions: connect.r (Hedzer Westra), getopt.r (Otto
Bagge), restore (Martin Bravenboer)
LANGUAGE
* The operators ++ and <++ provide global non-deterministic and
global deterministic choice, respectively.
* For symmetry, the choice operators +> and ++> give priority
to their _right_ strategy argument.
* The operator bagof(s) returns the list of all possible
results produced by s.
* The operator cpl-loaded (and friends) tell you whether you
are running in an environment with the choice point library
loaded (module cpl.r in the library).
* The guarded left choice operator s1 < s2 + s3 is similar to
(s1; s2) <+ s3, except that the choice is committed after s1
has succeeded, i.e., no backtracking to s3 if s2 fails.
* List constructors [_|_] and [] are no longer interpreted as syntactic
sugar for Cons and Nil.
* Tuple constructors TCons(_,_) and TNil are replaced by fixed length
tuples (_,_,_,...). There is a tuple constructor for each arity.
Parentheses around a term no longer represents a tuple, but the term
itself, i.e., (t) == t. A lot of confusion arose because of (t) not
being equal to t.
* Term annotations can be used to attach information to a term without
affecting its structure, i.e., arities or names of constructors. Syntax:
t1 { t2 } denotes the annotation of term t1 with term t2. By making
the annotation into a list, many different annotations can be attached
to a term. Proposals for linguistic support for such annotation lists
are welcome.
COMPILER
* The translation to C has been adapted to support native lists.
* Implementation of native tuples is handled in the front-end; tuples
are just special constructors.
* The C back-end has been adapted to perform constant term caching.
This means that terms that are constant _at compile time_ are
constructed once at program startup and cached in global variables
for later use.
* Compiler quits after finding a parse error instead of struggling
on for a while.
RUN TIME SYSTEM
* Adapted the Stratego Run-Time System to (conditionally) include the
Nancy Choice Point Library. This provides an alternative
implementation for choice from the current one---although it comes
down to the same thing, i.e., setjmp and longjmp. The advantage of
this addition is that it enables global choice. For programs only
using local choice this extension is transparent. By choosing the
--with-cpl switch of srts/configure the choice point library will
be used. By default the old implementation is used. For programs
using the new ++ and <++ operators the --with-cpl flag should be
used.
* Choice buffer overflow repaired (?) when using cpl
* Include files are now installed in $prefix/include/srts to avoid
file name clashes with other packages.
* There was a bug in the definition of ATmap in aterm-extension.c, which
caused the new implementation of the generic traversal operators
to malbehave on lists. (ED + EV)
LIBRARY
* Include files are installed in $prefix/include/ssl to avoid
file name clashes with other packages.
* cpl.r: test if Choice Point Library is installed.
- cpl-loaded: succeeds if CPL is loaded
- if-cpl-loaded(s): do s when loaded, otherwise exit 0
- if-cpl-loaded(s1, s2): do s1 when loaded, otherwise s2
* list-set.r
- postorder-collect(s) selects all subterms for which s
succeeds and returns them in post-order.
* list-filter.r:
- partition(s): partitions list in a list with elements for
which s succeeds, and one for which s fails
* integers.r:
- Operator log2 takes the base 2 logarithm.
- Constructor Infinite represents infinity,
- Operatorsadd-inf and lt-inf are aware of Infinite.
* simple-traversal.r:
- Strategy bottomup-para(s) implements paramorphism,
which applies s at pair of orignal term and term in
which the subterms have been transformed.
* getopt.r:
- This module parses command line arguments and build an option table
for convenient retrieval. Non-option arguments are returned to
the caller. Traditional Unix / GNU option syntax is supported.
(Otto Skrove Bagge)
* connect.r:
- Inter process communication for Stratego programs. (Hedzer Westra)
* annotations.r:
- Support for annotations
* conditional.r:
- restore(s, rest): call restoring operation rest when s fails
and then still fail
- restore-always(s, rest): also call rest when s succeeds
------
ReleasePlan | StrategoDownload