Ok, thanks - I was looking for a way to access the data, right, I'll try tagged-literal for this.
On 1 April 2015 at 17:03, Alex Miller <a...@puredanger.com> wrote: > We do not expect to provide readers for the #object and #error forms > (afaik). It's not possible to actual create a new Object or Throwable form > that would be useful as an instance. > > The new tagged-literal function could be used as a fallback reader > function for either though, which would then allow you to retrieve either > the tag or form as data. > > On Tue, Mar 31, 2015 at 9:57 PM, Colin Fleming < > colin.mailingl...@gmail.com> wrote: > >> One question - it appears that the new #object and #error forms aren't >> readable at the moment. Is this something that's coming, or is the >> intention just that people could provide reader functions for these if they >> wanted to? >> >> On 1 April 2015 at 14:01, Sean Corfield <s...@corfield.org> wrote: >> >>> With instaparse 1.3.6 available, we’ve been able to upgrade our dev >>> stack to Clojure 1.7.0-alpha6 and all our automated tests pass (and our >>> full build/test script seems to be running a bit faster although we haven’t >>> actually benchmarked our application yet). We’ll push alpha6 into QA either >>> later today or tomorrow in preparation for our next production build (we’re >>> running alpha5 in production right now). >>> >>> Sean >>> >>> On Mar 31, 2015, at 3:21 PM, Sean Corfield <s...@corfield.org> wrote: >>> >>> Looks like a great set of updates! >>> >>> Unfortunately, as several of us found out today, the change to the >>> StringReader invoke() signature breaks Instaparse so I’m blocked from >>> testing the World Singles code base with alpha6 (or master) at the moment. >>> Is that just a hazard of relying on the internals of reader classes or >>> would Clojure/core consider that breakage avoidable (by adding an >>> overloaded signature instead of just changing the current signature)? Since >>> those readers extend AFn, it seems that there is an expectation that they >>> would be used as functions in Clojure code out in the wild... >>> >>> Sean >>> >>> On Mar 31, 2015, at 9:50 AM, Alex Miller <a...@puredanger.com> wrote: >>> >>> Clojure 1.7.0-alpha6 is now available. >>> >>> Try it via >>> - Download: >>> https://repo1.maven.org/maven2/org/clojure/clojure/1.7.0-alpha6/ >>> - Leiningen: [org.clojure/clojure "1.7.0-alpha6"] >>> >>> Regression fixes from previous alphas (and one from 1.6): >>> >>> 1) CLJ-1544 was rolled back and will be investigated for a future >>> release. >>> 2) CLJ-1637 fixed regression with vec on MapEntry >>> 3) CLJ-1663 fixed regression in classloader (affected Cursive) >>> 4) CLJ-1638 fixed regression with removed PersistentVector.create(List) >>> method >>> 5) CLJ-1681 fixed regression in 1.6 with NPE on reflection warning for >>> literal nil arg >>> 6) CLJ-1604 fixed problem with AOT and shadowing clojure.core symbols >>> that prevented update >>> >>> Some highlights new in alpha6: >>> >>> ## Transducer-related changes: >>> >>> The LazyTransformer introduced to create lazy transforming sequences has >>> been >>> replaced with a TransformingIterator. This was done to simplify the code >>> around transformations and to make certain use cases around eduction >>> more efficient. >>> >>> ## Faster reduce, iterator, and sequence paths >>> >>> A lot of work has been done across a set of tickets to improve the >>> ability of >>> collections to provide more efficient reduce or iterator performance, >>> and also to >>> make common sequence generators create faster sequence and reduce paths. >>> You >>> should see significant performance in many reduce-related paths (this >>> includes >>> reduce, transduce, into, and anything else built on reduce). >>> >>> Many of those changes also have beneficial sequence performance, so you >>> may see >>> some benefits even in code that does not use transducers. >>> >>> * Most uses of SeqIterator have now been replaced with iterators that >>> directly walk >>> the underlying source for improved efficiency. This includes maps, sets, >>> records, etc. >>> * repeat - now returns a faster sequence with a fast reduce path >>> * cycle - now returns a faster sequence with a fast reduce path >>> * iterate - now returns a faster sequence with a fast reduce path >>> * range - (did not quite make it in, but coming soon...) >>> * keys - iterates directly over the keys of a map, without seq or >>> MapEntry allocation >>> * vals - iterates directly over the vals of a map, without seq or >>> MapEntry allocation >>> * iterator-seq - now creates a chunked sequence when previously it was >>> unchunked >>> * vec and set - were not changed in this release but were set up in a >>> previous alpha >>> to take advantage of the reduce and iterator changes above >>> >>> ## Reader conditionals >>> >>> Reader Conditionals is a new capability to support portable code that >>> can run on multiple Clojure platforms with only small changes. In >>> particular, this feature aims to support the increasingly common case >>> of libraries targeting both Clojure and ClojureScript. >>> >>> Code intended to be common across multiple platforms should use a new >>> supported file extension: ".cljc". When requested to load a namespace, >>> the platform-specific file extension (.clj, .cljs) will be checked >>> prior to .cljc. >>> >>> A new reader form can be used to specify "reader conditional" code in >>> cljc files (and *only* cljc files). Each platform defines a feature >>> identifying the platform (:clj, :cljs, :cljr). The reader conditional >>> specifies code that is read conditionally based on the feature/ >>> >>> Form #? takes a list of alternating feature and expression. These are >>> checked like cond and the selected expression is read and returned. Other >>> branches are unread. If no branch is selected, the reader reads nothing >>> (not nil, but literally as if reading ""). An optional ":default" branch >>> can be used as a fallthrough. >>> >>> Reader conditional with 2 features and a default: >>> >>> #?(:clj Double/NaN >>> :cljs js/NaN >>> :default nil) >>> >>> There is also a reader conditional splicing form. The evaluated >>> expression >>> should be sequential and will be spliced into the surrounded code, >>> similar >>> to unqoute-splicing. >>> >>> For example: >>> >>> [1 2 #?@(:clj [3 4] :cljs [5 6])] >>> >>> This form would read as [1 2 3 4] on Clojure, [1 2 5 6] on ClojureScript, >>> and [1 2] on any other platform. >>> >>> Additionally, the reader can now be invoked with options for the features >>> to use and how to interpret reader conditionals. By default, reader >>> conditionals >>> are not allowed, but that can be turned on, or a "preserve" mode can be >>> used to >>> preserve all branches (most likely useful for tooling or source >>> transforms). >>> >>> In the preserve mode, the reader conditional itself and any tagged >>> literals >>> within the unselected branches are returned as tagged literal data. >>> >>> For more information, see: >>> http://dev.clojure.org/display/design/Reader+Conditionals >>> >>> Two important side notes: >>> - Clojure dependencies have been updated and you must re-run antsetup.sh >>> if you >>> build Clojure locally with ant. >>> - The equivalent ClojureScript support for reader conditionals is not >>> yet available >>> but is a top priority to release as soon as possible... stay tuned. >>> >>> ## Printing as data >>> >>> There have been enhancements in how the REPL prints values without a >>> print-method, specifically Throwable and the fallthrough Object case. >>> Both cases now print in a tagged literal data form that can be read >>> by the reader. >>> >>> Unhandled objects print with the class, hash code, and toString: >>> >>> user=> *ns* >>> #object[clojure.lang.Namespace 0x55aa628 "user"] >>> >>> Thrown exceptions will still be printed in the normal way by the default >>> REPL but printing them to a stream will show a different form: >>> >>> user=> (/ 1 0) >>> ArithmeticException Divide by zero clojure.lang.Numbers.divide >>> (Numbers.java:158) >>> user=> (println *e) >>> #error{:cause Divide by zero, >>> :via [{:type java.lang.ArithmeticException, >>> :message Divide by zero, >>> :at [clojure.lang.Numbers divide Numbers.java 158]}], >>> :trace >>> [[clojure.lang.Numbers divide Numbers.java 158] >>> [clojure.lang.Numbers divide Numbers.java 3808] >>> [user$eval5 invoke NO_SOURCE_FILE 3] >>> ;; elided ... >>> ]]} >>> >>> For all changes new in alpha6, see the issues marked "(alpha6)" in the >>> full changes below. >>> >>> ------------------------------------------------------------ >>> Clojure 1.7.0-alpha6 has the following updates since 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://clojure.org/transducers >>> >>> 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 >>> * take-nth >>> * replace >>> * partition-by >>> * partition-all >>> * keep >>> * keep-indexed >>> * map-indexed >>> * distinct >>> * interpose >>> >>> Additionally some new transducer functions have been added: >>> >>> * cat - concatenates the contents of each input >>> * dedupe - 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) >>> * eduction - returns a reducible/iterable of applications of the >>> transducer to items in coll. Applications are re-performed with every >>> reduce/iterator. >>> * 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 related issues addressed during development: >>> * [CLJ-1511](http://dev.clojure.org/jira/browse/CLJ-1511) >>> * [CLJ-1497](http://dev.clojure.org/jira/browse/CLJ-1497) >>> * [CLJ-1549](http://dev.clojure.org/jira/browse/CLJ-1549) >>> * [CLJ-1537](http://dev.clojure.org/jira/browse/CLJ-1537) >>> * [CLJ-1554](http://dev.clojure.org/jira/browse/CLJ-1554) >>> * [CLJ-1601](http://dev.clojure.org/jira/browse/CLJ-1601) >>> * [CLJ-1606](http://dev.clojure.org/jira/browse/CLJ-1606) >>> * [CLJ-1621](http://dev.clojure.org/jira/browse/CLJ-1621) >>> * [CLJ-1600](http://dev.clojure.org/jira/browse/CLJ-1600) >>> * [CLJ-1635](http://dev.clojure.org/jira/browse/CLJ-1635) (alpha6) >>> * [CLJ-1683](http://dev.clojure.org/jira/browse/CLJ-1683) (alpha6) >>> * [CLJ-1669](http://dev.clojure.org/jira/browse/CLJ-1669) (alpha6) >>> >>> ### 1.2 Reader Conditionals (alpha6) >>> >>> Reader Conditionals is a new capability to support portable code that >>> can run on multiple Clojure platforms with only small changes. In >>> particular, this feature aims to support the increasingly common case >>> of libraries targeting both Clojure and ClojureScript. >>> >>> Code intended to be common across multiple platforms should use a new >>> supported file extension: ".cljc". When requested to load a namespace, >>> the platform-specific file extension (.clj, .cljs) will be checked >>> prior to .cljc. >>> >>> A new reader form can be used to specify "reader conditional" code in >>> cljc files (and *only* cljc files). Each platform defines a feature >>> identifying the platform (:clj, :cljs, :cljr). The reader conditional >>> specifies code that is read conditionally based on the feature/ >>> >>> Form #? takes a list of alternating feature and expression. These are >>> checked like cond and the selected expression is read and returned. Other >>> branches are unread. If no branch is selected, the reader reads nothing >>> (not nil, but literally as if reading ""). An optional ":default" branch >>> can be used as a fallthrough. >>> >>> Reader conditional with 2 features and a default: >>> >>> #?(:clj Double/NaN >>> :cljs js/NaN >>> :default nil) >>> >>> There is also a reader conditional splicing form. The evaluated >>> expression >>> should be sequential and will be spliced into the surrounded code, >>> similar >>> to unqoute-splicing. >>> >>> For example: >>> >>> [1 2 #?@(:clj [3 4] :cljs [5 6])] >>> >>> This form would read as [1 2 3 4] on Clojure, [1 2 5 6] on ClojureScript, >>> and [1 2] on any other platform. >>> >>> Additionally, the reader can now be invoked with options for the features >>> to use and how to interpret reader conditionals. By default, reader >>> conditionals >>> are not allowed, but that can be turned on, or a "preserve" mode can be >>> used to >>> preserve all branches (most likely useful for tooling or source >>> transforms). >>> >>> In the preserve mode, the reader conditional itself and any tagged >>> literals >>> within the unselected branches are returned as tagged literal data. >>> >>> For more information, see: >>> http://dev.clojure.org/display/design/Reader+Conditionals >>> >>> * [CLJ-1424](http://dev.clojure.org/jira/browse/CLJ-1424) >>> >>> ### 1.3 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.4 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 set to >>> :warn-on-boxed (any truthy >>> value will enable unchecked-math, only this specific value enables the >>> warning). >>> >>> Example use: >>> >>> user> (defn plus-2 [x] (+ x 2)) ;; no warning, but boxed >>> #'user/plus-2 >>> user> (set! *unchecked-math* :warn-on-boxed) >>> 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) >>> * [CLJ-1535](http://dev.clojure.org/jira/browse/CLJ-1535) >>> * [CLJ-1642](http://dev.clojure.org/jira/browse/CLJ-1642) (alpha6) >>> >>> ### 1.5 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) >>> >>> ### 1.6 Faster reduce and iterator paths (alpha6) >>> >>> Several important Clojure functions now return sequences that also >>> contain fast reduce() (or in some cases iterator()) paths. In many >>> cases, the new implementations are also faster for lazy sequences >>> >>> * repeat - now implements IReduce >>> * cycle - implements IReduceInit >>> * iterate - implements IReduceInit >>> * range - implements IReduce, specialized case handles common case of >>> all longs >>> * keys - iterates directly over the keys of a map, without seq or >>> MapEntry allocation >>> * vals - iterates directly over the vals of a map, without seq or >>> MapEntry allocation >>> * iterator-seq - creates a chunked sequence when previously it was >>> unchunked >>> >>> Additionally, hash-maps and hash-sets now provide iterators that walk >>> the data structure directly rather than via a sequence. >>> >>> A new interface (IMapIterable) for direct key and val iterators on maps >>> was added. External data structures can use this interface to provide >>> direct key and val iterators via keys and vals. >>> >>> These enhancements are particularly effective when used >>> in tandem with transducers via transduce, sequence, into, and >>> eduction. >>> >>> * [CLJ-1603](http://dev.clojure.org/jira/browse/CLJ-1603) >>> * [CLJ-1515](http://dev.clojure.org/jira/browse/CLJ-1515) >>> * [CLJ-1602](http://dev.clojure.org/jira/browse/CLJ-1602) >>> * [CLJ-1669](http://dev.clojure.org/jira/browse/CLJ-1669) >>> >>> ### 1.7 Printing as data (alpha6) >>> >>> There have been enhancements in how the REPL prints values without a >>> print-method, specifically Throwable and the fallthrough Object case. >>> Both cases now print in a tagged literal data form that can be read >>> by the reader. >>> >>> Unhandled objects print with the class, hash code, and toString: >>> >>> user=> *ns* >>> #object[clojure.lang.Namespace 0x55aa628 "user"] >>> >>> Thrown exceptions will still be printed in the normal way by the default >>> REPL but printing them to a stream will show a different form: >>> >>> user=> (/ 1 0) >>> ArithmeticException Divide by zero clojure.lang.Numbers.divide >>> (Numbers.java:158) >>> user=> (println *e) >>> #error{:cause Divide by zero, >>> :via [{:type java.lang.ArithmeticException, >>> :message Divide by zero, >>> :at [clojure.lang.Numbers divide Numbers.java 158]}], >>> :trace >>> [[clojure.lang.Numbers divide Numbers.java 158] >>> [clojure.lang.Numbers divide Numbers.java 3808] >>> [user$eval5 invoke NO_SOURCE_FILE 3] >>> ;; elided ... >>> ]]} >>> >>> ## 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 >>> * [CLJ-1297](http://dev.clojure.org/jira/browse/CLJ-1297) >>> Give more specific hint if namespace with "-" not found to check file >>> uses "_" >>> >>> ### 2.2 Documentation strings >>> >>> * [CLJ-1417](http://dev.clojure.org/jira/browse/CLJ-1417) >>> clojure.java.io/input-stream has incorrect docstring >>> * [CLJ-1357](http://dev.clojure.org/jira/browse/CLJ-1357) >>> Fix typo in gen-class doc-string >>> * [CLJ-1479](http://dev.clojure.org/jira/browse/CLJ-1479) >>> Fix typo in filterv example >>> * [CLJ-1480](http://dev.clojure.org/jira/browse/CLJ-1480) >>> Fix typo in defmulti docstring >>> * [CLJ-1477](http://dev.clojure.org/jira/browse/CLJ-1477) >>> Fix typo in deftype docstring >>> * [CLJ-1478](http://dev.clojure.org/jira/browse/CLJ-1378) >>> Fix typo in clojure.main usage >>> >>> ### 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 >>> * [CLJ-1529](http://dev.clojure.org/jira/browse/CLJ-1529) >>> Reduce compile times by avoiding unnecessary calls to Class.forName() >>> * [CLJ-1546](http://dev.clojure.org/jira/browse/CLJ-1546) >>> vec is now faster on almost all inputs >>> * [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618) >>> set is now faster on almost all inputs >>> >>> ### 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). >>> * [CLJ-803](http://dev.clojure.org/jira/browse/CLJ-803) >>> Extracted IAtom interface implemented by Atom. >>> * [CLJ-1315](http://dev.clojure.org/jira/browse/CLJ-1315) >>> Don't initialize classes when importing them >>> * [CLJ-1330](http://dev.clojure.org/jira/browse/CLJ-1330) >>> Class name clash between top-level functions and defn'ed ones >>> * [CLJ-1349](http://dev.clojure.org/jira/browse/CLJ-1349) >>> Update to latest test.generative and add dependency on test.check >>> * [CLJ-1546](http://dev.clojure.org/jira/browse/CLJ-1546) >>> vec now works with things that only implement Iterable or IReduceInit >>> * [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618) >>> set now works with things that only implement Iterable or IReduceInit >>> * [CLJ-1633](http://dev.clojure.org/jira/browse/CLJ-1633) >>> PersistentList/creator doesn't handle ArraySeqs correctly >>> * [CLJ-1589](http://dev.clojure.org/jira/browse/CLJ-1589) (alpha6) >>> Clean up unused paths in InternalReduce >>> * [CLJ-1677](http://dev.clojure.org/jira/browse/CLJ-1677) (alpha6) >>> Add setLineNumber() to LineNumberingPushbackReader >>> * [CLJ-1667](http://dev.clojure.org/jira/browse/CLJ-1667) (alpha6) >>> Change test to avoid using hard-coded socket port >>> * [CLJ-1683](http://dev.clojure.org/jira/browse/CLJ-1683) (alpha6) >>> Change reduce tests to better catch reduce without init bugs >>> >>> ## 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 >>> * [CLJ-1408](http://dev.clojure.org/jira/browse/CLJ-1408) >>> Make cached string value of Keyword and Symbol transient >>> * [CLJ-1466](http://dev.clojure.org/jira/browse/CLJ-1466) >>> clojure.core/bean should implement Iterable >>> * [CLJ-1578](http://dev.clojure.org/jira/browse/CLJ-1578) >>> Make refer of Clojure core function not throw exception on reload >>> * [CLJ-1501](http://dev.clojure.org/jira/browse/CLJ-1501) >>> LazySeq equals() should not use equiv() logic >>> * [CLJ-1572](http://dev.clojure.org/jira/browse/CLJ-1572) >>> into (and other fns that rely on reduce) require only IReduceInit >>> * [CLJ-1619](http://dev.clojure.org/jira/browse/CLJ-1619) >>> PersistentVector now directly implements reduce without init >>> * [CLJ-1580](http://dev.clojure.org/jira/browse/CLJ-1580) >>> Transient collections should guarantee thread visibility >>> * [CLJ-1590](http://dev.clojure.org/jira/browse/CLJ-1590) >>> Some IReduce/IReduceInit implementors don't respect reduced >>> * [CLJ-979](http://dev.clojure.org/jira/browse/CLJ-979) >>> Clojure resolves to wrong deftype classes when AOT compiling or >>> reloading >>> * [CLJ-1636](http://dev.clojure.org/jira/browse/CLJ-1636) (alpha6) >>> Fix intermittent SeqIterator problem by removing use of this as a >>> sentinel >>> * [CLJ-1637](http://dev.clojure.org/jira/browse/CLJ-1636) (alpha6) >>> Fix regression from CLJ-1546 that broke vec on MapEntry >>> * [CLJ-1663](http://dev.clojure.org/jira/browse/CLJ-1663) (alpha6) >>> Fix regression from CLJ-979 for DynamicClassLoader classloader >>> delegation >>> * [CLJ-1604](http://dev.clojure.org/jira/browse/CLJ-1604) (alpha6) >>> Fix error from AOT'ed code defining a var with a clojure.core symbol >>> name >>> * [CLJ-1561](http://dev.clojure.org/jira/browse/CLJ-1561) (alpha6) >>> Fix incorrect line number reporting for error locations >>> * [CLJ-1568](http://dev.clojure.org/jira/browse/CLJ-1568) (alpha6) >>> Fix incorrect line number reporting for error locations >>> * [CLJ-1638](http://dev.clojure.org/jira/browse/CLJ-1638) (alpha6) >>> Fix regression from CLJ-1546 removed PersistentVector.create(List) >>> method >>> * [CLJ-1681](http://dev.clojure.org/jira/browse/CLJ-1681) (alpha6) >>> Fix regression from CLJ-1248 (1.6) in reflection warning with literal >>> nil argument >>> >>> >>> >>> >>> Sean Corfield -- (904) 302-SEAN >>> An Architect's View -- http://corfield.org/ >>> >>> "Perfection is the enemy of the good." >>> -- Gustave Flaubert, French realist novelist (1821-1880) >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure Dev" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure-dev+unsubscr...@googlegroups.com. >>> To post to this group, send email to clojure-...@googlegroups.com. >>> Visit this group at http://groups.google.com/group/clojure-dev. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Clojure Dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure-dev+unsubscr...@googlegroups.com. >> To post to this group, send email to clojure-...@googlegroups.com. >> Visit this group at http://groups.google.com/group/clojure-dev. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "Clojure Dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure-dev+unsubscr...@googlegroups.com. > To post to this group, send email to clojure-...@googlegroups.com. > Visit this group at http://groups.google.com/group/clojure-dev. > 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.