I added a comment <http://dev.clojure.org/jira/browse/CLJ-979?focusedCommentId=37843&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-37843> in CLJ-979, I believe I have a case which is broken by the change in delegation order, if I'm correct in my understanding of what the CLJ-979 change is actually doing.
On 30 January 2015 at 07:36, Jozef Wagner <jozef.wag...@gmail.com> wrote: > Thank you very much Nicola! > > On Thu, Jan 29, 2015 at 7:24 PM, Nicola Mometto <brobro...@gmail.com> > wrote: > >> >> Jozef, I looked into this and opened a ticket with a proposed patch to >> fix this issue: http://dev.clojure.org/jira/browse/CLJ-1650 >> >> Jozef Wagner writes: >> >> > With CLJ-979 applied, lein may crash when doing :aot :all. This is >> caused >> > when lein forces recompilation of already compiled classes. Not sure >> > whether this should be considered a lein of clojure bug though. >> > >> > See https://github.com/wagjo/aotbug for contrived example. >> > >> > Jozef >> > >> > On Saturday, January 10, 2015 at 4:37:04 PM UTC+1, Alex Miller wrote: >> >> >> >> Clojure 1.7.0-alpha5 is now available. >> >> >> >> Try it via >> >> - Download: >> >> https://repo1.maven.org/maven2/org/clojure/clojure/1.7.0-alpha5/ >> >> - Leiningen: [org.clojure/clojure "1.7.0-alpha5"] >> >> >> >> A few of the highlights in alpha5: >> >> >> >> 1) New transducer arities for map-indexed, distinct, and interpose. >> >> The transducer versions are generally faster than the sequence >> versions. >> >> See CLJ-1601 for more details. >> >> >> >> 2) The set and vec functions should now be faster in many cases. Some >> of >> >> the >> >> vec improvements will not kick in until CLJ-1499 is committed in the >> >> future. >> >> See CLJ-1546 and CLJ-1618 for more details. >> >> >> >> 3) Two particularly troublesome AOT classloading bugs have been >> addressed >> >> - >> >> CLJ-979 and CLJ-1544. Many other tickets were found to be duplicates of >> >> one of >> >> these as well. Big thanks to Nicola Mometto for doing the hard work on >> >> debugging and providing fixes for these. >> >> >> >> For all changes new in alpha5, see the issues marked "(alpha5)" in the >> >> full changes below. >> >> >> >> ------------------------------------------------------------ >> >> Clojure 1.7.0-alpha5 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://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 >> >> * cycle >> >> * take-nth >> >> * replace >> >> * partition-by >> >> * partition-all >> >> * keep >> >> * keep-indexed >> >> * map-indexed (alpha5) >> >> * distinct (alpha5) >> >> * interpose (alpha5) >> >> >> >> 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) >> >> * eduction - returns a reducible/seqable/iterable seq of applications >> of >> >> the transducer to items in coll. Applications are re-performed with >> every >> >> reduce/seq/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) (alpha5) >> >> * [CLJ-1606](http://dev.clojure.org/jira/browse/CLJ-1606) (alpha5) >> >> * [CLJ-1621](http://dev.clojure.org/jira/browse/CLJ-1621) (alpha5) >> >> * [CLJ-1600](http://dev.clojure.org/jira/browse/CLJ-1600) (alpha5) >> >> >> >> ### 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 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) >> >> >> >> ### 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 >> >> * [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) (alpha5) >> >> vec is now faster on almost all inputs >> >> * [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618) (alpha5) >> >> 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) (alpha5) >> >> vec now works with things that only implement Iterable or IReduceInit >> >> * [CLJ-1618](http://dev.clojure.org/jira/browse/CLJ-1618) (alpha5) >> >> set now works with things that only implement Iterable or IReduceInit >> >> * [CLJ-1633](http://dev.clojure.org/jira/browse/CLJ-1633) (alpha5) >> >> PersistentList/creator doesn't handle ArraySeqs correctly >> >> >> >> ## 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) (alpha5) >> >> into (and other fns that rely on reduce) require only IReduceInit >> >> * [CLJ-1619](http://dev.clojure.org/jira/browse/CLJ-1619) (alpha5) >> >> PersistentVector now directly implements reduce without init >> >> * [CLJ-1580](http://dev.clojure.org/jira/browse/CLJ-1580) (alpha5) >> >> Transient collections should guarantee thread visibility >> >> * [CLJ-1590](http://dev.clojure.org/jira/browse/CLJ-1590) (alpha5) >> >> Some IReduce/IReduceInit implementors don't respect reduced >> >> * [CLJ-979](http://dev.clojure.org/jira/browse/CLJ-979) (alpha5) >> >> Clojure resolves to wrong deftype classes when AOT compiling or >> reloading >> >> * [CLJ-1544](http://dev.clojure.org/jira/browse/CLJ-1544) (alpha5) >> >> AOT bug involving namespaces loaded before AOT compilation started >> >> >> >> -- >> >> -- >> 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. > -- 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.