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