Когда я должен использовать deftype в Clojure? - PullRequest
21 голосов
/ 12 января 2010

Вчера Рич вытащил «новую» ветку Clojure в мастера. Теперь мы охватываем красоту, которая является deftype и defprotocol. Конечно, я, выходец из Haskell, очень соблазнен для определения типов, как я бы это делал в Haskell, что будет практически для всего, кроме короткого кортежа, но я не думаю, что это работает в мире Clojure;). В ветке Common Mistakes для Clojure один парень упомянул, что чрезмерное использование структур было ошибкой, которую он совершил, когда впервые начал работать с OOP. Поскольку дефтипы, похоже, похожи на структуры, мне было интересно, применяется ли там то же самое.

Итак, мой вопрос: когда пора использовать deftype?

1 Ответ

13 голосов
/ 12 января 2010

Одна область deftype сияет - производительность. Методы протоколов очень быстрые на deftype. Кроме того, deftype может иметь примитивные поля, поэтому при обработке чисел больше нельзя использовать бокс ...

Другой областью может быть взаимодействие Java, поскольку deftype может реализовывать интерфейсы (и если AOT скомпилирован) иметь именованный класс.

В общем, основная идея - определять абстракции с помощью протоколов и реализовывать их с помощью deftype.

Рич подробно описывает свою мотивацию здесь: http://www.assembla.com/wiki/show/clojure/Datatypes

...