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