<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><br><blockquote type="cite"><div><div id="ygrp-mlmsg" style="position:relative;"><div id="ygrp-msg" style="z-index: 1;"><div id="ygrp-text"><p>
About the lack of classes, the story I always tell is that before Self a<br>
project that Randy Smith did was ARK (Alternate Reality Kit) which was<br>
very much like a visual version of Smalltalk. It had the equivalent of<br>
classes in the form of factory objects, but people found it more<br>
convenient to just find an instance of the class they wanted and make a<br>
copy of it instead of going back to the factory.<br>
<br>
Randy can tell us whether this has anything at all to do with how thing<br>
really happened, but it makes for some nice looking slides in a talk :-)<br>
<br></p></div></div></div></div></blockquote><div>The idea of prototypes was floating in the hallways of the Smalltalk group at Xerox PARC at the time (about 1982, 83). Alan Borning who had built ThingLab used them (as I recall) to some extent.  Danny Bobrow had tried out the idea of an “exemplar” for each class in Smalltalk. But Lieberman hadn’t written his paper yet.  </div><div><br></div><div>Anyway, it immediately made sense to me, and frankly it is kind of an obvious idea, don’t you think? So in the Alternate Reality Kit I made a big deal of being able to copy existing objects (I used a big - ha ha - “Xerox” button. I had to blow that past the lawyers because there was fear at the time of loosing the rights to the name as the world at large was already using xerox as a verb: one way to loose your trademark.)</div><div><span style="color: rgb(255, 255, 255);"><br></span></div><div>The Alternate Reality Kit Warehouse (list of system classes) was a way to get a giant menu listing each class. Though the story I told was that it was a list of names for each prototype. The menu simply made a copy for you! Sneaky. </div><div><br></div><div>The argument I made was that it is much easier to work with a prototype as fully instantiated, working example of what an object is, rather than a story cast as a pile of textual code, a “plan” for what should happen if were you ever to instantiate. But I’m sure everyone reading this could furnish that sentence.  So of course, prototypes went into Self. </div><div><br></div><div>Another more subtle aspect of the Alternate Reality Kit (ARK) that shows up in Self is the lack of instance “variables.”  You could make a new pair of buttons for setting and getting a piece of persistent state, essentially like the “slot” that went into Self. Writing code in ARK was (quite awkwardly) done by “swallowing” collections of buttons into a new button, thus concatenating together functionality one expression at a time. I never really fully completed that work, as it was so tedious as to verge on or well past the ridiculous. But it was more a matter of illustrating that, in principle, code is not necessary, including the notion of a variable access as distinct from message access. So that last part went into Self as well.</div><div><br></div><div>I just happen to be giving a Self demo to high school students learning Java this next Monday! I’ve been in the class helping out, and it is so weird, frustrating, and sad to see kids struggling with types, type casting, hearing about special rules for constructors and so on. Truly it slows learning down as the entire class is under huge time pressure to build working simulations in two weeks. Yet there the teacher stands at the front of the room, burning up precious time explaining the unnecessary. </div><div><br></div><div>And due to time pressure, I have only ten minutes for my demo, we’ll see what I can get across.</div><div><br></div><div>—Randy</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><div><br></div></body></html>