Проблема алмазов заключается в невозможности решить, какую реализацию метода выбрать. Scala решает эту проблему, определяя, какую реализацию выбрать в рамках языковых спецификаций (см. Часть о Scala в этой статье Википедии ).
Конечно, то же самое определение порядка может также использоваться в множественном наследовании класса, так зачем беспокоиться о чертах?
Причиной ИМО являются конструкторы. Конструкторы имеют несколько ограничений, которых нет у обычных методов - их можно вызывать только один раз для каждого объекта, их нужно вызывать для каждого нового объекта, а конструктор дочернего класса должен вызывать конструктор своего родителя в качестве первой инструкции (большинство языков сделайте это неявно для вас, если вам не нужно передавать параметры).
Если B и C наследуют A и D наследуют B и C, и оба конструктора B и C вызывают конструктор A, тогда конструктор D дважды вызовет конструктор A. Определение того, какую реализацию выбрать, как это делал Scala с методами, здесь не сработает, потому что должны вызываться как конструкторы B, так и C.
Черты избегают этой проблемы, так как у них нет конструкторов.