В чем разница между Squeak/Pharo Trait и Newspeak Mixin?

Так что Squak/Pharo поддерживают Traits, а у Newspeak есть Mixins. В чем разница? Черты не имеют Instvars, но Mixins есть?

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам