El problema del diamante es la incapacidad de decidir qué implementación del método elegir. Scala resuelve esto definiendo qué implementación elegir como parte de las especificaciones del lenguaje ( lea la parte sobre Scala en este artículo de Wikipedia ).
Por supuesto, la definición del mismo orden también podría usarse en la herencia múltiple de clase, entonces, ¿por qué molestarse con los rasgos?
La razón IMO es constructores. Los constructores tienen varias limitaciones que los métodos normales no tienen: solo se pueden invocar una vez por objeto, se deben invocar para cada nuevo objeto, y el constructor de una clase secundaria debe llamar al constructor de sus padres como su primera instrucción (la mayoría de los idiomas serán hágalo implícitamente si no necesita pasar parámetros).
Si B y C heredan A y D heredan B y C, y los constructores de B y C llaman al constructor de A, entonces el constructor de D llamará al constructor de A dos veces. Definir qué implementaciones elegir como hizo Scala con los métodos no funcionará aquí porque se debe llamar tanto a los constructores de B como de los de C.
Los rasgos evitan este problema ya que no tienen constructores.