<?xml version="1.0"?>
<rss version="0.91">
  <channel>
    <title>Squeak People diary for Jecel</title>
    <description>Squeak People diary for Jecel</description>
    <link>http://people.squeakfoundation.org/person/Jecel/</link>
    <item>
      <title>23 Nov 2006</title>
      <pubDate>Thu, 23 Nov 2006 23:24:10 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=5</link>
      <description>&lt;p&gt;Yesterday, I mentioned a plan to incrementally develop a Squeak machine starting with a simple RISC processor. Step 3 would be the addition of a technology similar to ARM's Jazelle, which I am calling &lt;a href=&quot;http://www.merlintec.com:8080/Hardware/BCMode&quot; &gt;&quot;BC Mode&quot;&lt;/a&gt;. This would speed up the interpreter allowing the compiler to be used just for the most critical code.
&lt;p&gt;What was missing was that step 2 only mentioned the very similar &quot;PIC Mode&quot; technology for type feedback with no details, but this would involve not only adding a special PIC Cache (or enhancing the instruction cache to include this extra functionality) but also at least one instruction. In the case of RISC42 the COPR instruction makes additions like this trivial.
&lt;p&gt;While this is being done it would be a good idea to consider other instructions that might improve the compiled code. A TADD instruction which checks the operands for SmallInteger tags  and does all the ugly untagging/tagging in a single clock would be nice, for example. It could save the result and skip the next instruction in the case where everything worked out - this would be simpler for the compiler to handle than a trap.</description>
    </item>
    <item>
      <title>23 Nov 2006</title>
      <pubDate>Thu, 23 Nov 2006 00:46:57 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=4</link>
      <description>&lt;p&gt;Though my current focus is on stack based hardware for running Neo Smalltalk, I am slowly evolving my ideas of how to build a Squeak Machine. One possible plan:
&lt;ol&gt;
&lt;li&gt;start out with a conventional processor (like my &lt;a href=&quot;http://www.merlintec.com:8080/Hardware/RISC42&quot; &gt;RISC42&lt;/a&gt; design) running SqueakNOS
&lt;li&gt;add my &lt;a href=&quot;http://www.merlintec.com:8080/Hardware/PICMode&quot; &gt;PIC Mode&lt;/a&gt; technology to speed up message dispatch and provide type feedback for a compiler like &lt;a href=&quot;http://people.squeakfoundation.org/proj/Exupery/&quot; &gt;Exupery&lt;/a&gt;
&lt;li&gt;add something like ARM's Jazelle 1 technology to speed up the interpreter
&lt;/ol&gt;
&lt;p&gt;This incremental approach would have an end result equivalent to a microcoded solution while remaining more compatible with Squeak's current technologies.</description>
    </item>
    <item>
      <title>17 Aug 2004</title>
      <pubDate>Tue, 17 Aug 2004 18:49:37 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=3</link>
      <description>&lt;p&gt;&lt;b&gt;Object Reference Model&lt;/b&gt;
&lt;p&gt;No object is an island - they can grouped together in several different ways. Here are some of them:
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;disk&lt;/b&gt; (package, segment, soup, image, snapshot): In theory, every individual object could be stored separately in permanent memory. The opposite strategy, where all objects are saved in a single file, has often been used. Intermediate solutions give the users more control over disk management.
&lt;li&gt;&lt;b&gt;process&lt;/b&gt; (thread, transaction, actor): The most common implementations have concurrency as totally independent of objects, but that is not natural and is harder to program. When making execution an integral part of objects, this can be applied to all objects or they can be separated into active and passive objects.
&lt;li&gt;&lt;b&gt;security&lt;/b&gt; (capability, user, session): When multiple users share a system, it is important to protect one from the actions of the others. Even with a single user it is a good idea to make accidents less likely and/or less severe.
&lt;li&gt;&lt;b&gt;type&lt;/b&gt; (class, clone family): Even when a programmer is presented with a model in which each object is totally independent of the others, that is not practical in terms of implementation. The system must use some notion of type to associate executable code with the received messages.
&lt;li&gt;&lt;b&gt;inheritance&lt;/b&gt; (sub/superclass, trait, mixin, parent/child): Facctoring and refactoring is an important process in software development. Being able to express concepts in terms of differences in relation to other concepts can provide support for this.
&lt;li&gt;&lt;b&gt;composite&lt;/b&gt; (part, assembly): Just like in the real world, objects can be combined to create larger objects.
&lt;li&gt;&lt;b&gt;version&lt;/b&gt;: An object's state varies over time as a side effect of normal operation. In addition, programming changes on live objects can result in new or removed &quot;slots&quot; as well as changes in behavior.
&lt;li&gt;&lt;b&gt;reflection&lt;/b&gt; (metaspace, mirror, class, aspect): While objects often simulate real world objects, they actually are computer constructs built with resources like memory and processing power. Behavioral reflaction can deal with the latter and structural reflection with the former.
&lt;li&gt;&lt;b&gt;viewpoint&lt;/b&gt; (layer, subject, piece, namespace): Simple systems exist in total isolation an can be completely objective. Larger systems can't hope to be entirely consistent and must be prepared to handle different interpretations of the same concepts.
&lt;li&gt;&lt;b&gt;role&lt;/b&gt;: Concepts in different parts of the system can represent a single entity.
&lt;/ol&gt;
&lt;p&gt;So?
&lt;p&gt;The idea of a reference model (like the OSI network one) is to create a common framework in which different implementations can be compared.</description>
    </item>
    <item>
      <title>20 Jan 2004</title>
      <pubDate>Tue, 20 Jan 2004 00:33:40 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=2</link>
      <description>I am trying to compare these alternatives:
&lt;ol&gt;
&lt;li&gt;Squeak Hardware: partly described on Jan 9, this would involve two images. &lt;a href=&quot;http://people.squeakfoundation.org/person/TedK/&quot; &gt;TedK&lt;/a&gt; and Glenn Krasner have already done this in their LOOM virtual memory system for Smalltalk-80. The root image would be trimmed down as much as possible but would include two instances of the Interpreter class. One would represent the root image itself, while the other would represent the user image. Whenever code translated from Slang to C would be called in a &quot;normal&quot; Squeak VM, the hardware would simply switch Interpreter objects and go back to executing bytecodes. This &lt;a href=&quot;http&quot; ://www.worldofescher.com/gallery/A33L.html&gt;Escher drawing&lt;/a&gt; is a pretty good illustration of what this system would be like.
&lt;li&gt;EToys on Neo Smalltalk: for many people when they talk about Squeak they really mean EToys, so if that were ported to run on Neo Smalltalk they would be happy with my machine.
&lt;li&gt;Squeak on Neo Smalltalk: it would be possible to translate Squeak objects and bytecodes into Neo Smalltalk equivalents as an alternative way to get Squeak to run on my hardware. &lt;a href=&quot;http&quot; ://citeseer.nj.nec.com/agesen97design.html&gt;PEP&lt;/a&gt;, the Java-on-Self project, showed how it can be done. It is interesting to &lt;a href=&quot;http&quot; ://www.merlintec.com/vmworkshop99/sub.pdf&gt;compare&lt;/a&gt; that with Gnu Smalltalk-on-Self. Low level stuff like the debugger would break in this environment, but enough might run to make it worth it.
&lt;/ol&gt;
The original idea was to have a complete and bidirectional compatibility layer for Squeak over Neo Smalltalk. I called that &quot;150% compatibility&quot; since it would allow a package from, for example, Squeak 2.3 to live side by side with stuff loaded from Squeak 3.5 and that is even more compatible than Squeak itself. That is a very ambitious and long term project, so it was not included in the above list.

&lt;p&gt; Evaluating EToys with &lt;a href=&quot;http://people.squeakfoundation.org/proj/MudPie/&quot; &gt;MudPie&lt;/a&gt; and looking at the scripting methods for class Morph showed that 2 is not a practical option as there is no clear separation between EToys and Morphic. That leaves 1 and 3.</description>
    </item>
    <item>
      <title>9 Jan 2004</title>
      <pubDate>Fri, 09 Jan 2004 19:48:05 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=1</link>
      <description>People are starting to get excited about Squeak down here, mostly due to the &quot;Squeakers&quot; DVD. So today and next week I will be considering the possibility of using Squeak instead of Neo Smalltalk in the initial release of my hardware to make it easier to collaborate with these people.

&lt;p&gt; &lt;p&gt; Neo Smalltalk and its hardware were designed together. For example, the architecture (called &quot;Plurion&quot;) is a network of five relatively slow (100 MHz) and simple stack processors. The software was created to have an average of dozens of active threads, which should be enough to keep all processors busy most of the time.

&lt;p&gt; &lt;p&gt; Squeak, on the other hand, represents a fixed software design. This requires a different hardware with very different tradeoffs. Unless the result with these constraints still represents a huge cost/performance advantage over, for example, a XScale solution then it wouldn't be a project worth doing.

&lt;p&gt; &lt;p&gt; The first step in this evaluation was checking out the bytecodes. It is nice that Squeak's bytecodes are almost exactly the original Smalltalk-80 ones because there is a lot of information about them in the &quot;green book&quot; (Smalltalk-80: Bits of History, Words of Advice). While more complex than what I had been using, they don't seem too unreasonable and a &quot;one bytecode per clock&quot; implementation might be possible.

&lt;p&gt; &lt;p&gt; Primitives and plug-ins represent the bulk of the virtual machine, however. It would not be a good idea to try to render them in hardware. At least the parts that are written in Slang wouldn't be a problem - they can be compiled to bytecodes and executed by the same hardware that handles regular Smalltalk code. Any parts in C would have to be rewritten in Slang (or plain Smalltalk if possible) which was actually already being done by the SqueakNOS guys.</description>
    </item>
    <item>
      <title>19 Nov 2003</title>
      <pubDate>Wed, 19 Nov 2003 00:03:52 -0700</pubDate>
      <link>http://people.squeakfoundation.org/person/Jecel/diary.html?start=0</link>
      <description>Yet another diary.

&lt;p&gt; I first started one for the Merlin Project (68000 based Smalltalk computer) in November of 1984. The last entry was for December of 1993 (I moved all documentation efforts to the Web after that), but it is sad to see how many times years went by without a single entry.

&lt;p&gt; My swiki already contains two project diaries: one for the &lt;a href=&quot;http&quot; ://www.merlintec.com:8080/Hardware/16&gt;truck terminal&lt;/a&gt; and the other for the &lt;a href=&quot;http&quot; ://www.merlintec.com:8080/Hardware/18&gt;adaptation of that as a low cost computer&lt;/a&gt;. I will probably have to start another one soon for the &quot;real&quot; Smalltalk computer.

&lt;p&gt; But this is about Squeak, and after so many years toying with it I have finally started using it in my work. It is funny that the only reason why I am using it instead of Self is because I got serial ports to work on the first try but looking through the Solaris manuals it didn't seem easy to do the same thing in Self.

&lt;p&gt; So I did 
&lt;ul&gt;&lt;li&gt;a file/font/text uploader to the prototype Flash memory
&lt;li&gt;a quick and dirty compiler for the &lt;a href=&quot;http&quot; ://www.merlintec.com:8080/Hardware/dietST&gt;4 bit Smalltalk processor&lt;/a&gt;
&lt;li&gt;the truck terminal application itself accessing all the peripherals remotely through a simple hardware in the FPGA and the serial port.
&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
