[Seaside-dev] Re: [ANN] Port of Pier to VW

Niall Ross niallfr at btinternet.com
Thu Sep 27 11:38:42 UTC 2007


Reasonably up-to-date (less than a week old) ports of Magritte and Pier
from Squeak to VW are now in the Cincom OR.

> A first port of the Pier CMS framework from Squeak to VW is in the 
> Cincom open repository:  It prereqs Porting-Namespaces (any version 
> should be OK) and requires compatible versions of Magritte and 
> MagritteForVisualWorks (anything with '...CS12.NFR...' in the version 
> name should be OK).
>
> This version ports
>    Pier-Model-lr.150.mcz      24 April 2007 9:28:18 pm
>    Pier-Seaside-lr.147.mcz      28 March 2007 10:04:08
>    Pier-Tests-lr.69.mcz      24 April 2007 9:25:44
>    Pier-Security-lr.80.mcz      24 April 2007 10:27:20
> I will now get the latest Squeak version and port its changes likewise.
>
> The parent version holdes a raw port of the unmodified code (with 
> 'broken' blessing level as it will not work in VW, nor load very 
> well).  The child version holds the corresponding VW-ized code.
>
> See the blessing comments for port details.  I mention some points 
> here to invite discussion.
>
> Handling duplicate class names
> =====================
> Where Squeak and VW have duplicate class names (e.g. Date, Color or 
> Time) that Seaside needs, the Seaside port creates subclasses of the 
> preferred class in the target namespace, i.e. in Seaside, to get the 
> correct resolution.  With Magritte and Pier both importing Seaside, 
> and other namespaces being added, this seemed to demand a plethora of 
> same-name subclasses, one for each case in each new Squeak-importing 
> namespace, so I am trying a new approach which has worked OK for me in 
> other cases.
>
> I have made Magritte and Pier into FirstFoundNameSpaces (see 
> Porting-Namespaces package) and reordered their imports so that the 
> desired resolution of any clash is the one first found.  This avoids 
> both sides of the choice of either creating spurious subclasses or 
> make spurious simpleName-to-fullName changes in ported code.  (With 
> some minor additions, not yet published, it also makes it a lot easier 
> to load untransformed Squeak - or other single-namespace dialect - 
> code into VW and get correct resolution of all superclass names in 
> class definitions and of all class names in extension methods.)  The 
> point is that code from a single namespace dialect necessarily had the 
> same resolution of each name, so a target VW namespace that offers 
> each preferred resolution as the first-found one in all cases is 
> always possible.  (DefaultPackageNamespaces must be used in 
> *-Extensions packages to get correct resolutions in extension methods.)
>
> Comments welcome re whether this is useful
>    - while porting
>    - in general  .
>
> Set and Dictionary equality
> ==================
> (This must surely have been raised before, but my attempts to find 
> relevant past posts in any appropriate list have drawn a blank.)  Some 
> Pier test assertions rely on Squeak's implementation of equality for 
> Dictionaries and Sets, which also checks if their contents are equal.  
> In VW, Dictionary and Set equality do not check equality of contents.  
> Someone porting such code cannot provide the Squeak implementations as 
> extensions since the base VW image does not like this, producing 
> 'memory emergency' on various operations:  I deduce that some VW 
> Dictionaries and Sets have contents whose equality tests create 
> circularities with this.  I've therefore added Set>>=@ and 
> Dictionary>>=@ to provide the Squeak implementations, as the easiest 
> way to edit the failing assertions.  I chose =@ thinking the @ would 
> suggest 'is equal at (its various contents)'.  I made it binary only 
> because that makes it a little less work to rewrite the tests than 
> with a keyword method.
>
> Comments welcome, both in general and re my choice of method name.
>
> Trivial common coding style remarks
> ========================
> Most points are already known from Seaside and other ports.  One that 
> did not arise in Seaside or Magritte AFAIK is that sort/sort: returns 
> the sorter, not the sorted collection, in VW so needs code like
>    ... := ... sort ...
> changed to
>    ... := ... sort ... ; yourself
> Writing sort-in-place code this way in Squeak would make for 
> commonality when porting is expected.
>
> Since VW's class-side #raiseSignal is already common to both it and 
> Squeak (or already ported to Squeak), I've used it to replace the 
> #signal method (that it calls in Squeak) in Pier code, rather than add 
> #signal to VW.
>
>          Yours faithfully
>             Niall Ross
>
>
>






More information about the seaside-dev mailing list