A tuple is a term of the form =(t1,...,tn)=. In pre- StrategoRelease07 versions of Stratego this was syntactic sugar for =TCons(t1,...,TCons(tn,TNil))=. The idea behind this representation is the ability to define generic operations on tuples (as heterogenous lists). A typing scheme for such tuples was based on the stratified type system of Transform.MultiLevelSpecifications. However, a type system for Stratego based on these ideas never developed. Furthermore, the binary representation for tuples is hard to read in printed ATerms and is rather expensive since it requires multiple operations for matching and allocation. Another reason for this represention was that the Tools.ATermLibrary did not support tuple syntax, i.e., applications without a constructor. Based on the observation that a tuple really is an application of the constructor with the empty name, Transform.HaycoDeJong extended the Tools.ATermLibrary such that =(t1,...,tn)= is now a proper ATerm. Fixed length tuples are supported starting with StrategoRelease07. With the introduction of fixed length tuples the PairConstructor becomes obsolete. *Migration* The change in representation affects existing specifiations. Here are several scenarios and actions to be taken to migrate to the new situation. * No Tuples: No need to do anything * Tuples in specification: If tuples are used only internally then it suffices to recompile the specification. Already compiled C code should still work. * Tuples in external data: If tuples are used externally (written to file), it will be necessary to recompile the specification and regenerate all data files. * Tuples manipulated through =TCons= and =TNil=: Rewrite the parts of the specification using these constructors. See module =tuple.r= for some techniques to replace the generic operations. -- Main.EelcoVisser - 06 Jan 2002 ------ Implement tuples by means of "" constructor instead of TCons/TNil (and use (,,_) notation) -- EelcoVisser - 27 Oct 2001 The Tools.ATermLibrary has been modified to support tuple syntax thanks to Transform.HaycoDeJong. Now it is a matter of changing the representation of tuples in the compiler. The change is rather easy, but the problem is that it will break existing code depending on the =TCons/TNil= representation. This requires an impact analysis. I expect there is little use. This feature will be introduced in StrategoRelease07 -- Main.EelcoVisser - 22 Nov 2001
----- CategoryDone | LanguageExtensions