clojure deftype

¿Cuándo debería usar deftype en Clojure?



(1)

Ayer, Rich tiró de la ''nueva'' rama de Clojure en el maestro. Ahora estamos abrazando la belleza que es deftyot y defprotocol. Por supuesto, yo, que vengo de Haskell, estoy muy tentado de definir tipos como lo haría en Haskell, que sería para prácticamente todo menos una tupla desechable, pero no creo que funcione así en el mundo Clojure;). En el hilo de Common Mistakes para Clojure, un chico mencionó que el uso excesivo de las estructuras fue un error que cometió cuando comenzó, proveniente de OOP. Dado que los deftypes parecen ser similares a las estructuras, me preguntaba si lo mismo se aplica allí.

Entonces, mi pregunta es: ¿cuándo es un buen momento para usar deftype?


Un área de deftype es el rendimiento. Los métodos de protocolos son muy rápidos en un deftype. También deftype puede tener campos primitivos, por lo que ya no hay boxeo cuando se crujen números ...

Otra área podría ser la interoperación de Java, ya que deftype puede implementar interfaces (y si AOT compilado) tiene una clase con nombre.

En general, la idea básica es definir abstracciones con protocolos e implementarlas con deftype.

Rich detalla su motivación aquí: http://www.assembla.com/wiki/show/clojure/Datatypes