clojure rif-set vs pendolari vs alter



clojure tutorial (1)

Come spiegazione super semplice di come il software Transactional Memory funziona in clojure; riprova le transazioni finché tutti non superano i loro valori senza averne modificato i valori. Puoi aiutarlo a prendere questa decisione utilizzando le funzioni di modifica dei cambiamenti che danno suggerimenti su quali interazioni sono sicure tra le transazioni.

  • ref-set è per quando non ti interessa il valore corrente. Basta impostare su questo ! ref-set ti salva l'angoscia di scrivere qualcosa come (alter my-ref (fun [_] 4)) solo per impostare il valore di my-ref a 4. (ref-set my-ref 4) sicuramente sembra molto meglio :).
    Usa ref-set per impostare semplicemente il valore.

  • alter è il più normale standard. Utilizzare questa funzione per modificare il valore. Questa è la carne della STM. Utilizza la funzione che si passa per modificare il valore e riprova se non può garantire che il valore è rimasto invariato dall'inizio della transazione. Questo è molto sicuro, anche in alcuni casi in cui non è necessario che sia così sicuro, come l'incremento di un contatore. Probabilmente vorrai usare la maggior parte del tempo.

  • commute è una versione ottimizzata dell'alter in quei momenti in cui l'ordine delle cose non ha importanza. non fa differenza chi ha aggiunto quale +1 al contatore. Il risultato è lo stesso. Se STM sta decidendo se la transazione è sicura da eseguire e ha solo conflitti sulle operazioni di pendolari e nessuna su operazioni alterate, allora può andare avanti e commettere i nuovi valori senza dover riavviare nessuno. Questo può salvare i tentativi occasionali di transazione anche se non vedrai enormi guadagni da questo nel codice normale.
    Usa i commute quando puoi.

Qual è la differenza nei 3 modi per impostare il valore di un ref in Clojure? Ho letto più volte i documenti su ref-set, permute e modifiche. Sono piuttosto confuso quali usare a che ora. Qualcuno può fornirmi una breve descrizione di quali sono le differenze e perché ciascuna è necessaria?





clojure