Подтвердить что ты не робот

Когда следует использовать deftype в Clojure?

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

Итак, мой вопрос: когда это подходящее время для использования deftype?

4b9b3361

Ответ 1

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

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

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

Богатые детали его мотивации здесь: http://www.assembla.com/wiki/show/clojure/Datatypes