2010-01-12 14 views
19

Ieri, Rich ha fatto impazzire il "nuovo" ramo di Clojure. Ora stiamo abbracciando la bellezza che è deftype e defprotocol. Naturalmente, io, venendo da Haskell, sono molto tentato di definire tipi come farei in Haskell, che sarebbe praticamente per tutti a corto di una tuple usa e getta, ma non credo che funzioni in quel modo nel mondo Clojure;). Nel thread Errori comuni di Clojure, un tizio ha affermato che l'uso eccessivo delle strutture è stato un errore che ha fatto quando ha iniziato, provenendo da OOP. Dal momento che gli errori sembrano essere simili alle strutture, mi chiedevo se la stessa cosa si applicasse lì.Quando dovrei usare deftype in Clojure?

Quindi, la mia domanda è: quando è il momento giusto per usare deftype?

risposta

13

Un'area deftype è una prestazione. I metodi dei protocolli sono molto veloci su un deftype. Anche deftype può avere campi primitivi, quindi niente boxe quando si scricchiolano i numeri ...

Un'altra area potrebbe essere l'interoperabilità Java, dal momento che deftype può implementare interfacce (e se AOT compilato) ha una classe con nome.

In generale è l'idea di base per definire le astrazioni con i protocolli e per implementarli con deftype.

ricchezza di dettagli la sua motivazione qui: http://www.assembla.com/wiki/show/clojure/Datatypes

+0

quindi sarebbe sorta di essere come Haskell, in quanto i protocolli sono come typeclasses e tipi di dati sono come ... beh tipi di dati. : p – Rayne