From: matz@... (Yukihiro Matsumoto) Date: 2003-08-24T19:38:09+09:00 Subject: Re: differences between Module and Class ? Hi, In message "Re: differences between Module and Class ?" on 03/08/24, Mathieu Bouchard writes: |> (2a) breaks inheritance tree. It's not acceptable. | |Woops, I wanted to write: | | Class#new is moved to Object.new | |Which then makes sense, but supposing you understood me anyway, then I |don't understand how it breaks things. No, I didn't understand. It now makes sense. |In that light, Ruby's inheritance is a restricted form of LISP's |multiple inheritance. What I want is that Ruby gets the unrestricted form |of LISP's multiple inheritance, and not any other kind of multiple |inheritance. I understand what you want. |> * you can (or forced to) distinguish is-a relation to has-a relation |> with "single inheritance w/ mix-in". I believe this distinction is |> a good thing, which make relations clear. | |I don't know what it is to be bilingual Japanese/English, but I am |bilingual French/English, and those are two rather related languages, and |yet I could pull several examples where it is very much unclear what |"is" and "has" deeply mean. It's strictly separated in Japanese, but anyway, I admit an error in my expression. It was "primary inheritance" and "auxiliary inheritance" that I meant to distinguish. The primary inheritance is inheritance to form class tree. It's inheritance in single inheritance. The auxiliary inheritance is what we call mix-in. Despite my previous statement, the auxiliary inheritance can be "is-a" relation. This combination is indeed a restricted multiple inheritance. By this restriction, we won't have diamond inheritance problem, nor confusion by complicated class relation network, enjoying power of multiple inheritance at the same time. Although it does not solve all of the problems in multiple inheritance (e.g. name crash). I think this distinction help good design of class hierarchy. So, by removing this restriction, what can we buy? No restriction? Fine, but it's not what _I_ want to buy. What else? matz.