In memory sources file
- I slightly improved the PR for integration of the sources file inside the
object memory. Now it will be possible to extract them back to the disk
from the menu so everything can work as before. I'm not sure if it will be
integrated into Pharo 7 or we will wait for Pharo 8 but it seems to be
prepared.

File API and caching
- because the in-memory sources file do not use deprecated
MultiByteFileStream, I played with the new file API and discovered
that ZnCharacterReadStream on File is about 10 times slower than the
old MultiByteFileStream. That's because ZnCharacterReadStream does not use
any cache. For better speed the ZnBufferedReadStream needs to be used like
this:

readStream := File openForReadFileNamed: 'file.txt'.
zn := ZnCharacterReadStream on: readStream encoding: #UTF8.
buffered := ZnBufferedReadStream on: zn.
[ buffered atEnd ] whileFalse: [ buffered next: 20000 ].

However the ZnBufferedReadStream is by design only a linear stream and the
position cannot be changed and thus it cannot be used for *.sources files
etc. We will need to prepare a positionable alternative.

Ring 2 integration
- I was working on replacing of the old Ring with the new reimplementation.
The old Ring is used on many sensitive places in the system. Mainly in
tools however it is used by Monticello and Epicea too so to try to remove
it is like to cut a branch below yourself on an undermined tree. The
approach of the old and new Ring is in many senses very different and the
full compatibility will not be supported. I partly provide compatibility
API, partly adopt the code directly.
- The real system and the model is mixed many times in the users of the old
Ring. For example a model for a method is created but then when the package
of the method is asked, it is already a real package, not its model. Such
places need to be cleaned.
- I already have an image that has no old Ring code at all but because of
some memory leaks caused by the mixtures of the models and real system I
was not able to bootstrap it successfully. More work is needed.
- I discovered that the image has a serious memory leak caused by
Iceberg/GT and Announcers but I still need to find more information about
it.

Smalltalk archeology
- during the free days on the beginning of the year I looked at
Smalltalk-78. I extracted the data from Lively Kernel so the original image
can read from external files, not only the recent updated ones.
- Then I looked at SqueakJS again and tried to reproduce Craig's
experiments with Pharo on it. Generally it is about 100 times slower than
native Pharo which makes it hard to use for real-life tasks. However it
would be pity to do not provide at least basic attention to it because in
some cases it may be really useful.

Cheers,
-- Pavel

Reply via email to