2 ms·
> Most OO languages are based on no theory Smalltalk is based on the same computational theory as Lisp. See: The Early History of Smalltalk (http://gagne.homed
by silentbicycle 18y ago
> Most OO languages are based on no theory
Smalltalk is based on the same computational theory as Lisp. See: The Early History of Smalltalk (http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.html http://gagne.homedns.org/%7etgagne/contrib/EarlyHistoryST.ht...), search for "to really understand LISP". (It's a scanned and OCR'd article, so there are strange typos.)
Unfortunately, you're ultimately correct: "most [popularly used] OO languages" these days seem to be based on tearing off a handful of Smalltalk's object-based theory of computation, duct-taping it on C, and seeing what happens. You can have OO languages with very elegant theoretical foundations (Smalltalk, Io, Self), including systems handling Classes as first-class objects (sometimes called a "Meta-Object protocol"), but most people associate OO with C++ and Java.
> Even Smalltalk and Self use blocks (i.e. closures or lambdas) instead of providing some lightweight class/object literal notation.
This really is key: the language doesn't require you to create a full anonymous class when sending a message/anonymous function would do. Also, blocks aren't evaluated unless their message is sent, which means you get a good syntax for lambdas and basic lazy evaluation for free. Those, along with dynamic typing, make most of C++ OO-style awkwardness vanish.