Squid plan
Michael van der Gulik
mikevdg at hetnet.nl
Sat May 10 14:23:04 UTC 2003
Anthony Hannan wrote:
>Segments
>
>Each squid file contains a segment of objects. Objects can point to
>objects in other segments, using cross pointers. Following a cross
>pointer causes the target segment to be loaded, if not already. Files
>are kept in sync with with their loaded segments (mmap) maintaining
>persistence without explicit saving. Cross pointers may cross machine
>boundaries.
>
I've been thinking about this, although not in enough depth yet.
Would it be easier to have explicit object ownership? Every object has
an owner. That way, a "segment" is a group of objects with a common
owner. Alternatively, a "segment" may not have out-going pointers, and
can only use an owning object as a sort of proxy should they need access
to the outside world. This is an idea; I haven't actually thought far
enough to think if it would actually work. I think this is most useful
with composite objects, e.g. collections.
This would affect a lot of things. For starters, we knew exactly which
objects to move to disk / migrate to another computer / etc. It provides
a nice level of granularity for automatically replicating objects. The
garbage collector could keep ownership in mind - child objects can't
have external pointers so the GC can skip over whole segments, and also
do localized GC's within a particular area.
This has bigger implications for managing a long-running persistant
system. Sometimes a user simply needs to clear out a lot of old junk;
with explicit object ownership, the user can see how much space a
certain object and it's children are actually using. This may also allow
for security - an owning object need not / cannot (perhaps?) give away
references ("capabilities") of it's children.
In terms of remote objects; I much prefer to do that on top of the VM
rather than as a feature of the language. The most important trick is
that an object can pretend to be another object. This can be done in
Smalltalk (?) using doesNotUnderstand:, but that sounds hacky. Faking my
own identity means that I can act as a stub for a remote / replicated
object, or as a placeholder for an object that's not in memory yet, or
several other uses. I don't think that a VM should be responsible for
doing remote objects; it's a bad idea to tie the implementation to one
manner of remote invocation over one protocol.
>Remote Pointers
>
>Cross pointers across machines must be established and maintain and
>robust against failure. When accessing a remote field or invoking a
>remote method execution can move to the remote machine or the
>object can move or be replicated to the local machine.
>
>
Will this be implemented at part of the VM or in Squid code ontop of the
VM? (okay, there's no VM...). I'm hoping that you're going to leave a
mechanism open for one object to fake it's identity, so that it can act
as a stub for a remote object. There are a lot of different replication
algorithms with different performance charactoristics. I'm hoping that
you're not going to hardwire anything in.
Michael.
More information about the Squeak-dev
mailing list
|