[squeak-dev] Re: second call for feedback on Naiad design
Ken Causey
ken at kencausey.com
Sat Nov 22 21:12:46 UTC 2008
This seems like a very good start for a Spoon/Squeak 5 FAQ and deserves
a semi-permanent location I think.
Ken
On Fri, 2008-11-21 at 17:48 -0800, Craig Latta wrote:
> Hi--
>
> Thanks for the comments! I'm responding to the comments so far in
> this single message. I see no reason to restrict Naiad-related
> discussion to a single thread; hopefully threads will emerge around
> particular specific issues, rather than particular people. :) Please
> feel free to break issues out into new threads... for this message,
> there's such a grab-bag going that I decided to deal with it all in one
> place.
>
> Karl writes:
>
> > When this system works, won't image size be an issue, like an
> > ever-growing web browser cache that has no size limit?
>
> I imagine the history memory will have various utilities, like:
>
> - dumping all the compiled method info, because the subject memory
> will always have a compiler
>
> - dumping all the method source, because the subject memory will
> never have a compiler :)
>
> - storing its less-frequently-accessed editions in one or more
> separate history memories, which spend most of their time as
> suspended snapshot files, but which can be activated when
> necessary. Remote message-sending is a fundamental part of
> Spoon; there's no inherent reason why the history memory can't be a
> federation of history memories instead.
>
> Of course, one might decide to put editions in another object
> database at any point instead (e.g., Magma or Gemstone). I just
> want to provide something that provides the bare minimum
> functionality "out of the box".
>
> - purging certain editions entirely (rather like when we made new
> sources files with the traditional setup)
>
> ***
>
> Wolfgang writes:
>
> > For me the main issue is the protocol that is used between the two
> > images (subject and history). There is little written about it.
>
> This is true, I haven't finished that documentation yet. One can
> look at the implementation of remote message-sending from the last Spoon
> release, but I haven't described it in prose yet, and the Naiad design
> document is the most prose I've written about how the subject and
> history memories communicate at a higher level. Eventually all this
> stuff will be in the Spoon book[1].
>
> > Just for thought, what if the history memory would be a web server.
> > What would the protocol look like?
>
> Well, there is already a (tiny) webserver in the subject memory,
> to provide the initial user interface when first run. One could load
> its conveying module into the history memory and do lots of interesting
> things with it, yes.
>
> > Can the low-level protocol be hacked to support this?
>
> Yes.
>
> > And one thing I am suspicious is that there is so much knowledge in
> > the IDs.
>
> Since they're going to be flying back and forth over sockets,
> sometimes in large numbers, they need to be as small as possible; so
> I've thought carefully about minimizing them. At this point I'm simply
> open to discussion about what anyone would leave out. :) I think have a
> good argument for every bit in every ID (likewise for every bit in the
> minimal subject memory).
>
> > And limits to the maximum number of editions etc.
>
> So far I've decided that it's not worth any extra bits expressing
> variable-length sizes, but again I'm open to discussion about that.
>
> > I'd rather have proper objects that those IDs, with LargeIntegers :-)
>
> (The size argument applies here, too.)
>
> ***
>
> Michael writes:
>
> > I think the main reason people aren't commenting is because that's a
> > lot of reading!
>
> Sure, I'll just keep asserting that the importance justifies the
> time. :)
>
> > Perhaps "versions" is a better name than "editions"? That's the name
> > we're more familiar with.
>
> In this case I think the familiarity is a disadvantage; "version"
> has multiple strong meanings to people. A "version" is sometimes an
> artifact which has multiple interesting states over time, and sometimes
> it's an identifier used to refer to such an artifact. I think it's
> better to use a less-used term here, and I like the resonance between
> "edition" and "edit".
>
> > Do we need to run two instances of Squeak to edit code, one for the
> > current version and one for managing the edit history? I assume that's
> > what you mean by needing two object memories.
>
> That's right. The typical case is one person using one subject
> memory connected to one history memory that is mostly that person's
> editions, over a localhost socket connection.
>
> > If so, is it intended for the edit history object memory to be a live
> > central repository shared by developers?
>
> That's also an option, yes; it's just not the default.
>
> > Does the system work if it can't contact the edit history object
> > memory?
>
> Yes, but the tools would show decompiled method source, and some
> history features like regression would be unavailable, (similar to what
> happens if you don't have the changes/sources files with the current
> setup). But the typical case is that you have the history memory
> snapshot on the local machine, so it seems no more likely this would
> happen than it would be for one to lose the old changes/sources files,
> or indeed the subject memory itself.
>
> > What do your remote references look like?
>
> Each one is an object which holds a special hash for a remote
> object, and stream on a socket connected to the remote system. So...
>
> > How stable are they? Do they rely on, e.g. IP address to find a remote
> > object memory? If somebody changes IP, are the remote references still
> > valid?
>
> ...currently, they do not survive suspension or termination of the
> object memory in which they live. They are *not* like URLs, as your
> comment implies. They are not a description of how to reach a remote
> object, they are an active connection to a remote object which behaves
> in all ways like the remote object. In general, they are created by
> sending messages to other remote objects. The first remote objects in a
> session are created specially as part of the connection handshake
> between object memories.
>
> If the object memory of the reference is suspended (saved and
> quit), the reference is nilled on resumption of the memory.
>
> I implemented this part of the system in 2003; it's been in all
> the Spoon releases so far.
>
> > I assume a class now contains a ClassID and a collection of MethodIDs?
>
> No, a class has a "base ID", which is a UUID. The subject memory
> as a whole also has a UUID. The history memory knows the UUID of the
> subject memory it is tracking, and has "class editions" for each of the
> classes that have ever existed in the subject memory. Each class edition
> has "method editions" for all of the methods which have ever existed for
> that class as defined at a certain point in time.
>
> > Why is ClassID so complex?
>
> It's complex? It's just a base UUID, an author UUID, and a version
> number. I think if it were any simpler we'd lose something important.
>
> > Why not just assign each class a new UUID for each new version of that
> > class, with authorship and versioning being metadata of that class?
>
> It seems to me that it would be useful to have a single unique
> identifier that can refer to the definition of a class at all points in
> time, as expressed by all authors. When you want to get more specific as
> to author and point in time, you can append additional bits to it.
>
> Also, I explicitly want to keep history information separate from
> the artifact objects they describe, so that they may be easily left
> behind during production.
>
> > Limiting to 65,536 versions per author is going to create problems in
> > 10 years time.
>
> I disagree. Remember, these are editions of a class *definition*
> (instance variable format, etc.). If you add a method to a class, you're
> not creating a new edition of that class, you're merely creating a new
> method edition. From my experience (which encompasses more than ten
> years ;), authors tend to create entirely new classes much more often
> than they revise class definitions, and they simply use the classes as
> they exist a lot more often than that. Frankly, I'd expect 1,024 to
> suffice here. Sixteen bits is simply the first sufficient number of
> bytes, so it's convenient as well.
>
> > Isn't having the author and version in the [class] IDs going to cause
> > conflict problems? What happens if the author is careless and ends up
> > with two different versions of a method with the same unique
> > identifier?
>
> Another good reason for keeping the history information in a
> separate (and headless) object memory is so it can take of itself
> without most developers bothering with it. :) The typical developer
> uses tools in the subject memory. Those tools only make requests to the
> history memory for new editions to be added; they have no say in how the
> corresponding IDs are made. In particular, the history memory decides
> what the next available version number is for a particular combination
> of class base ID, author, and selector.
>
> > Are author UUIDs going to be able to be looked up to get email
> > addresses and names somehow?
>
> Each history memory stores author editions; each author edition
> associates an author UUID with all that info and more (see the class
> tree at [2]). When you receive a module from another author's system,
> you get the relevant author editions as well. When you use a new system
> for the first time, you can create an author edition for yourself.
>
> > Methods shouldn't have an author. The changes between methods
> > versions/editions should have an author.
>
> I disagree. I think it's less work over time to figure out those
> changes when necessary.
>
> > I think you're taking the "minimal memory usage" idea too far.
>
> I think it's necessary to make the system as easy to learn and
> maintain as I want it to be.
>
> > In my design for distributable packages... packages (cf: classes in
> > Naiad)...
>
> I would expect them to correspond to Naiad's modules, not classes.
>
> > ...they need to (deep-)copy it...
>
> Uh-oh... "deep copy" is one of those phrases that immediately
> makes me suspect something is wrong (almost as bad as someone saying
> "dude" ;).
>
> > I've separated source from bytecodes.
>
> Naiad does that, too.
>
> > I'm not sure it's a good idea to propose an unstable system as the
> > next version of Squeak though.
>
> Well, this is two major versions out, not one. I think we can get
> plenty of testing in. And I think we're in serious danger of stagnation
> as it is. For better or worse, I think this history stuff is the sort of
> thing that has to be done with a relatively provocative step. Sometimes
> this is good (insert your favorite Alan Kay quote here ;).
>
>
> thanks again!
>
> -C
>
> [1] http://netjam.org/spoon/book
> [2] http://netjam.org/spoon/naiad
>
> _______________________________________________
> Spoon mailing list
> Spoon at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/spoon
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20081122/086ed124/attachment.pgp
More information about the Squeak-dev
mailing list
|