2010-01-12 4 views
19

Hier, Rich a attiré la «nouvelle» branche de Clojure en maître. Nous embrassons maintenant la beauté qui est deftype et defprotocol. Bien sûr, moi, venant de Haskell, je suis très tenté de définir des types comme je le ferais dans Haskell, ce qui serait pratiquement tout sauf un tuple jetable, mais je ne pense pas que cela fonctionne comme ça dans le monde de Clojure;). Dans le fil de discussion Common Mistakes pour Clojure, un gars a mentionné que l'usage excessif des structures était une erreur qu'il avait commise au début, en provenance de POO. Puisque les deftypes semblent être semblables aux structures, je me demandais si la même chose s'applique là. Donc, ma question est la suivante: quand est-ce un bon moment pour utiliser deftype?Quand dois-je utiliser deftype dans Clojure?

Répondre

13

Une zone deftype brille est performance. Les méthodes de protocoles sont très rapides sur un deftype. Deftype peut aussi avoir des champs primitifs, donc plus de boxe lors du crunching de nombres ...

Un autre domaine pourrait être l'interopérabilité Java, puisque deftype peut implémenter des interfaces (et si AOT compilé) a une classe nommée.

En général, l'idée de base est de définir des abstractions avec des protocoles et de les implémenter avec deftype.

détails Rich sa motivation ici: http://www.assembla.com/wiki/show/clojure/Datatypes

+0

Il serait un peu comme Haskell, en ce que les protocoles sont comme des types de données et classes de types comme ... bien des types de données. : p – Rayne