Registered user since Wed 3 Jan 2018
I’ve been lucky enough to work on Smalltalk virtual machines for several decades. After early work on BrouHaHa, a series of C Smalltalk VMs, evolving from pure interpreters to bytecode-to-threaded-code-interpreter JITs, I joined ParcPlace in 1995 and became technical lead for the product in 1998. There I introduced a prefix-extension bytecode set which used a closure-compilation model borrowed from LISP that substantially improved performance, implemented a 64-bit version with a class-index based object representation, added a non-blocking FFI and reorganized the product around a flexible binary component-loading scheme (Parcels) that allows the maintenance of logical components. In 2007 I joined Gilad Bracha’s team at Cadence and worked on Newspeak. In 2008 I joined Qwaq (now Terf), which is applying the Croquet virtual worlds system to business communication. At Qwaq I began development of Cog, which adds good context-to-stack mapping and JIT compilation to the Squeak/Pharo Smalltalk VM. In 2011 I returned to Cadence and extended Cog to include a first and a second bytecode set for Newspeak. Starting in 2013 I added the Spur object representation to Cog. Spur uses a common 64-bit object header for both 32-bit and 64-bit versions, using a class index in place of a direct class reference to save space in the header, and lazy forwarding, where checking for forwarding pointers is subsumed by send cache checking and primitive argument checking, hence providing inexpensive become while avoiding per-object indirection pointers. Since 2013 I have been collaborating with Clément Bera and together we have been adding adaptive optimization to Cog where the complete optimizer, Scorch, is implemented above the virtual machine in Smalltalk and is live in the system, allowing interactive development of the optimizer. Scorch interacts with the VM using Smalltalk’s first-class activation records (Contexts) and byte coded methods, and is hence completely machine independent. Since the output of Scorch are byte coded methods the system can start-up hot.