title: What are the semantic implications of :volatile-mutable versus :unsynchronized-mutable?
body: <p>I was studying a clojure lib when I noticed that a mutable field was annotated with <a href="https://github.com/pedestal/pedestal/blob/master/service/src/io/pedestal/service/http/servlet.clj#L19" rel="noreferrer">^:unsynchronized-mutable</a>. Mutable is mutable, but I had no idea what the <em>unsynchronized</em> part meant, so I read the <a href="http://clojuredocs.org/clojure_core/1.3.0/clojure.core/deftype" rel="noreferrer">docs</a>, which contain:</p>
  
  <blockquote>
    <p>Note well that mutable fields are extremely difficult to use
    correctly, and are present only to facilitate the building of higher
    level constructs, such as Clojure's reference types, in Clojure
    itself. They are for experts only - if the semantics and implications
    of :volatile-mutable or :unsynchronized-mutable are not immediately
    apparent to you, you should not be using them.</p>
  </blockquote>
  
  <p>I couldn't get the nuance: is it saying that in practice it doesn't matter which mutability annotation I choose, or that people should just forget about using mutable types altogether? </p>
  
  <p>And, for the sake of curiosity, in a lower level of abstraction, what is the semantic difference between them?</p>
  
  <p>Thanks!</p>