Clojure: vars, atoms e refs (oh mio)

7

anche: defs, campi java, agenti

Il sito web del clojure contiene la documentazione per questi concetti:

Capisco le parole, ma non concettualmente ho lo scopo / significato di questi. Quando dovrei / come posso sapere quando usarli?

    
posta amara 07.04.2012 - 03:54
fonte

1 risposta

11
  • Utilizza Rifiuti per le modifiche sincrone, coordinate e condivise.
  • Utilizza Agenti per asincroni , modifiche indipendenti e condivise.
  • Utilizza Atomi per le modifiche sincrone, indipendenti e condivise.
  • Utilizza Vars per modifiche isolate.

Modifica
I link che hai postato sono molto importanti da leggere, tuttavia consiglio anche questo: Memoria transazionale del software

Ricorda che le transazioni interrotte saranno ripetute . Cosa significa?
Significa che il codice all'interno di dosync potrebbe essere eseguito un paio di volte, quindi è necessario fare attenzione che il codice sia libero dagli effetti collaterali.

Un uso di agenti è di avere effetti collaterali controllati. Considera questo:

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

L'STM manterrà tutte le azioni necessarie per essere inviato agli agenti fino al successo.

Qual è la differenza tra atomi e agenti ?
Gli aggiornamenti agli agenti avverranno in modo asincrono in un determinato punto del futuro, gli aggiornamenti agli atomi verranno eseguiti immediatamente.

Gli Atomi e gli agenti non devono essere eseguiti all'interno di una transazione, i riferimenti dovrebbero essere ( coordinati cambiamenti, ricordi?)

    
risposta data 07.04.2012 - 04:14
fonte

Leggi altre domande sui tag