site programming smalltalk squeak pharo newspeak

programming - smalltalk android



¿Cuál es la diferencia entre un rasgo de Squeak/Pharo y un Mixin de Newspeak? (3)

En Newspeak todas las clases son mixins. Aquí hay algunos fragmentos de la respuesta de Gilad Bracha a una pregunta similar en el foro de discusión de Newspeak :

Los mixins no son una característica de Newspeak en sí. Es decir, no diseñamos el lenguaje diciendo: ok, ahora agregaremos mixins. Los mixins caen automáticamente de la jerarquización de clases y la semántica basada en mensajes. Es decir, si tiene clases virtuales, tiene mixins a menos que realmente los prohíba. ...

Los rasgos intentan abordar el problema percibido de los 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 trabajos de investigación que intentan agregar el estado a los rasgos.

Los rasgos están completamente incluidos en un modelo más general, que diseñé hace muchos años en mi tesis doctoral (disponible en mi sitio web, si realmente quiere profundizar). ... Me gustaría examinar cómo podríamos incorporar estos combinadores en Newspeak. ...

Así que Squeak / Pharo admiten Rasgos y Newspeak tiene Mixins. ¿Cuál es la diferencia? Rasgos no tienen instVars pero Mixins tienen?


Los rasgos se componen usando 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.

Los mixins están compuestos por orden y, por lo tanto, tienen problemas de fragilidad similares a la herencia múltiple.


Para una buena comparación y el razonamiento de por qué se prefieren los rasgos, puede consultar el papel de los rasgos (pdf) .

En esencia, es lo que dijo Lukas Renggli :

Los miembros de rasgos están compuestos en una clase y no cambian su jerarquía de herencia. Los conflictos deben ser resueltos explícitamente por el usuario de los rasgos.

Las mezclas se linealizan en la jerarquía de herencia de la clase objetivo. Si hay miembros en conflicto, el orden en el que se declararon 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 estar al tanto de los posibles conflictos y cómo afectarán a la clase resultante.

Dado que las mezclas se linealizan, no sufren el notorio " problema del diamante " de la herencia múltiple. Por lo tanto, la frágil naturaleza en la que se apilan es otro problema, que denominaré el " problema del rubí " para mantener la metáfora de la piedra preciosa. Por algunas extrañas razones que tienen que ver con los moose , las perlas no representan el problema tan bien como los rubíes.