<div dir="ltr">Hi guys, <div><br></div><div>As part of my PhD thesis I did take a deep look to ImageSegment before starting with Fuel. I wrote a journal paper about my experiments with ImageSegment which I thinks provides quite a documentation that is not written anywhere. Hope it helps: <a href="http://rmod.lille.inria.fr/archives/papers/Mart11c-COMLAN-ObjectSwapping.pdf">http://rmod.lille.inria.fr/archives/papers/Mart11c-COMLAN-ObjectSwapping.pdf</a></div><div><br></div><div>Best, </div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 19, 2015 at 10:18 PM, Chris Cunnington <span dir="ltr">&lt;<a href="mailto:brasspen@gmail.com" target="_blank">brasspen@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">As I&#39;ve never seen (even on the wiki) an even halfway decent demonstration of using an ImageSegment, I&#39;m providing on here.<br>
<br>
    hex := Browser allInstances first.<br>
<br>
    &quot;let&#39;s check what we&#39;re saving to compare with later&quot;<br>
    (hex buildWith: ToolBuilder default) openInWorld<br>
<br>
    exporting := (ImageSegment new copyFromRootsForExport: (Array with: hex)).<br>
<br>
    “let’s put it on disk”<br>
    exporting  writeForExport: &#39;browser.extSeg&#39;.<br>
<br>
    &quot;Quit your image without saving. Actually, to get the full effect go to <a href="http://ftp.squeak.org" rel="noreferrer" target="_blank">http://ftp.squeak.org</a> and get a fresh image of the same kind you exported with. Drag browser.extSeg into the new image directory&quot;<br>
<br>
    “let’s pull it in from the disk”<br>
    importing := (FileDirectory default readOnlyFileNamed: &#39;browser.extSeg&#39;) fileInObjectAndCode.<br>
<br>
    &quot;let&#39;s check what we imported to see if it&#39;s what we saved&quot;<br>
    ((importing originalRoots first) buildWith: ToolBuilder default) openInWorld<span class="HOEnZb"><font color="#888888"><br>
<br>
Chris</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On 2015-08-19 8:12 PM, David T. Lewis wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I think that image segments are a worthwhile idea, regardless of whether<br>
we are worried about support project saving and other image conversion<br>
issues. Here is a post by Dan Ingalls from 1999 that summarizes the work<br>
on image segments at that time:<br>
<br>
   <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/1999-October/014604.html" rel="noreferrer" target="_blank">http://lists.squeakfoundation.org/pipermail/squeak-dev/1999-October/014604.html</a><br>
<br>
Dan also mentioned it in &quot;the future of Squeak, 1999&quot;:<br>
<br>
   <a href="http://wiki.squeak.org/squeak/393" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/393</a><br>
<br>
It is quite clear that saving projects was a proof of concept to illustrate<br>
what might be done with image segments, but the overall motivation had more<br>
to do with exploring modularity and mechanisms for delivering minimal images.<br>
<br>
Tim Rowledge added a comment to that effect here:<br>
<br>
   <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/1999-October/014604.html" rel="noreferrer" target="_blank">http://lists.squeakfoundation.org/pipermail/squeak-dev/1999-October/014604.html</a><br>
<br>
I will also note that Spur is not the first time we have needed to think<br>
about making image segments work on a new image format. When Dan Ingalls and<br>
Ian Piumarta announced the first 64-bit Squeak image, they said &quot;We may ask for<br>
help from the Squeak community in converting the remaining plugins, and also<br>
image segment code.&quot;<br>
<br>
   <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2004-August/081383.html" rel="noreferrer" target="_blank">http://lists.squeakfoundation.org/pipermail/squeak-dev/2004-August/081383.html</a><br>
<br>
Quite a few of the things that Dan and Ian asked for help on have since been<br>
done, but I don&#39;t think that image segment support for the 64-bit image was<br>
among them. With the arrival of Spur, and the upcoming Spur 64-bit image, it<br>
would be great if we can put some thought and effort into doing this right.<br>
<br>
$0.02,<br>
<br>
Dave<br>
<br>
<br>
On Wed, Aug 19, 2015 at 02:09:32PM -0700, Eliot Miranda wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  Hi All, but especially Tobias,<br>
<br>
     as we know, ImageSegments are broken in Spur. They work occasionally,<br>
but when stressed the VM ends up crashing.  The fundamental issue is that<br>
the ImageSegment code makes assumptions about object ordering that Spur<br>
violates.  For example, here&#39;s ImageSegment&#39;s install:<br>
<br>
install<br>
&quot;This operation retrieves the segment if necessary from file storage,<br>
installs it in memory, and replaces (using become:) all the root stubs with<br>
the reconstructed roots of the segment.&quot;<br>
<br>
| newRoots |<br>
state = #onFile ifTrue: [self readFromFile].<br>
state = #onFileWithSymbols ifTrue: [self readFromFileWithSymbols.<br>
endMarker := segment nextObject. &quot;for enumeration of objects&quot;<br>
endMarker == 0 ifTrue: [endMarker := &#39;End&#39; clone]].<br>
(state = #active) | (state = #imported) ifFalse: [self errorWrongState].<br>
newRoots := self loadSegmentFrom: segment outPointers: outPointers.<br>
state = #imported<br>
ifTrue: [&quot;just came in from exported file&quot;<br>
arrayOfRoots := newRoots]<br>
ifFalse: [<br>
arrayOfRoots elementsForwardIdentityTo: newRoots].<br>
state := #inactive.<br>
Beeper beepPrimitive<br>
<br>
So before the image segment bytes (the segment inst var) is loaded, the<br>
object after it is assigned to endMarker, and if there isn&#39;t an object<br>
after segment, a new object (&#39;End&#39; clone) is assigned to endMarker.<br>
<br>
This makes the assumption that objects are allocated in a strict order, and<br>
therefore endMarker will always be the object after segment.<br>
<br>
Loading the segment via &quot;newRoots := self loadSegmentFrom: segment<br>
outPointers: outPointers&quot; then turns segment into a zero-length WordArray<br>
and its contents into the objects loaded by the segment.  Therefore, in the<br>
V3 system, the objects loaded from segment can be enumerated starting at<br>
segment nextObject and repeating until endMarker is found:<br>
<br>
allObjectsDo: aBlock<br>
&quot;Enumerate all objects that came from this segment.  NOTE this assumes that<br>
the segment was created (and extracted).  After the segment has been<br>
installed (install), this method allows you to enumerate its objects.&quot;<br>
| obj |<br>
<br>
endMarker == nil ifTrue: [<br>
^ self error: &#39;Just extract and install, don&#39;&#39;t writeToFile:&#39;].<br>
segment size ~= 1 ifTrue: [<br>
^ self error: &#39;Vestigial segment size must be 1 (version word)&#39;].<br>
<br>
obj := segment nextObject.  &quot;Start with the next object after the vestigial<br>
header&quot;<br>
[obj == endMarker] whileFalse:  &quot;Stop at the next object after the full<br>
segment&quot;<br>
[aBlock value: obj.<br>
obj := obj nextObject].  &quot;Step through the objects installed from the<br>
segment.&quot;<br>
<br>
Now, as written, this just won&#39;t work in Spur.<br>
<br>
a) the only place where there is any kind of stable order to objects is in<br>
oldSpace, so segment /has/ to be forced to old space to have any chance of<br>
its objects being in order when it gets converted from bytes to objects.<br>
<br>
b) &#39;End&#39; clone will be in newSpace and so endMarker isn&#39;t reliable unless<br>
it was obtained by segment nextObject when segment was already in oldSpace.<br>
<br>
So it is perhaps possible to fix ImageSegments in Spur by forcing segment<br>
to oldSpace and being more careful with endMarker.  But I think there is a<br>
better way.<br>
<br>
If the set of objects the segment contains can be obtained some how then<br>
this set can be simply enumerated, not depending on nextObject.  The<br>
primitive has to answer the array of roots, so its result can&#39;t be changed<br>
to be the entire array.  But segment could be becomed into an Array of all<br>
the objects in segment prior to it being loaded, in which case the above<br>
would become<br>
<br>
<br>
install<br>
&quot;This operation retrieves the segment if necessary from file storage,<br>
installs it in memory, and replaces (using become:) all the root stubs with<br>
the reconstructed roots of the segment.&quot;<br>
<br>
| newRoots |<br>
state = #onFile ifTrue: [self readFromFile].<br>
state = #onFileWithSymbols ifTrue:<br>
[self readFromFileWithSymbols].<br>
(state = #active) | (state = #imported) ifFalse: [self errorWrongState].<br>
newRoots := self loadSegmentFrom: segment outPointers: outPointers.<br>
state = #imported<br>
ifTrue: &quot;just came in from exported file&quot;<br>
[arrayOfRoots := newRoots]<br>
ifFalse:<br>
[arrayOfRoots elementsForwardIdentityTo: newRoots].<br>
state := #inactive.<br>
Beeper beepPrimitive<br>
<br>
allObjectsDo: aBlock<br>
&quot;Enumerate all objects that came from this segment.  NOTE this assumes that<br>
the segment was created (and extracted).  After the segment has been<br>
installed (install), this method allows you to enumerate its objects.&quot;<br>
| obj |<br>
<br>
segment isArray ifFalse:<br>
[^ self error: &#39;Segment hasn&#39;&#39;t been loaded?&#39;].<br>
<br>
segment do: aBlock<br>
<br>
and the endMarker instVar would be deleted.<br>
<br>
I am willing and ready to modify the primitive to convert the segment<br>
correctly.  Who will volunteer to rewrite the image-level ImageSegment code<br>
to use the new primitive?<br>
<br>
<br>
<br>
On Wed, Aug 12, 2015 at 10:40 PM, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt;<br>
wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Tobias,<br>
<br>
On Wed, Aug 12, 2015 at 10:18 PM, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all<br>
On 13.08.2015, at 02:15, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Tobias,<br>
<br>
    forget that. I found it.  THis right?<br>
<br>
Trunk test suite for Spur<br>
Using existing cogspur r.3410<br>
cp -r /var/lib/jenkins/workspace/Trunk/default/target/cogspur.r3410<br>
</blockquote>
/tmp/d20150812-28620-etbikj<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   image test suite<br>
VM: /tmp/d20150812-28620-etbikj/cogspur.r3410/cogspurlinuxht/bin/squeak<br>
/tmp/d20150812-28620-etbikj/cogspur.r3410/cogspurlinuxht/bin/squeak<br>
</blockquote>
-version<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
/var/lib/jenkins/workspace/Trunk/default/<a href="http://tests.st" rel="noreferrer" target="_blank">tests.st</a><br>
spawning command 0 with timeout 1800 seconds:<br>
</blockquote>
&quot;/tmp/d20150812-28620-etbikj/cogspur.r3410/cogspurlinuxht/bin/squeak&quot;<br>
&quot;-vm-sound-null&quot; &quot;-vm-display-null&quot;<br>
&quot;/var/lib/jenkins/workspace/Trunk/default/target/SpurPostTestTrunkImage.image&quot;<br>
&quot;../<a href="http://tests.st" rel="noreferrer" target="_blank">tests.st</a>&quot;<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(Command started with PID 28643)<br>
2015-08-12T23:31:48.17+01:00: Loading Hudson build tools... from<br>
</blockquote>
/var/lib/jenkins/workspace/Trunk/default/target/HudsonBuildTools.st<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2015-08-12T23:31:48.388+01:00: Running tests...<br>
setsockopt: Protocol not available<br>
setsockopt: Protocol not available<br>
28646:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown<br>
</blockquote>
protocol:s23_clnt.c:612:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Recursive not understood error encountered<br>
<br>
<br>
I bet this is ImageSegment related.<br>
</blockquote>
It sure is.<br>
<br>
         BitmapStreamTests&gt;testMatrixTransform2x3WithImageSegment<br>
sends<br>
         BitmapStreamTests&gt;validateImageSegment<br>
<br>
</blockquote>
  Basically the ImageSegment code has been working in Spur on a hope and a<br>
prayer.  The code assumes objects are allocated in chronological order and<br>
that this order is preserved, not so with Spur.  So post image segment<br>
loading someObject/nextObject is used to enumerate the objects loaded.<br>
This can&#39;t work reliably in Spur.  I *think* (ok I hope) that I&#39;ve<br>
implemented the segment load primitive in Spur to answer an Array of the<br>
objects loaded, so that these can be explicitly enumerated.<br>
<br>
So the job is a) to check that I have indeed implemented the primitive to<br>
do this and b) to rewrite the image segment loading code in the light of<br>
this.<br>
<br>
David, this is an example of something that isn&#39;t back portable and should<br>
not be back-ported.<br>
<br>
The most strange thing is that I cannot reproduce this on my Mac???<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There the test does not crash the image???<br>
<br>
</blockquote>
Well then it may be a signed/unsigned bug in image loading instead.  On<br>
linux the image typically gets loaded quite high in the address space and<br>
so a good portion of the heap ends up above 0x7FFFFFFF, or negative<br>
territory if misinterpreted as signed integers.  On Mac and Windows the<br>
image tends to get loaded quite low and so has to be pretty big to fall<br>
foul of signedness issues.<br>
<br>
<br>
Busy right now but will check tomorrow.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Best regards<br>
         -Tobias<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Wed, Aug 12, 2015 at 5:11 PM, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt;<br>
</blockquote>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Tobias,<br>
<br>
On Wed, Aug 12, 2015 at 12:49 PM, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt; wrote:<br>
<br>
On 12.08.2015, at 20:55, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt; wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All,<br>
<br>
<br>
     Fabio&#39;s kindly done most of the changes.  But some questions<br>
</blockquote></blockquote>
remain for more general discussion.  See below.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Fabio,  thanks so much for doing this, and so quickly!<br>
<br>
On Tue, Aug 11, 2015 at 8:51 PM, Eliot Miranda &lt;<br>
</blockquote></blockquote>
<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All,<br>
<br>
     who will update <a href="http://squeak.org/downloads/" rel="noreferrer" target="_blank">http://squeak.org/downloads/</a> to include the 5.0<br>
</blockquote></blockquote>
release?<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
a) I suggest that the 5.0 all-in-one have a line in the left-hand<br>
</blockquote></blockquote>
table that includes the 4.6 release and that it precede the 4.6 release in<br>
the list.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Done.<br>
<br>
<br>
b) the Trunk link points to TrunkImage.zip which contains a non-Spur<br>
</blockquote></blockquote>
image.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So this is the biggie.  What should we do?<br>
<br>
- add a Trunk 5.0 build with a different link?  (Noooooo)<br>
<br>
- change  <a href="http://build.squeak.org/job/SqueakTrunk" rel="noreferrer" target="_blank">http://build.squeak.org/job/SqueakTrunk</a> to build what it<br>
</blockquote></blockquote>
says (Yessss please, who can do this?)<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Done: <a href="http://build.squeak.org/job/Trunk/" rel="noreferrer" target="_blank">build.squeak.org/job/Trunk/</a><br>
But as I said several times, Spur/trunk test just crash for month???<br>
<br>
can you point me to the crash?  I&#39;m looking at<br>
</blockquote>
<a href="http://build.squeak.org/job/Trunk/default/lastBuild/#showFailuresLink" rel="noreferrer" target="_blank">http://build.squeak.org/job/Trunk/default/lastBuild/#showFailuresLink</a><br>
and see 8 test failures but no crash.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- add a Squeak 4.6 build job?  Is that even worth it any more<br>
</blockquote></blockquote>
considering 4.6 is released and stable?  If it is then what should it<br>
build?  David?<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
c) Spur VMs need to be linked to by an added line in the Virtual<br>
</blockquote></blockquote>
Machines list.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Not applicable.  the VM links point to the root of my site so they<br>
</blockquote></blockquote>
effectively point to both old and Spur VMs.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
d) Spur imagers need to be included in the Image and Changes list<br>
</blockquote></blockquote>
under Custom Installation<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Done.<br>
<br>
<br>
<br>
e) The SqueakV50.sources file also needs to be included in the<br>
</blockquote></blockquote>
Current Sources list.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Done.<br>
<br>
<br>
f) we could start a History list for the 5.0 line<br>
<br>
This is probably quite a big reorg on the page and not urgent.<br>
<br>
<br>
So there are a few things to fix before 5.0 is freely downloadable.<br>
<br>
On Tue, Aug 11, 2015 at 8:23 PM, Chris Muller &lt;<a href="mailto:ma.chris.m@gmail.com" target="_blank">ma.chris.m@gmail.com</a>&gt;<br>
</blockquote></blockquote>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In the 17 months since Squeak 4.5 was released, a huge development<br>
effort took place to create the next generation virtual-machine for<br>
the Squeak / Pharo / Newspeak family of programming systems.  Squeak<br>
is the modern incarnation of the Smalltalk-80 programming environment<br>
originally developed at the Xerox PARC.<br>
<br>
&quot;Squeak 5&quot; introduces this new VM and associated new memory model,<br>
collectively referred to as &quot;Spur&quot;.  Presented [1] by Eliot Miranda<br>
and Cl??ment B??ra at the 2015 International Symposium on Memory<br>
Management, this new VM affords Squeak applications a significant<br>
boost in performance and memory management.  Among other<br>
optimizations, the #become operation no longer requires a memory scan.<br>
Object pinning and ephemerons are also now supported.  The release<br>
notes [2] provide more details.<br>
<br>
The new memory model requires a new image file format.  Although this<br>
new format results in about a 15% increased memory requirement for the<br>
same number of 4.x objects, a new segmented heap allows memory to be<br>
given back to the OS when its no longer needed, a great benefit for<br>
application servers.<br>
<br>
As forward compatibility is as important to the Squeak community as<br>
backward compatibility, Squeak 5 is delivers an image with identical<br>
content as the recent 4.6 release.  Although this new Squeak 5 VM<br>
cannot open images saved under the prior 4.x Cog format, objects and<br>
code can be easily exported from the 4.x image and then imported into<br>
Squeak 5.  Applications whose code runs strictly above the Smalltalk<br>
meta layer will prove remarkably compatible with the new format, most<br>
applications will require no changes whatsotever.<br>
<br>
Squeak 5 is the result of monumental effort by a tiny group of very<br>
talented people, but its also just the beginning of yet a new effort;<br>
Spur is just a stepping stone to a more ambitious goals planned over<br>
the next five years.<br>
<br>
[1] -- A Partial Read Barrier for Efficient Support of Live<br>
Object-oriented Programming<br>
<br>
</blockquote></blockquote>
<a href="http://conf.researchr.org/event/ismm-2015/ismm-2015-papers-a-partial-read-barrier-for-efficient-support-of-live-object-oriented-programming" rel="noreferrer" target="_blank">http://conf.researchr.org/event/ismm-2015/ismm-2015-papers-a-partial-read-barrier-for-efficient-support-of-live-object-oriented-programming</a><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
[2] -- Squeak 5 Release Notes<br>
<a href="http://wiki.squeak.org/squeak/6207" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/6207</a><br>
</blockquote></blockquote>
<br>
<br>
<br>
<br>
</blockquote>
<br>
--<br>
_,,,^..^,,,_<br>
best, Eliot<br>
<br>
</blockquote>
<br>
<br>
-- <br>
_,,,^..^,,,_<br>
best, Eliot<br>
</blockquote>
<br>
</blockquote>
<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Mariano<br><a href="http://marianopeck.wordpress.com" target="_blank">http://marianopeck.wordpress.com</a><br></div>
</div>