Как CLOS относится к типу и функциям записи Clojure? - PullRequest
6 голосов
/ 18 апреля 2011

Я недавно работал с типами и записями Clojure, и мне было интересно, действительно ли это новые концепции или они вдохновлены Common Lisp Object System?

1 Ответ

12 голосов
/ 18 апреля 2011

Я полагаю, что это довольно новые инновации в Clojure.

CLOS - довольно сложная, полнофункциональная объектно-ориентированная система.Он включает в себя различные методы ООП, о которых вы часто упоминаете, и которые существуют в других объектно-ориентированных языках - множественное наследование, динамическая диспетчеризация, универсальные функции и т. Д.

Clojure использует другой подход - типы и записи намного проще, чем полный ООП ине предназначены для составления полной ООП-системы.Скорее я понимаю, что дизайн мотивирован:

  • Убеждением, что многие методы ООП действительно вредны при построении больших систем - например, наследование реализации
  • Возможность получить максимальную производительность(то же самое, что и Java) для наиболее распространенного случая полиморфизма (т. е. единичная диспетчеризация по типу)
  • Желание решить " проблему выражения ", которую вы можете сделать в Clojure, используяdeftype / defrecord вместе с протоколами
  • Намерение сделать все записи / типы неизменяемыми, чтобы соответствовать остальной философии Clojure

Если вам нужна традиционная объектно-ориентированная система, такая как CLOSбыло бы возможно построить это в Clojure поверх типов и записей.Вы также можете использовать объектную ориентацию в стиле Java непосредственно в Clojure.Однако я полагаю, что это обычно не рекомендуется экспертами Clojure - Clojure обычно предлагает вам разные или лучшие способы решения одних и тех же проблем.

В целом - Clojure обычно предоставляет вам «простые» инструменты, которые вы можете составить для решенияпроблема под рукой, а не прописывать сложные рамки в любой момент.Это интересная философия , довольно подробно обсуждаемая в этом видео Стюартом Хэллоуэем .

...