Previous | Table of Contents | Next |
The history of Smalltalk is also the history of the formation of a community of software developers, many of whom formed commercial enterprises and bet their careers on the business of being Smalltalk designers, implementers, and trainers.
Smalltalk-80 was created for the explicit purpose of having a version of the language that could be distributed outside Xerox along with its tools and library. Broad distribution required a portable implementation specification. LRG transformed itself into SCG (the Systems Concepts Group). We were done doing learning research (or learning to do research). We were, in fact, temporarily done doing research and were intent on getting closure to the 10 years of work. We expected to accomplish two goals by creating Smalltalk-80. First, we hoped to influence the next generation of hardware designers, to challenge them to consider whether there was any special hardware assist for processing languages such as Smalltalk. Second, we hoped to create a larger community of Smalltalkers who could help invent subsequent versions. As it turned out, the first goal was not necessary, as demonstrated by the Smalltalk On A RISC work at UC Berkeley (Samples et al., 1986). This was a great research project and a result that probably saved us a lot of time and money. But the second goal was necessary, as the problems we were hoping to tackle next required more people, more ideas, and more users.9 As it turned out, we underestimated the scope of the work we would need to do, taking 3 years rather than the expected 1 year to complete the language, tools, and class library revisions, and to write comprehensive documentation.
9After the Smalltalk-80 publications, SCG was elevated to SCL, a research laboratory, and turned its interest to how technology can help groups work together when team members work at geographic distances. In 1985 videoconferencing and video editors were added to Smalltalk-80 as a part of this research effort. The research was later reported on (Bly et al., 1993).
The Xerox Smalltalk systems all consisted of two primary layers: a virtual machine and a virtual image.10 The virtual machine makes the hardware system friendly to the Smalltalk object model. Early implementations were microcoded interpreters; starting with the NoteTaker and then PS, the virtual machine was written in assembly code, C, or another high-level language. The virtual image consists of everything else, written in Smalltalk.
10I am using the standard terminology here, although there was nothing really virtual about these system layers. The virtual machine is really a virtual machine implementation, and the virtual image is a real file containing all the objects in the language system not represented in the machine implementation.
The compiler, written in Smalltalk, translates Smalltalk expressions and methods into the virtual machines machine language. This machine language is byte coded. The virtual machine implementation executes these byte codes. Initial virtual machine implementations executed the byte codes through interpretation. Later implementations, beginning with PS, compiled the byte codes to machine code. SCG took seriously Butler Lampsons observation that any interpreter can be turned into a compiler by running the interpreter and capturing the execution stream.
Although it took a circuitous path, this approach is quite similar to many so-called normal compilers that use a two-phase approach to compilation. The first phase is to translate the source language into intermediate representation; the second phase translates that intermediate representation into machine code. In the case of Smalltalk, the intermediate representation is the virtual machines byte codes (and associated data structures). Then, for the Xerox implementations, the code generation is performed at execution time.
Previous | Table of Contents | Next |