+1 for the !

No atomic changes here, no coordination whatsoever.

At the mercy of the caller...

> I asked Rich and he said "making a volatile is as dangerous as any ! op".
> 
> Some people have also asked about vswap! being a macro instead of a method
> on Volatile. The issue there is that vswap! takes a variadic number of
> update function args. If implemented as a method, you'd need to provide
> multiple arities or eventually use apply (like in Atom's swap!
> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Atom.java#L79)
> - doing it in a macro lets that expansion take place at compile time to
> provide better performance without the apply.
> 
> 
> 
> 
> 
> On Mon, Sep 8, 2014 at 1:36 PM, Jozef Wagner <jozef.wag...@gmail.com> wrote:
> 
> > FYI the ticket about volatile is at
> > http://dev.clojure.org/jira/browse/CLJ-1512 and the same question was
> > raised there.
> >
> > On Mon, Sep 8, 2014 at 4:25 PM, Frantisek Sodomka <fsodo...@gmail.com>
> > wrote:
> > > Hello,
> > > I posted a question about volatiles on the github commit:
> > >
> > https://github.com/clojure/clojure/commit/60440977823752f13a3fec3637538e9a1d68c5d4
> > >
> > > I don't know if anybody noticed, so... why is volatile created with
> > function
> > > "volatile!" and not "volatile" ? Atoms, refs and agents don't have
> > > exclamation mark in their constructor functions.
> > >
> > > Should I think about volatiles as mutable locals?  :-)
> > >
> > > FrantiĊĦek
> > >
> > >
> > > On Friday, September 5, 2014 4:26:53 PM UTC+2, Alex Miller wrote:
> > >>
> > >> Clojure 1.7.0-alpha1 is now available.
> > >>
> > >> Try it via
> > >> - Download:
> > >> http://central.maven.org/maven2/org/clojure/clojure/1.7.0-alpha2/
> > >> - Download securely:
> > >> https://repo1.maven.org/maven2/org/clojure/clojure/1.7.0-alpha2/
> > >> - Leiningen: [org.clojure/clojure "1.7.0-alpha2"]
> > >>
> > >> Highlights below, full change log here:
> > >> https://github.com/clojure/clojure/blob/master/changes.md
> > >>
> > >> For users of Clojure 1.7.0-alpha1, there have been a few important
> > changes
> > >> in transducers since alpha1:
> > >> - Removed flatmap transducer
> > >> - Added cat transducer
> > >> - mapcat 1-arity is now a transducer, specifically: (comp (map f) cat)
> > >> - The completing function has been lifted to be public
> > >>
> > >> Clojure 1.7.0-alpha2 has the changes below from 1.6.0:
> > >>
> > >> ## 1 New and Improved Features
> > >>
> > >> ### 1.1 Transducers
> > >>
> > >> Transducers is a new way to decouple algorithmic transformations from
> > >> their
> > >> application in different contexts. Transducers are functions that
> > >> transform
> > >> reducing functions to build up a "recipe" for transformation.
> > >>
> > >> Also see:
> > http://blog.cognitect.com/blog/2014/8/6/transducers-are-coming
> > >>
> > >> Many existing sequence functions now have a new arity (one fewer
> > argument
> > >> than before). This arity will return a transducer that represents the
> > same
> > >> logic but is independent of lazy sequence processing. Functions included
> > >> are:
> > >>
> > >> * conj (conjs to [])
> > >> * map
> > >> * mapcat
> > >> * filter
> > >> * remove
> > >> * take
> > >> * take-while
> > >> * drop
> > >> * drop-while
> > >> * cycle
> > >> * take-nth
> > >> * replace
> > >> * partition-by
> > >> * partition-all
> > >> * keep
> > >> * keep-indexed
> > >>
> > >> Additionally some new transducer functions have been added:
> > >>
> > >> * cat - concatenates the contents of each input
> > >> * de-dupe - removes consecutive duplicated values
> > >> * random-sample - returns items from coll with random probability
> > >>
> > >> And this function can be used to make completing transforms:
> > >>
> > >> * completing
> > >>
> > >> There are also several new or modified functions that can be used to
> > apply
> > >> transducers in different ways:
> > >>
> > >> * sequence - takes a transformation and a coll and produces a lazy seq
> > >> * transduce - reduce with a transformation (eager)
> > >> * iteration - returns an iterable/seqable/reducible seq of applications
> > of
> > >> the transducer to items in coll. Applications are re-performed with
> > every
> > >> iterator/seq/reduce.
> > >> * run! - run the transformation for side effects on the collection
> > >>
> > >> There have been a number of internal changes to support transducers:
> > >>
> > >> * volatiles - there are a new set of functions (volatile!, vswap!,
> > >> vreset!, volatile?) to create and use volatile "boxes" to hold state in
> > >> stateful transducers. Volatiles are faster than atoms but give up
> > atomicity
> > >> guarantees so should only be used with thread isolation.
> > >> * array iterators - added support for iterators over arrays
> > >>
> > >> Some issues created and addressed during development:
> > >> * [CLJ-1511](http://dev.clojure.org/jira/browse/CLJ-1511)
> > >> * [CLJ-1497](http://dev.clojure.org/jira/browse/CLJ-1497)
> > >>
> > >> ### 1.2 Keyword and Symbol Construction
> > >>
> > >> In response to issues raised in
> > >> [CLJ-1439](http://dev.clojure.org/jira/browse/CLJ-1439),
> > >> several changes have been made in symbol and keyword construction:
> > >>
> > >> 1) The main bottleneck in construction of symbols (which also occurs
> > >> inside keywords) was
> > >> interning of the name and namespace strings. This interning has been
> > >> removed, resulting
> > >> in a performance increase.
> > >>
> > >> 2) Keywords are cached and keyword construction includes a cache check.
> > A
> > >> change was made
> > >> to only clear the cache reference queue when there is a cache miss

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to