Quiero implementar transient
y persistent!
en mi deflector Clojure. Por lo que puedo decir, esto significa tener otro deftype, TransientMyThing, implementar los métodos necesarios. Está bien hasta ahora, pero esas dos clases necesitan conocerse para poder devolver instancias entre ellas.Defypes de referencia mutua en Clojure
Creo que puedo hacerlo declarando las funciones de Clojure make-transient y make-persistent, luego definiendo el deftype (refiriéndome a esa función), luego implementando las funciones con los tipos existentes, pero parece bastante bruto para mí. ¿Hay alguna opción mejor?
Editar: eso funciona, pero sigue siendo asqueroso.
no se puede probar ahora pero pero podría ser posible agregar la funcionalidad después de haber definido los dos tipos con "extender-tipo"? – mikera
Actualmente, no hay otra opción que la declaración directa de las funciones auxiliares. No creo que incurra en una penalización notable en el rendimiento (especialmente en 1.3). Sin embargo, hay otra cosa que puede funcionar: definir el tipo transitorio con reify dentro del método asTransient. No lo hice, pero hay buenas posibilidades de que aciertes a otra limitación del compilador (si el seguimiento de la pila habla de un apéndice, esa es la) . – cgrand
El comentario de cgrand fue perfecto. Lo aceptaría si fuera una respuesta; simplemente agregando un comentario aquí para que cualquiera que se encuentre con la pregunta sepa cómo resolverlo. – amalloy