Clojure: vars, atomos, y refs (oh my)

7

también: defs, campos java, agentes

El sitio web de clojure tiene documentación para estos conceptos:

Entiendo las palabras, pero conceptualmente no obtengo el propósito / significado de éstas. ¿Cuándo debo / cómo puedo saber cuándo usarlos?

    
pregunta amara 07.04.2012 - 03:54

1 respuesta

11
  • Use Refs para cambios sincrónicos, coordinados y compartidos.
  • Use Agentes para asíncronos , cambios independientes y compartidos.
  • Use Átomos para cambios sincrónicos, independientes y compartidos.
  • Use Vars para cambios aislados.

EDIT
Los enlaces que publicaste son muy importantes de leer, sin embargo, también recomiendo esto: Memoria de Transacción de Software

Tenga en cuenta que las transacciones abortadas se se reproducirán . ¿Qué significa esto?
Esto significa que el código dentro de dosync podría ejecutarse un par de veces, por lo que debe tener cuidado de que el código esté libre de efectos secundarios.

Un uso de agentes es tener efectos secundarios controlados. Considera esto:

(dosync
  (send log-agent message args)
  (alter reference function)) 

El STM mantendrá todas las acciones necesarias para enviarse a los agentes hasta que tenga éxito.

¿Cuál es la diferencia entre átomos y agentes ?
Las actualizaciones a los agentes se realizarán de forma asincrónica en algún momento del futuro, las actualizaciones a los átomos se realizarán de forma inmediata.

Los átomos y los agentes no necesitan ejecutarse dentro de una transacción, los refs deben ser ( coordinados cambios, ¿recuerdas?)

    
respondido por el Chiron 07.04.2012 - 04:14

Lea otras preguntas en las etiquetas