Мац предположительно сказал, что "mixins могут делать почти все множественное наследование, без связанных с ними недостатков" (слова Matz).
Во-первых, почему включение модуля Ruby не является "множественным наследованием"? Мне кажется, что очень мало различий между модулями и классами. Тот факт, что вы не можете создать экземпляр модуля, не имеет значения, когда он используется как суперкласс.
Я также знаю, что последовательное включение модуля образует единую цепочку наследования (не дерево), распространяющуюся вверх от класса. Но этого для меня недостаточно, чтобы отличить его от "множественного наследования", поскольку система множественного наследования Python также "линеаризует" цепочку суперкласса (используя алгоритм C3), это просто, что процесс линеаризации Ruby значительно проще.
Итак, что именно отличает модули Ruby от нескольких наследований, например, на языке Python? И почему аргументы, лежащие в основе внедрения Python алгоритма C3 MRO, применимы к Ruby? И если они применимы - почему Руби решил не применять этот алгоритм?
спасибо