Fork me on GitHub

I finally figured out why we needed to qualify

( It turns out it is not related to self-host (syntax quote is not broken in self-host). If you are using (JVM) ClojureScript 1.9.562 in a project that also specifies Clojure 1.8.0, then, in a macro namespace, without qualifying, it will expand using the macro namespace’s name, to cljs.spec.alpha/any? (unless you perhaps have Tonsky’s clojure-future-spec at play). This is because any? doesn’t exist in Clojure 1.8.0. In short, without us qualifying that symbol, it would require ClojureScript 1.9.562 users to also use some pre-release version of Clojure 1.9.0 that includes that predicate (which I assume is not a requirement that ClojureScript wants to levy).


(The above applies in the case that you are using the shipping clojurescript-1.9.562.jar as apposed to cljs.jar, which includes Clojure.)


@mfikes so why doesn't it work in self-hosted?


I thought we had the new predicates in cljs.core


@anmonteiro My guess is that the failure was related to Planck using JVM ClojureScript in an early part of its compilation. I haven't tracked down this to be absolutely sure. But, I did reproduce the issue described above using only JVM ClojureScript. (I changed it back to unqualified, built the ClojureScript JAR, and used it directly in a minimal JVM-based ClojureScript project specifying Clojure 1.8.0.)


So if you change Planck to use Clojure 1.9 it starts working?


I suspect that Planck is simply compiling the Planck namespaces to ClojureScript, which use fdef, using JVM ClojureScript, at that point.


I can change Planck to use Clojure 1.9 and confirm the theory.


Hah. My understanding of the issue was wrong then. Thanks


It is definitely a new kind of failure mode, I don't recall us ever encountering before. 🙂


@anmonteiro Confirmed. If you set Planck to use Clojure 1.8.0, you get

WARNING: Use of undeclared Var cljs.spec.alpha/any? at line 34 src/planck/core.cljs
but with 1.9.0-alpha17, Planck's ClojureScript compiles.


(And the error above occurs in the early part of Planck's compilation, when it is using JVM ClojureScript to compile its namespaces.)