[squeak-dev] Xtreams : first embryonary port on Squeak

Levente Uzonyi leves at elte.hu
Sun Oct 10 01:19:53 UTC 2010


On Sun, 10 Oct 2010, Nicolas Cellier wrote:

> So, I started a quick port of VW Xtreams to Squeak this evening.
> Only the Xtreams-Core and the trivial Xtreams-Terminals (no
> file/pipe/socket/pointer).
> You'll find code at http://www.squeaksource.com/XTream.
> My previous experimental Xtream project has been renamed SqueaXTream
> to reduce confusion, but still sits in the same project.
> Please find my report below.

Great. :)

>
> cheers
>
> Nicolas
>
> --------------------- REPORT  ---------------------
>
> THE CONTENTS:
>
> This first port is made of 3 packages
> - Xtreams-Core
> - Xtreams-Terminals
> - Xtreams-VWCompatible
> Plus 2 tests
> - Xtreams-CoreTests
> - Xtreams-TerminalsTests
> Please notice I removed one hyphen from test package names for MC compatibility.
>
> THE PROCEDURE:
>
> I didn't use FileOut30 not any more advanced tool, but just a simple
> copy/paste strategy.
> This gave me a chance to do a fast review of code.
> For porting the future evolutions of VW Xtreams, more advanced tools
> will be necessary, the manual approach does not scale.

If you can create a diff from the VW changes, then porting "by hand" 
shouldn't be hard.

>
> THE MODIFICATIONS:
>
> The changes I made are quite restricted, which indicates that Xtreams
> is not that hard to port.
> Main changes are due to lack of namespace in Squeak:
> - I added a XT prefix to every Xtreams classes (no Namespace in Squeak)
> - I added XTPools, a SharedPool for holding the single Xtreams
> namespace variable DefaultBufferSize
> - I transformed class SharedVariables into class variables and added
> proper class side initialization for these in XTWriteStream
>
> For the rest, I tried to not change Xtreams contents. but rather did
> implement VW compatible messages when possible in the
> Xtreams-VWCompatible package when they did not exist in Squeak.
> These message are a full rewrite and are also released under MIT license.
> The few exceptions are:
> - I modified originator -> self originator in XTIncomplete.
> - I changed the senders of #newInFixedSpace: to rather send an #error:
> 'not implemented in Squeak' in XTRecyclingBuffer
> - I replaced #waitIfCurtailedSignal/#signal with a #critical: section
> in XTRecyclingBuffer
> - I replaced  Core.Timer after:do: with self after:do: in Xtreams-CoreTests
>
> A DISCUSSION OF TECHNICAL DETAILS:
>
> I first attempted to replace #growToAtLeast: with #grownBy: because
> Squeak become: is notoriously inefficient.
> But obviously, this did not work, the tests rely on destination
> preserving its identity.
> This clearly is going to degrade micro benchmarks when the destination
> collection capacity is not well adjusted in advance.
> I think we should discuss this particular point. Is identity
> preservation absolutely required, or just convenient ?

I've never seen a real world example where this identity preservation was 
useful, but it causes trouble when literals aren't immutable. IMHO the 
#become: send is just convenient with VW's stream implementation and it 
has no advantage over Squeak's approach.

>
> THE STATUS OF TESTS:
>
> Tests do not all pass. There seems to be a bug in Squeak
> #replace:from:to:with: when the replacement is the collection itself,
> moved to the right (this is with a COG VM).

#replace:from:to:with: is not supposed to work for moves. IIRC the 
primitive version uses memcpy (or strncpy), so moving to the left works 
just because the undelying C function supports it. I used to (ab)use this 
feature though.


Levente

>
> THE FUTURE:
>
> I will probably continue porting with reduced activity, so I invite
> any interested person to help. Right now, the project is world
> writeable, code commited here falling under MIT license.
>
>



More information about the Squeak-dev mailing list