[self-interest] Merlin and Self

Jecel Assumpcao Jr jecel at merlintec.com
Fri Jun 18 23:29:35 UTC 2004


On Friday 18 June 2004 14:47, Michael Latta wrote:
> Did you ever incorporate the concurrency ideas from TinySelf into
> your Merlin product?  Many of the Merlintec pages are very out of
> date (the english ones anyway).  What is the current status?

Sorry about the ugly and outdated pages. Unfortunately it will be a 
while before I get around to fixing that.

I am currently finishing a 16 bit implementation of a Self processor 
(see http://www.merlintec.com:8080/Oliver), but that has a very 
traditional parallelism model (lightweight threads).

The 32 (and 36) bit version is still in the design stage and does 
implement task switching in hardware using ideas from TinySelf 1. The 
main difference is that instead of having every single object run in 
parallel with all the rest, they are divided into groups which share a 
single message queue and execution stack. So messages within a group 
are sequential. A very poor and short description can be found in 
http://www.merlintec.com:8080/Software/Parallelism

The main issue is "what is an object't state?" Just the bits in its 
slots? The bits in the slots of object it points to? The bits in the 
parents? We don't want the state to become inconsistent, so we must 
avoid concurrent changes to that state.

Microlingua seems to have combined ideas from Slate and TinySelf to 
solve the problem in a way very similar to what Eiffel (from where I 
originally borrowed the idea) did:
http://www.whysmalltalk.com/Smalltalk_Solutions/ss2003/pdf/rabb.pdf

Here you lock the receiver and all the arguments before executing a 
method. I don't think that is enough -

      mySubObj counter: mySubObj counter + 1.

Since mySubObj is not the receiver nor an argument, it is not locked. Or 
actually, it is locked for "mySubObj counter", then unlocked and later 
locked again for "mySubObj counter:". Another object might point to it 
and be executing this code at the same time.

A drastic solution is to forbid sharing mySubObj, which is what Eiffel 
did. You had active objects and passive objects. The active ones were 
generally the roots of object trees, while the passive ones were the 
rest. A proper program must avoid having a passive objected pointed to 
by more than one active object. That is hard to enforce.

I hope my solution works better, but haven't really given it much 
thought yet since my focus has been on the 16 bit project. But it is 
still an ugly hack and I would love to see a better idea. It should be 
enough to keep half a dozen processors busy, however.

-- Jecel



More information about the Self-interest mailing list