В чем разница между Squeak/Pharo Trait и Newspeak Mixin?
Так что Squak/Pharo поддерживают Traits, а у Newspeak есть Mixins. В чем разница? Черты не имеют Instvars, но Mixins есть?
3 ответа
Для хорошего сравнения и рассуждений о том, почему предпочтения являются предпочтительными, вы можете проверить бумагу по признакам (pdf).
По сути, это то, что сказал Лукас Ренггли:
Члены-черты составлены в класс и не меняют его иерархию наследования. Конфликты должны быть явно разрешены пользователем черт.
Миксины линеаризуются в иерархию наследования целевого класса. Если есть конфликтующие участники, порядок, в котором они были объявлены, определяет, какой член будет вызван. Это хрупко, потому что оно неявно определяет поведение композиции, и автор класса должен знать о потенциальных конфликтах и о том, как они будут влиять на итоговый класс.
Поскольку миксины становятся линеаризованными, они не страдают от пресловутой " проблемы алмазов " множественного наследования. Таким образом, хрупкая природа, в которой они сложены, является другой проблемой, которую я назову " проблемой рубина ", чтобы сохранить метафору драгоценного камня. По некоторым странным причинам, связанным с лосями, жемчуг не изображает проблему так же хорошо, как рубины.
Черты составляются с использованием правила композиции. Конфликты должны быть разрешены вручную, не может случиться так, что черта случайно переопределит другой метод с тем же именем.
Миксины составляются по порядку и поэтому имеют проблемы с хрупкостью, аналогичные множественному наследованию.
В Newspeak все классы являются миксинами. Вот некоторые фрагменты ответа Гилада Брачи на аналогичный вопрос в дискуссионном форуме Newspeak:
Миксины не являются особенностью Newspeak как такового. То есть, мы не разработали язык, говоря, хорошо, теперь мы добавим миксины. Миксины выпадают автоматически из вложенности классов и семантики сообщений. То есть, если у вас есть виртуальные классы, у вас есть миксины, если вы их не запретите....
Черты пытаются решить проблему миксинов.
- Существует очень мало реального опыта, свидетельствующего о том, что эти воспринятые проблемы реальны.
- Черты не могут быть лицами без гражданства. Это упрощает дела, но не обрабатывает все интересные случаи. Фактически, в настоящее время существуют исследовательские работы, пытающиеся добавить состояние к чертам.
Черты полностью относятся к более общей модели, которую я разработал много лет назад в своей диссертации (доступно на моем веб-сайте, если вы действительно хотите углубиться). ... Я хотел бы изучить, как мы можем включить эти комбинаторы в Newspeak. ...