[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
|