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.

Reply via email to