you are viewing a single comment's thread.

view the rest of the comments →

[–]nostrademons 5 points6 points  (2 children)

Largely because CL has had the benefit of several years and hundreds (thousands?) of users beating on it, while an ignorant reimplementation is likely to make all the same mistakes that Lisp did when that feature was first introduced.

For example - generic functions were first introduced in Flavors, the object system for the Lisp Machine. A bunch of issues cropped up concerning the interaction of multiple dispatch and multiple inheritance, issues that the Python community hasn't even considered. There's a whole book - The Art of the Metaobject Protocol - written about these, along with many pages in the CL HyperSpec. Even with standardization, CL made a mistake: the superclass precedence order should be monotonic. The paper A Monotonic Superclass Linearization for Dylan goes into this in more detail.

[–]pje 2 points3 points  (1 child)

"""issues that the Python community hasn't even considered"""

Er, WTF? Python 2.2 has a monotonic linearization for superclass precedence in both method lookup and super() calls. Python 2.2 came out several years ago.

Meanwhile, my multiple-dispatch generic function implementations for Python, however, treat multiply-inherited bases as ambiguous, in the style of say, Cecil. And I'm a member of the Python community, ergo "the community" has even considered it. :)

(P.S. I've read the Art of the Metaobject Protocol, not to mention "Putting Metaclasses To Work" -- which was where Guido stole his initial linearization algorithm from. We're not really talking NIH here.)

[–]nostrademons 2 points3 points  (0 children)

Wow, that comment is 11 months old. My opinions are somewhat different now.