The Flavors OOP is based on a metaphor that was inspired by an ice cream parlor near the MIT campus. Plain vanilla was the basic starting point for all of the store's confections. Many different mix-ins, such as sprinkles, nuts, fudge, fruit, etc. could be added to the vanilla and mixed in with it to produce new flavors. With only two dozen or so mix in additives, literally millions of flavors of ice cream deserts could be produced. This was the metaphor that inspired one of the most complete and widely used OOPs in the Lisp community. This metaphor accurately describes multiple inheritance in simple language anyone can understand. The base is plain vanilla, and the other flavors are mixins to the base.
This ice cream parlor is now a veritable shrine in the Lisp inner circle, somewhat like the National Radio Astronomy Observatory in Charlottesville, Virginia [Tin89b] is to Forth. Visitors to ICAD, Inc. -- vendors of an object oriented modeling system that is based on Flavors -- make the pilgrimage from the ICAD training facility to the ice cream parlor on the last day of classes. When these newly indoctrinated students are told they are going out to get ice cream, they invariably ask, ``Is this the ice cream Parlor?'' They are answered with a softly whispered ``yes,'' or maybe just a nod of the head. It is the high point of the week long training session.
Since we like Flavors very much -- both in soft ice cream and in software -- we used that package as a starting point in the design of what later became Dreams. This is appropriate: since Forth is Lisp inspired, a Forth OOP might well benefit from being likewise Lisp inspired.
But the Forth version of Flavors was clumsy to use. It was awkward to write to the Forth accustomed tongue. Remember, Forth is the only programming language, with the possible exception of COBOL, that was designed to be spoken as well as read and written. We needed to rethink the metaphor to fit Forth better.
Flavors is a late binding, lexically scoped, class based object oriented programming system. We viewed late binding as a requirement, since it provides a level of flexibility unobtainable with early-binding schemes, but the lexical scoping forced run-time look-up of methods, and that slowed down the implementation. Worse yet, it made the timing variable. Determinism was lost and performance was reduced from what we had desired.