Darwin Among the Prototypes
Morphtron, my current cross-language prototype-based programming framework was influenced by ideas I first encountered in Framework the award winning product from Ashton-Tate written by Xerox PARC alum Robert Carr. Framework was and remains the most under-recognized Smalltalk Meme carrier.
Before they were called prototypes, instance-oriented approaches to organizing objects had become popular in AI during the 1980’s under the label of frame-based knowledge representation. At the time my career was just beginning to evolve from building spacecraft mechanisms to designing automated testing systems for them so I my understanding of computer languages wasn’t very deep. Even so, in spite of the fact that the people I saw as “experts” were more focused on the differences, objects, frames and entities all seemed more alike than different to me. Using Framework and dBASE, I combined them into something called the Knowldge Oriented Programming System(KOPS). Not long after KOPS was born Ashton-Tate began shooting itself in the foot so I began moving it to Smalltalk/V but had a great deal of trouble because the prototype ideas didn’t work well in a class based environment. When Digitalk introduced their visual programming tool PARTS which used unique instance methods I began to see that one could make Smalltalk more malleable. Around that same time, I read about Self, then Object-Oriented Programming With Prototypes and after that Squeak showed up with Etoys and Wonderland carrying the prototype meme. Today people are seeing prototypes as the future of object-oriented programming and Traits have found their way into the Squeak mainstream. Thanks in large part to Javascript I’d been able to experiment extensively with organizing objects without classes
All organizational functions carried out by classes can be accomplished in a simple and natural way by object inheritance in classless languages, with no need for special mechanisms. A single model—dividing types into prototypes and traits—supports sharing of behavior and extending or replacing representations. A natural extension, dynamic object inheritance, can model behavioral modes. Object inheritance can also be used to provide structured name spaces for well-known objects.
Classless languages can even express “class-based” encapsulation. These stylized uses of object inheritance become instantly recognizable idioms, and extend the repertory of organizing principles to cover a wider range of programs.
Self: Organizing Programs Without Classes
With Morphtron I had realized that one could achieve many of the same objectives without having support in the core language. This is because the memes are more fundamental than any particular implementation.
In a chapter on Symbiogenesis, George Dyson chronicles the evolutionary history of cyberspace going from order codes to subroutines and languages executing in operating systems and across networks:
The introduction of distributed object-oriented programming languages … is enabling numerical symbioorganisms to roam, reproduce, and execute freely across the computational universe as a whole. … Nils Barricelli, in 1985, drew a parallel between higher level object-oriented languages and the metalanguages used in cellular communication, but he put the analogy another way: “if humans, instead of transmitting to each other reprints and complicated explanations, developed the habit of transmitting computer programs allowing a computer-directed factory to construct the machine needed for a particular purpose, that would be the closest analogue to the communication methods among cells of various species”
“… In the game of life and evolution there are three players at the table: human beings, nature, and machines. I am firmly on the side of nature. But nature, I suspect, is on the side of the machines. …”
Darwin Among the Machines: The Evolution of Global Intelligence