Skip to end of metadata
Go to start of metadata

The purpose of this page is to collect well-known AOT problems, and prioritize them for improvement. What are the most important problems preventing AOT from being viable for you on your project?

Known problems captured in tickets (search for open issues labeled AOT):

  • CLJ-1330 - Class name clash between top-level functions and defn'ed ones  (fixed in 1.7.0-alpha4)
  • CLJ-1315 - Don't initialize classes when importing them (fixed in 1.7.0-alpha4)
  • CLJ-1241 - NPE when AOTing overrided clojure.core functions (fixed in 1.7.0-alpha2)
  • CLJ-979 - map->R returns different class when invoked from AOT code (fixed in 1.7.0)
  • CLJ-1604 - AOT bug prevents overriding of clojure.core functions (fixed in 1.7.0)
  • CLJ-130 - Namespace metadata lost in AOT compile (fixed in 1.8)
  • CLJ-322- Enhance AOT compilation process to emit classfiles only for explicitly-specified namespaces
  • CLJ-1544 - AOT bug involving namespaces loaded before AOT compilation started

Please tag open issues in JIRA that are not listed here as "AOT". If something is missing, please log an issue. If you want to add an experience report that goes beyond issues, please comment here.

    1. Dec 01, 2014

      CLJ-1227 was failing due to CLJ-1330, which is fixed in 1.7.0-alpha4.

  1. Jul 11, 2014

    I have pretty much written off aot compilation, I avoid it and tell others to avoid it, I think a lot of that may come from the transitive compilation issues, but it seems like there are lots of corner cases around aot compilation, so it just isn't robust enough for general use. it is very easy to get bitten by stale class files, although it is hard to know where to lay the blame for that (tooling or language)

    it seems like it must be possible to come up with some compilation strategy that neatly side steps playing whack-a-mole with aot issues

  2. Dec 04, 2014

    I don't know all of the details, but I think perhaps CLJ-1604 is fixing an issue new with 1.7.0 alphas, and may not even have existed 1.6.0 and earlier, so not a historical reason why people avoided AOT, I think.  Still good to fix.

    1. Dec 04, 2014

      It existed in previous versions of clojure aswell.

      CLJ-1604 is the complete fix for what was reported in CLJ-1241, the patch that got commited for that ticket only fixed the runtime NPE in the compiler but the AOT emitted code would have thrown.