This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-06-09
Channels
- # aleph (4)
- # arachne (3)
- # beginners (41)
- # boot (300)
- # cider (17)
- # cljs-dev (37)
- # cljsjs (4)
- # cljsrn (5)
- # clojure (249)
- # clojure-boston (3)
- # clojure-czech (4)
- # clojure-dev (14)
- # clojure-greece (183)
- # clojure-nl (2)
- # clojure-russia (11)
- # clojure-spec (135)
- # clojure-uk (37)
- # clojurescript (56)
- # community-development (8)
- # cursive (22)
- # data-science (4)
- # datomic (150)
- # devcards (6)
- # emacs (5)
- # euroclojure (8)
- # funcool (18)
- # hoplon (29)
- # immutant (1)
- # jobs (1)
- # lambdaisland (3)
- # lein-figwheel (7)
- # leiningen (18)
- # mount (1)
- # om (81)
- # onyx (95)
- # planck (50)
- # proton (6)
- # re-frame (62)
- # reagent (2)
- # ring (1)
- # robots (1)
- # spacemacs (2)
- # specter (88)
- # test-check (32)
- # untangled (23)
- # yada (1)
@hiredman: I just reproduced in prod that Var$Unbound
issue you reported the other day -- trying to extract a minimum repro example
11:28:38 WARNING: Inst already refers to: #'clojure.core/Inst in namespace: schema.core, being replaced by: #'schema.core/Inst
11:28:41 Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :spec of protocol: #'schema.core/Schema found for class: clojure.lang.Var$Unbound, compiling:(social/common/url.cljc:43:1)
weird thing is that it seems to be non deterministic -- one build failed like this, next build built fine
yep. so the steps to repro are: - AOT compile with alpha4 a project that shadows one of the new c.c vars of alpha5 - bump dependency to alpha5 - try to run project
http://dev.clojure.org/jira/browse/CLJ-1874 will fix this case /cc @alexmiller
I think it's the same issue that was reported in https://groups.google.com/d/msg/clojure/D_s9Drua6D4/9S8CUigXEAAJ
Doesn't that affect a whole lot of bytecode?
I can't imagine that's going to fly
yeah, that's 7 extra bytecodes for every def
, which is definitely not ideal, but AFAICT is the only way to maintain ABI compatibility when new version of libs add vars that consumers are shadowing
one of the lesser known things about indy is that it's is an excellent tool to win at the binary compatibility game. you wire up a callsite using an indy instruction, which calls the bootstrap method once. bootstrap method can return different MethodHandles in different versions of clojure -- but the bytecode never changes at the callsite