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.
>>
>> ### 1.3 Warn on Boxed Math
>>
>> One source of performance issues is the (unintended) use of arithmetic
>> operations on
>> boxed numbers. To make detecting the presence of boxed math easier, a
>> warning will now
>> be emitted about boxed math if \*unchecked-math* is enabled.
>>
>> Example use:
>>
>>     user> (defn plus-2 [x] (+ x 2))  ;; no warning, but boxed
>> #'user/plus-2
>>     user> (set! *unchecked-math* true)
>> true
>>     user> (defn plus-2 [x] (+ x 2)) ;; now we see a warning
>>     Boxed math warning, NO_SOURCE_PATH:10:18 - call: public static
>> java.lang.Number
>> clojure.lang.Numbers.unchecked_add(java.lang.Object,long).
>>     #'user/plus-2
>> user> (defn plus-2 [^long x] (+ x 2)) ;; use a hint to avoid boxing
>> #'user/plus-2
>>
>> * [CLJ-1325](http://dev.clojure.org/jira/browse/CLJ-1325)
>>
>> ### 1.4 update - like update-in for first level
>>
>> `update` is a new function that is like update-in specifically for
>> first-level keys:
>>
>>     (update m k f args...)
>>
>> Example use:
>>
>>     user> (update {:a 1} :a inc)
>> {:a 2}
>> user> (update {:a 1} :a + 2)
>> {:a 3}
>> user> (update {} :a identity)  ;; missing returns nil
>> {:a nil}
>>
>> * [CLJ-1251](http://dev.clojure.org/jira/browse/CLJ-1251)
>>
>> ## 2 Enhancements
>>
>> ### 2.1 Error messages
>>
>> * [CLJ-1261](http://dev.clojure.org/jira/browse/CLJ-1261)
>>   Invalid defrecord results in exception attributed to consuming ns
>> instead of defrecord ns
>> * [CLJ-1169](http://dev.clojure.org/jira/browse/CLJ-1169)
>>   Report line,column, and source in defmacro errors
>>
>> ### 2.2 Documentation strings
>>
>> No changes.
>>
>> ### 2.3 Performance
>>
>> * [CLJ-1430](http://dev.clojure.org/jira/browse/CLJ-1430)
>>   Improve performance of partial with more unrolling
>> * [CLJ-1384](http://dev.clojure.org/jira/browse/CLJ-1384)
>>   clojure.core/set should use transients for better performance
>> * [CLJ-1429](http://dev.clojure.org/jira/browse/CLJ-1429)
>>   Cache unknown multimethod value default dispatch
>>
>> ### 2.4 Other enhancements
>>
>> * [CLJ-1191](http://dev.clojure.org/jira/browse/CLJ-1191)
>>   Improve apropos to show some indication of namespace of symbols found
>> * [CLJ-1378](http://dev.clojure.org/jira/browse/CLJ-1378)
>>   Hints don't work with #() form of function
>> * [CLJ-1498](http://dev.clojure.org/jira/browse/CLJ-1498)
>>   Removes owner-thread check from transients - this check was preventing
>> some valid usage of transients in core.async where a transient is created on
>> one thread and then used again in another pooled thread (while still
>> maintaining thread isolation).
>>
>> ## 3 Bug Fixes
>>
>> * [CLJ-1362](http://dev.clojure.org/jira/browse/CLJ-1362)
>>   Reduce broken on some primitive vectors
>> * [CLJ-1388](http://dev.clojure.org/jira/browse/CLJ-1388)
>>   Equality bug on records created with nested calls to map->record
>> * [CLJ-1274](http://dev.clojure.org/jira/browse/CLJ-1274)
>>   Unable to set compiler options via system properties except for AOT
>> compilation
>> * [CLJ-1241](http://dev.clojure.org/jira/browse/CLJ-1241)
>>   NPE when AOTing overrided clojure.core functions
>> * [CLJ-1185](http://dev.clojure.org/jira/browse/CLJ-1185)
>>   reductions does not check for reduced value
>> * [CLJ-1039](http://dev.clojure.org/jira/browse/CLJ-1039)
>>   Using def with metadata {:type :anything} throws ClassCastException
>> during printing
>> * [CLJ-887](http://dev.clojure.org/jira/browse/CLJ-887)
>>   Error when calling primitive functions with destructuring in the arg
>> vector
>> * [CLJ-823](http://dev.clojure.org/jira/browse/CLJ-823)
>>   Piping seque into seque can deadlock
>> * [CLJ-738](http://dev.clojure.org/jira/browse/CLJ-738)
>>   <= is incorrect when args include Double/NaN
>
> --
> 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.

-- 
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