В чем разница между Squeak / Pharo Trait и Newspeak Mixin? - PullRequest
16 голосов
/ 25 февраля 2010

Значит, в Sickak / Pharo есть поддержка Traits и Newspeak с Mixins. В чем разница? У черт нет инстВаров, но у миксинов есть?

Ответы [ 3 ]

9 голосов
/ 09 августа 2010

Для хорошего сравнения и рассуждений о том, почему предпочтительны черты, вы можете проверить бумагу черт (pdf) .

По сути, это то, что Лукас Ренггли сказал:

Члены-черты составлены в класс и не меняют его иерархию наследования. Конфликты должны быть явно разрешены пользователем черт.

Миксины линеаризуются в иерархию наследования целевого класса. Если есть конфликтующие участники, порядок, в котором они были объявлены, определяет, какой член будет вызван. Это хрупкий , поскольку он неявно определяет поведение композиции, и автор класса должен знать о потенциальных конфликтах и ​​о том, как они повлияют на результирующий класс.

Поскольку миксины становятся линеаризованными, они не страдают от пресловутой " проблемы с алмазом " множественного наследования. Таким образом, хрупкая природа, в которой они сложены, является другой проблемой, которую я назову « проблема рубина », чтобы сохранить метафору драгоценного камня. По некоторым странным причинам, связанным с лосями , жемчуг не отражает проблему так же хорошо, как рубины.

9 голосов
/ 25 февраля 2010

Черты составлены с использованием правила композиции. Конфликты должны быть разрешены вручную, не может случиться так, что черта случайно переопределит другой метод с тем же именем.

Миксины составляются по порядку и поэтому имеют проблемы с хрупкостью, аналогичные множественному наследованию.

8 голосов
/ 27 февраля 2010

В Newspeak все классы являются миксинами. Вот некоторые фрагменты ответа Гилада Брачи на аналогичный вопрос в Обсуждении на новостном форуме :

Миксины не являются особенностью Newspeak как таковой. То есть мы не проектировали Язык говорю, хорошо, теперь мы добавим Примеси. Mixins выпадают автоматически от вложенности классов и на основе сообщений семантика. То есть, если у вас есть виртуальные классы, у вас есть миксины если вы на самом деле их не забаните. ...

Черт пытается решить проблему проблема миксинов.

  1. Существует очень мало реального опыта, свидетельствующего о том, что эти Воспринимаемые проблемы реальны.
  2. Черты ограничены отсутствием состояния. Это упрощает дела, но не обрабатывает все случаи интерес. На самом деле, сейчас исследовательские работы пытаются добавить состояние черт.

Черты полностью подчинены более общая модель, которую я придумал много лет назад в моей докторской диссертации (доступно с моего сайта, если вы действительно хотите копать глубоко). ... Я хотел бы изучить, как мы могли бы включить эти комбинаторы в Новояз. ...

...