2010-02-24 8 views

Respuesta

9

Para una buena comparación y por el razonamiento de por qué los rasgos son preferidos, puede consultar el traits paper (pdf).

En esencia, es lo Lukas Renggli dijo:

miembros

Rasgos se componen en una clase, y no cambian su jerarquía de herencia. Los conflictos deben ser resueltos explícitamente por el usuario de los rasgos.

Los mixins se linealizan en la jerarquía de herencia de la clase de destino. Si hay miembros en conflicto, el orden en el que fueron declarados determina a qué miembro se llama. Esto es frágil porque define implícitamente el comportamiento de la composición, y el autor de la clase debe ser consciente de los posibles conflictos y cómo van a afectar la clase resultante.

Dado que las mezclas se linealizan, no sufren el notorio "problema de diamante" de herencia múltiple.Entonces, la naturaleza frágil en la que están apilados es otro problema, que denominaré "ruby ​​problem", para mantener la metáfora de las piedras preciosas. Por alguna extraña razón que tenga que ver con moose, las perlas no muestran el problema tan bien como los rubíes.

9

Los rasgos se componen mediante una regla de composición. Los conflictos deben resolverse manualmente, no puede suceder que un rasgo anule accidentalmente otro método con el mismo nombre.

Mixins se componen por orden y por lo tanto tienen problemas de fragilidad similares a la herencia múltiple.

+1

La fragilidad generalmente asociada con la herencia múltiple es "el problema del diamante": no hay una resolución determinista del método con el mismo nombre y firma que se hereda de múltiples clases. En el caso de mixins, como ya se señaló, el orden de composición determina cómo se resuelven los métodos, por lo que las mezclas no sufren el "problema de los diamantes". – Yardena

+2

Sí lo hacen, pero es de una manera parcial. Si obtienes dos métodos 'm()' y 'n()' de ambos 'Mixin1' y' Mixin2', entonces solo puedes tener ambos métodos de un mixin. Si quieres un método de 'Mixin1' y el otro de' Mixin2', estás atascado. –

+1

Lo que describes no es lo que se conoce como "el problema del diamante". No estoy seguro de si se trata de un problema: se supone que mixin representa una unidad mínima de comportamiento reutilizable, por lo que, naturalmente, no puede descomponerse más ... – Yardena

8

En Newspeak todas las clases son mixins. Éstos son algunos fragmentos de la respuesta de Gilad Bracha a una pregunta similar en Newspeak discussion forum:

Mixins no son una característica de la neolengua per se. Es decir, no diseñamos el lenguaje diciendo, vale, ahora agregaremos mixins. Las mezclas se caen automáticamente desde la clase anidando y semántica basada en mensajes . Es decir, si tiene clases virtuales , tiene mixins a menos que realmente las prohíba. ...

Los rasgos intentan abordar el problema percibido de mixins.

  1. Hay muy poca experiencia real que indique que estos problemas percibidos son reales.
  2. Los rasgos están restringidos a ser apátridas. Esto simplifica las cosas, pero no maneja todos los casos de interés . De hecho, ahora hay documentos de investigación que intentan agregar el estado a los rasgos.

rasgos son completamente subsumidos por un modelo más general, que ideé hace muchos años en mi tesis doctoral (disponible de mi página web, si usted realmente quiere cavar profundamente). ... Me gustaría examinar cómo podríamos incorporar estos combinadores en Newspeak. ...

Cuestiones relacionadas