[ANN] Clojure 1.9.0-alpha5

1,511 views
Skip to first unread message

Alex Miller

unread,
Jun 7, 2016, 1:38:34 PM6/7/16
to Clojure
Clojure 1.9.0-alpha5 is now available.

Try it via

- Leiningen: [org.clojure/clojure "1.9.0-alpha5"]

1.9.0-alpha4 includes the following changes since 1.9.0-alpha4:

Fixes:
- doc was printing "Spec" when none existed
- fix ? explain

New predicates in core (all also now have built-in generator support in spec):
- seqable?
- boolean?
- long?, pos-long?, neg-long?, nat-long?
- double?, bigdec?
- ident?, simple-ident?, qualified-ident?
- simple-symbol?, qualified-symbol?
- simple-keyword?, qualified-keyword?
- bytes? (for byte[])
- indexed?
- inst? (and new inst-ms)
- uuid?
- uri?

New in spec:
- unform - given a spec and a conformed value, returns the unconformed value
- New preds: long-in-range?, inst-in-range?
- New specs (with gen support): long-in, inst-in, double-in

Sean Corfield

unread,
Jun 7, 2016, 2:21:34 PM6/7/16
to Clojure Mailing List

An excellent set of new predicates – thank you!

 

Will clojure.core.incubator get a new release to reflect that seqable? is available in core?

 

WARNING: seqable? already refers to: #'clojure.core/seqable? in namespace: clojure.core.incubator, being replaced by: #'clojure.core.incubator/seqable?

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Alex Miller

unread,
Jun 7, 2016, 3:01:41 PM6/7/16
to Clojure
I'm not opposed to it but can't say that's anywhere on my priority list. Does anyone use incubator?


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+unsubscribe@googlegroups.com.

David Chelimsky

unread,
Jun 7, 2016, 3:04:56 PM6/7/16
to Clojure


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+u...@googlegroups.com.

Andy Fingerhut

unread,
Jun 7, 2016, 5:50:56 PM6/7/16
to clo...@googlegroups.com
crossclj.info lists 63 projects with core.incubator as a dependency.  Not sure how widely used those projects are themselves:

    https://crossclj.info/ns/org.clojure/core.incubator/0.1.3/project.clj.html

Andy


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+u...@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 clo...@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

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+u...@googlegroups.com.

Sean Corfield

unread,
Jun 7, 2016, 6:39:55 PM6/7/16
to Clojure Mailing List

I ran across it because CongoMongo uses it and we use that. It’s not a big deal.

 

Taoensso.encore is more problematic since that is essentially broken by the addition of bytes? to clojure.core. Right now that’s blocking us from upgrading but I haven’t established a workaround yet (technically it breaks taoensso.nippy’s use of encore).

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 

Sean Corfield

unread,
Jun 7, 2016, 9:22:20 PM6/7/16
to Clojure Mailing List

The taoensso.encore issue has defeated my attempts so far to create a repro case. Kevin Downey also confirmed that the straightforward cases of using Encore with 1.9.0 Alpha 5 all seem to work. I worked around the issue so we can continue testing Alpha 5 at World Singles (lifting a defn out of a do). I’ll keep digging into that and report back with my findings – clearly it’s not an issue with Alpha 5 per se and doesn’t appear to be an issue with Encore directly, so it’s some weird interaction in our dependencies or toolchain somewhere…

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 

Sean Corfield

unread,
Jun 7, 2016, 9:52:36 PM6/7/16
to Clojure Mailing List

Whilst updating our code, I noticed there’s bigdec? to test for java.math.BigDecimal but not bigint? or biginteger?

 

Is there a specific reason for that omission or were those just missed?

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 

On 6/7/16, 10:38 AM, "Alex Miller" <clo...@googlegroups.com on behalf of al...@puredanger.com> wrote:

 

--

Alex Miller

unread,
Jun 7, 2016, 10:55:54 PM6/7/16
to Clojure
Not sure, I can ask. I think BigDecimal is probably used way more than BigInteger.

Alex Miller

unread,
Jun 7, 2016, 11:16:56 PM6/7/16
to Clojure
I don't know that anyone cares much, but I have done a new release of core.incubator (0.1.4) and deprecated seqable?.

se...@corfield.org

unread,
Jun 8, 2016, 12:39:04 AM6/8/16
to Clojure

Thanks Alex. Based on what crossclj.info shows, I suspect you may be right that almost no one cares 😊

 

https://crossclj.info/fun/clojure.core.incubator/seqable?.html

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org

 

--

se...@corfield.org

unread,
Jun 8, 2016, 12:42:03 AM6/8/16
to Clojure

As a completely non-scientific data point, we had precisely one place in our 30k+ lines of code where we can use bigdec? And there is also precisely one place we could use biginteger? 😊

 

Sean Corfield -- (904) 302-SEAN

An Architect's View -- http://corfield.org

 

From: Alex Miller
Sent: Tuesday, June 7, 2016 7:56 PM
To: Clojure
Subject: Re: [ANN] Clojure 1.9.0-alpha5

 

Not sure, I can ask. I think BigDecimal is probably used way more than BigInteger.

--

Mark Engelberg

unread,
Jun 8, 2016, 1:13:14 AM6/8/16
to clojure
Also non-scientific: I personally use BigInteger a fair amount, but have never needed to use BigDecimal.

Shantanu Kumar

unread,
Jun 8, 2016, 2:17:54 AM6/8/16
to Clojure


On Wednesday, 8 June 2016 00:31:41 UTC+5:30, Alex Miller wrote:
I'm not opposed to it but can't say that's anywhere on my priority list. Does anyone use incubator?

Just to add a data point, I use incubator at work for `dissoc-in`.

Shantanu
 


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+u...@googlegroups.com.

Mamun

unread,
Jun 8, 2016, 4:23:51 AM6/8/16
to Clojure
Excellent set of new predicates. What about date predicate? 

It would be nice if there are also date predicate as an example in bellow

date?  
date-past?
date-future?



Br,
Mamun

Remo Koch

unread,
Jun 8, 2016, 7:51:47 AM6/8/16
to Clojure
Same here, would be nice to have `biginteger?` in core as well.

Alex Miller

unread,
Jun 8, 2016, 9:30:33 AM6/8/16
to Clojure
Rich has ok'ed this and I've added a jira for this at http://dev.clojure.org/jira/browse/CLJ-1951. The predicate is trivial of course - but we would want to add generator support and that's trickier as test.check doesn't have anything for this. I'm putting it on the back burner for now, but if anyone wants to think about that - comment on the ticket.

David Powell

unread,
Jun 8, 2016, 12:34:13 PM6/8/16
to clojure

Do uri? and bytes? really have generator support implemented?  I couldn't seem to get that to work.

Devin Walters (devn)

unread,
Jun 8, 2016, 4:13:12 PM6/8/16
to Clojure
Any chance of `named?` making the cut in 1.9? I see it's used in the implementation of clojure.spec.

Sean Corfield

unread,
Jun 8, 2016, 5:40:06 PM6/8/16
to Clojure Mailing List

Given the only two things in Clojure that implement Named are keyword and symbol – and we have ident? – what additional value would named? have?

 

(but, yes, that was my first thought when I saw the list of new predicates)

 

Sean Corfield -- (904) 302-SEAN

An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

--

Josh Tilles

unread,
Jun 8, 2016, 5:59:28 PM6/8/16
to Clojure
Well, it’s worth noting that clojure.core/name does account for strings:

(defn name
  "Returns the name String of a string, symbol or keyword."
  {:tag String
   :added "1.0"
   :static true}
  [x]
  (if (string? x) x (. ^clojure.lang.Named x (getName))))

So one could argue that named? should recognize strings in addition to keywords and symbols. No comment on whether such a predicate is a good idea though.

Sean Corfield

unread,
Jun 8, 2016, 6:08:40 PM6/8/16
to Clojure Mailing List

But named? to mean instance? clojure.lang.Named tells you that something implements the Named interface which has getName() *and* getNamespace() methods – and the namespace function does *not* accept a String.

 

The fact that the name function accepts something that is not Named is a bit of an anomaly.

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 

Rangel Spasov

unread,
Jun 8, 2016, 6:13:20 PM6/8/16
to Clojure
Hey guys - getting this compiler exception when I tried alpha 5 (up to alpha 4 it was all good).

WARNING: boolean? already refers to: #'clojure.core/boolean? in namespace: clojure.tools.analyzer.utils, being replaced by: #'clojure.tools.analyzer.utils/boolean?

WARNING: boolean? already refers to: #'clojure.core/boolean? in namespace: clojure.tools.analyzer, being replaced by: #'clojure.tools.analyzer.utils/boolean?

#error {

 :cause Attempting to call unbound fn: #'clojure.tools.analyzer.utils/boolean?

 :via

 [{:type clojure.lang.Compiler$CompilerException

   :message java.lang.IllegalStateException: Attempting to call unbound fn: #'clojure.tools.analyzer.utils/boolean?, compiling:(manifold/stream/async.clj:62:16)

   :at [clojure.lang.Compiler analyzeSeq Compiler.java 6890]}

  {:type java.lang.IllegalStateException

   :message Attempting to call unbound fn: #'clojure.tools.analyzer.utils/boolean?

   :at [clojure.lang.Var$Unbound throwArity Var.java 43]}]

 :trace

 [[clojure.lang.Var$Unbound throwArity Var.java 43]

  [clojure.lang.AFn invoke AFn.java 32]

  [clojure.tools.analyzer.utils$classify invoke utils.clj 106]

  [clojure.tools.analyzer$analyze_const doInvoke analyzer.clj 167]

  [clojure.lang.RestFn invoke RestFn.java 425]

  [clojure.tools.analyzer$fn__563 invoke analyzer.clj 86]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_in_env$fn__567 invoke analyzer.clj 127]

  [clojure.core$mapv$fn__8938 invoke core.clj 6758]

  [clojure.core.protocols$fn__8715 invokeStatic protocols.clj 167]

  [clojure.core.protocols$fn__8715 invoke protocols.clj 124]

  [clojure.core.protocols$fn__8670$G__8665__8679 invoke protocols.clj 19]

  [clojure.core.protocols$seq_reduce invokeStatic protocols.clj 31]

  [clojure.core.protocols$fn__8696 invokeStatic protocols.clj 75]

  [clojure.core.protocols$fn__8696 invoke protocols.clj 75]

  [clojure.core.protocols$fn__8644$G__8639__8657 invoke protocols.clj 13]

  [clojure.core$reduce invokeStatic core.clj 6676]

  [clojure.core$mapv invokeStatic core.clj 6749]

  [clojure.core$mapv invoke core.clj 6749]

  [clojure.tools.analyzer$parse_invoke invoke analyzer.clj 781]

  [clojure.tools.analyzer$_parse invoke analyzer.clj 809]

  [clojure.tools.analyzer.jvm$parse invoke jvm.clj 383]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 271]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_let invoke analyzer.clj 503]

  [clojure.tools.analyzer$parse_let_STAR_ invoke analyzer.clj 528]

  [clojure.tools.analyzer$_parse invoke analyzer.clj 809]

  [clojure.tools.analyzer.jvm$parse invoke jvm.clj 383]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 271]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 272]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 272]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_let invoke analyzer.clj 503]

  [clojure.tools.analyzer$parse_let_STAR_ invoke analyzer.clj 528]

  [clojure.tools.analyzer$_parse invoke analyzer.clj 809]

  [clojure.tools.analyzer.jvm$parse invoke jvm.clj 383]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 271]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 272]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$parse_do invoke analyzer.clj 284]

  [clojure.tools.analyzer$_parse invoke analyzer.clj 809]

  [clojure.tools.analyzer.jvm$parse invoke jvm.clj 383]

  [clojure.tools.analyzer$analyze_seq invoke analyzer.clj 271]

  [clojure.tools.analyzer$fn__556 invoke analyzer.clj 63]

  [clojure.lang.MultiFn invoke MultiFn.java 233]

  [clojure.tools.analyzer$analyze invoke analyzer.clj 115]

  [clojure.tools.analyzer.jvm$analyze$fn__3425 invoke jvm.clj 469]

  [clojure.lang.AFn applyToHelper AFn.java 152]

  [clojure.lang.AFn applyTo AFn.java 144]

  [clojure.core$apply invokeStatic core.clj 651]

  [clojure.core$with_bindings_STAR_ invokeStatic core.clj 1953]

  [clojure.core$with_bindings_STAR_ doInvoke core.clj 1953]

  [clojure.lang.RestFn invoke RestFn.java 425]

  [clojure.tools.analyzer.jvm$analyze invoke jvm.clj 456]

  [clojure.core.async.impl.ioc_macros$state_machine invoke ioc_macros.clj 1109]

  [clojure.core.async$go doInvoke async.clj 413]

  [clojure.lang.RestFn invoke RestFn.java 442]

  [clojure.lang.Var invoke Var.java 388]

  [clojure.lang.AFn applyToHelper AFn.java 160]

  [clojure.lang.Var applyTo Var.java 700]

  [clojure.lang.Compiler macroexpand1 Compiler.java 6792]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6869]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyze Compiler.java 6625]

  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6001]

  [clojure.lang.Compiler$FnMethod parse Compiler.java 5380]

  [clojure.lang.Compiler$FnExpr parse Compiler.java 3972]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6881]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6871]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler access$300 Compiler.java 38]

  [clojure.lang.Compiler$LetExpr$Parser parse Compiler.java 6269]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6883]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6871]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyze Compiler.java 6625]

  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6001]

  [clojure.lang.Compiler$NewInstanceMethod parse Compiler.java 8277]

  [clojure.lang.Compiler$NewInstanceExpr build Compiler.java 7813]

  [clojure.lang.Compiler$NewInstanceExpr$DeftypeParser parse Compiler.java 7693]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6883]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyze Compiler.java 6625]

  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6001]

  [clojure.lang.Compiler$LetExpr$Parser parse Compiler.java 6319]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6883]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler analyze Compiler.java 6625]

  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6001]

  [clojure.lang.Compiler$FnMethod parse Compiler.java 5380]

  [clojure.lang.Compiler$FnExpr parse Compiler.java 3972]

  [clojure.lang.Compiler analyzeSeq Compiler.java 6881]

  [clojure.lang.Compiler analyze Compiler.java 6669]

  [clojure.lang.Compiler eval Compiler.java 6939]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [manifold.stream$eval6935 invokeStatic stream.clj 46]

  [manifold.stream$eval6935 invoke stream.clj 46]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6932]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 551]

  [aleph.http.core$eval6275$loading__7338__auto____6276 invoke core.clj 1]

  [aleph.http.core$eval6275 invokeStatic core.clj 1]

  [aleph.http.core$eval6275 invoke core.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 551]

  [aleph.http.server$eval6269$loading__7338__auto____6270 invoke server.clj 1]

  [aleph.http.server$eval6269 invokeStatic server.clj 1]

  [aleph.http.server$eval6269 invoke server.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5871]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 457]

  [aleph.http$eval4940$loading__7338__auto____4941 invoke http.clj 1]

  [aleph.http$eval4940 invokeStatic http.clj 1]

  [aleph.http$eval4940 invoke http.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 551]

  [hush.auth$eval4934$loading__7338__auto____4935 invoke auth.clj 1]

  [hush.auth$eval4934 invokeStatic auth.clj 1]

  [hush.auth$eval4934 invoke auth.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 619]

  [hush.stripe$eval417$loading__7338__auto____418 invoke stripe.clj 1]

  [hush.stripe$eval417 invokeStatic stripe.clj 1]

  [hush.stripe$eval417 invoke stripe.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 3204]

  [hush.aleph_netty$eval411$loading__7338__auto____412 invoke aleph_netty.clj 1]

  [hush.aleph_netty$eval411 invokeStatic aleph_netty.clj 1]

  [hush.aleph_netty$eval411 invoke aleph_netty.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 1789]

  [hush.app$eval20$loading__7338__auto____21 invoke app.clj 1]

  [hush.app$eval20 invokeStatic app.clj 1]

  [hush.app$eval20 invoke app.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 421]

  [hush.core$eval14$loading__7338__auto____15 invoke core.clj 1]

  [hush.core$eval14 invokeStatic core.clj 1]

  [hush.core$eval14 invoke core.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.RT loadResourceScript RT.java 372]

  [clojure.lang.RT loadResourceScript RT.java 363]

  [clojure.lang.RT load RT.java 453]

  [clojure.lang.RT load RT.java 419]

  [clojure.core$load$fn__7452 invoke core.clj 5986]

  [clojure.core$load invokeStatic core.clj 5985]

  [clojure.core$load doInvoke core.clj 5969]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [clojure.core$load_one invokeStatic core.clj 5790]

  [clojure.core$load_one invoke core.clj 5785]

  [clojure.core$load_lib$fn__7397 invoke core.clj 5830]

  [clojure.core$load_lib invokeStatic core.clj 5829]

  [clojure.core$load_lib doInvoke core.clj 5810]

  [clojure.lang.RestFn applyTo RestFn.java 142]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$load_libs invokeStatic core.clj 5867]

  [clojure.core$load_libs doInvoke core.clj 5851]

  [clojure.lang.RestFn applyTo RestFn.java 137]

  [clojure.core$apply invokeStatic core.clj 653]

  [clojure.core$require invokeStatic core.clj 5889]

  [clojure.core$require doInvoke core.clj 5889]

  [clojure.lang.RestFn invoke RestFn.java 408]

  [user$eval5 invokeStatic form-init5417966903061676030.clj 1]

  [user$eval5 invoke form-init5417966903061676030.clj 1]

  [clojure.lang.Compiler eval Compiler.java 6942]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler eval Compiler.java 6931]

  [clojure.lang.Compiler load Compiler.java 7394]

  [clojure.lang.Compiler loadFile Compiler.java 7332]

  [clojure.main$load_script invokeStatic main.clj 275]

  [clojure.main$init_opt invokeStatic main.clj 277]

  [clojure.main$init_opt invoke main.clj 277]

  [clojure.main$initialize invokeStatic main.clj 308]

  [clojure.main$null_opt invokeStatic main.clj 342]

  [clojure.main$null_opt invoke main.clj 339]

  [clojure.main$main invokeStatic main.clj 421]

  [clojure.main$main doInvoke main.clj 384]

  [clojure.lang.RestFn invoke RestFn.java 421]

  [clojure.lang.Var invoke Var.java 383]

  [clojure.lang.AFn applyToHelper AFn.java 156]

  [clojure.lang.Var applyTo Var.java 700]

  [clojure.main main main.java 37]]}

Sean Corfield

unread,
Jun 8, 2016, 7:15:05 PM6/8/16
to Clojure Mailing List

I ran into this same problem with Encore but found it very, very hard to repro in a simple project.

 

The underlying issue is that clojure.tools.analyzer.utils defines boolean? but doesn’t exclude core’s version (since it’s new in Alpha 5 and libraries haven’t caught up). That normally wouldn’t be a problem: you’d get a warning, the function would be defined anyway, and life moves on.

 

What seems to be happening – in circumstances that I don’t yet understand – is that through some compilation path down the line from that point, you end up with a version of that namespace in memory that _does not have the definition_ of the function.

 

For me it was bytes? which was defined in Encore and the call failed in Nippy. That was a cljx project that had the defn of bytes? inside a (do …) with several other definitions. Lifting the defn up out of the do solved the problem. So did adding a refer-clojure/exclude declaration. However, I couldn’t reproduce the defn-in-do behavior in the REPL or in a simple project. The problem you’re seeing is different insofar as the defn is already at the top level but similar otherwise (and follows a dynamic compilation path where manifold.stream requires another namespace at load time, depending on whether core.async is available).

 

As I said on Slack, this feels like a compiler bug to me: having a conflict with a clojure.core function should not lead to that function definition (silently) being ignored in some namespace.

 

Sean Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

 

--

Rangel Spasov

unread,
Jun 8, 2016, 7:39:50 PM6/8/16
to Clojure
Sean - thanks for the detailed explanation. I will try to investigate if nobody has any other ideas. 

Alex Miller

unread,
Jun 9, 2016, 9:32:51 AM6/9/16
to Clojure
I think it's quite likely that you have multiple copies of tools.analyzer (and possibly other libs) on your classpath. Can you take a look at your deps and see if that might be the case?

A particular thing to watch for is if any dep is AOT compiled and transitively pulled in a dependency lib somehow.

"lein deps :tree" is a good place to start, but it doesn't tell you what's actually inside the jars. There used to be a Maven plugin that would track down multiple class definitions across the dependency classpath, can't remember what it was called. It would be cool if such a thing also existed for Lein that would find multiple .clj/.cljc/.class files for a ns on the classpath. Or maybe someone has already written that, don't know.

Alex Miller

unread,
Jun 9, 2016, 9:34:23 AM6/9/16
to Clojure
The use of named? inside spec will be replaced with ident?.

Alex Miller

unread,
Jun 9, 2016, 9:36:29 AM6/9/16
to Clojure
Whoops. That is an oversight.

Alex Miller

unread,
Jun 9, 2016, 9:38:40 AM6/9/16
to Clojure
On Wednesday, June 8, 2016 at 3:23:51 AM UTC-5, Mamun wrote:
Excellent set of new predicates. What about date predicate? 

It would be nice if there are also date predicate as an example in bellow

date?  

Use clojure.core/inst?
 
date-past?
date-future?

You can use the new clojure.spec/inst-in-range? predicate to check inst ranges. We could consider something that would do open ranges too if you wanted to file a jira for that. 

Nicola Mometto

unread,
Jun 9, 2016, 9:40:12 AM6/9/16
to clo...@googlegroups.com
I commented about this in the #clojure-dev slack channel, I believe http://dev.clojure.org/jira/browse/CLJ-1874 to be the cause of this issue
signature.asc

Fluid Dynamics

unread,
Jun 9, 2016, 10:06:30 AM6/9/16
to Clojure
On Thursday, June 9, 2016 at 9:32:51 AM UTC-4, Alex Miller wrote:
I think it's quite likely that you have multiple copies of tools.analyzer (and possibly other libs) on your classpath. Can you take a look at your deps and see if that might be the case?

A particular thing to watch for is if any dep is AOT compiled and transitively pulled in a dependency lib somehow.

"lein deps :tree" is a good place to start, but it doesn't tell you what's actually inside the jars. There used to be a Maven plugin that would track down multiple class definitions across the dependency classpath, can't remember what it was called. It would be cool if such a thing also existed for Lein that would find multiple .clj/.cljc/.class files for a ns on the classpath. Or maybe someone has already written that, don't know.

A tool like unix commandline "which" could also help in such circumstances, to find out exactly which jar or clj file for what namespace a function or other Var is coming from. Something like

=> (which boolean?)
clojure.tools.analyzer.utils/boolean? in /some/path/clojure.jar

Herwig Hochleitner

unread,
Jun 9, 2016, 10:15:09 AM6/9/16
to clo...@googlegroups.com
2016-06-09 15:32 GMT+02:00 Alex Miller <al...@puredanger.com>:

"lein deps :tree" is a good place to start, but it doesn't tell you what's actually inside the jars. There used to be a Maven plugin that would track down multiple class definitions across the dependency classpath, can't remember what it was called. It would be cool if such a thing also existed for Lein that would find multiple .clj/.cljc/.class files for a ns on the classpath. Or maybe someone has already written that, don't know.

Indeed, I have written `lein-collisions` for this purpose: https://github.com/webnf/lein-collisions

I don't think it would detect collisions between `.clj`, `.cljc` and `.class` files right now. I'll put that on the todo list.

cheers

Sean Corfield

unread,
Jun 9, 2016, 1:22:41 PM6/9/16
to Clojure Mailing List
On 6/9/16, 6:39 AM, "Nicola Mometto" <clo...@googlegroups.com on behalf of brob...@gmail.com> wrote:
> I commented about this in the #clojure-dev slack channel, I believe
> http://dev.clojure.org/jira/browse/CLJ-1874 to be the cause of this issue

Interesting. I didn’t have any AOT-compiled code in my situation as far as I know, but I do know I have multiple versions of some dependencies – I just assumed that because they seem to resolve to the version I want loaded that I had no problems (via boot show –p – which shows the “winning” version of each conflicted dependency).

Given Alex’s comment…

> On 9 Jun 2016, at 14:32, Alex Miller <al...@puredanger.com> wrote:
> I think it's quite likely that you have multiple copies of tools.analyzer (and possibly other libs) on your classpath. Can you take a look at your deps and see if that might be the case?

…I’m going to add more exclusions to just get rid of all my conflicts at this point, since I can’t be _certain_ that a transitive dependency doesn’t bring in AOT code.

Rangel Spasov

unread,
Jun 10, 2016, 2:40:03 AM6/10/16
to Clojure
Add the latest tools.analyzer as a dependency solved the problem. 

[org.clojure/tools.analyzer "0.6.9"]

Thanks guys!

Alan Thompson

unread,
Jun 12, 2016, 8:12:02 PM6/12/16
to Clojure


On Thursday, June 9, 2016 at 11:40:03 PM UTC-7, Rangel Spasov wrote:
Add the latest tools.analyzer as a dependency solved the problem. 

[org.clojure/tools.analyzer "0.6.9"]

I had the same problem and had to add this dependency.  Is this expected?  Using lein-collisions found no conflicts.
Alan 

Alan Thompson

unread,
Jun 12, 2016, 8:21:22 PM6/12/16
to clo...@googlegroups.com
I am also getting a conflict with Plumatic Schema:

WARNING: Inst already refers to: #'clojure.core/Inst in namespace: schema.core, being replaced by: #'schema.core/Inst

I can't seem to find a reason for this warning, as I don't use Inst anywhere and always say

(require [schema.core :as s] ...)
​​


--

James Reeves

unread,
Jun 12, 2016, 9:30:12 PM6/12/16
to clo...@googlegroups.com
On 13 June 2016 at 01:21, Alan Thompson <cloo...@gmail.com> wrote:
I am also getting a conflict with Plumatic Schema:

WARNING: Inst already refers to: #'clojure.core/Inst in namespace: schema.core, being replaced by: #'schema.core/Inst

I can't seem to find a reason for this warning, as I don't use Inst anywhere and always say

(require [schema.core :as s] ...)

It's nothing to do with your own code. It means that this:


Conflicts with:


Within the schema.core namespace.

- James

Alan Thompson

unread,
Jun 12, 2016, 10:29:56 PM6/12/16
to clo...@googlegroups.com
I would have expected the namespaces to avoid this kind of conflict. Why don't they?
Alan

--

Josh Tilles

unread,
Jun 12, 2016, 10:46:09 PM6/12/16
to Clojure
On Sunday, June 12, 2016 at 10:29:56 PM UTC-4, Alan Thompson wrote:
I would have expected the namespaces to avoid this kind of conflict. Why don't they?

Because the conflict was only introduced five days ago, with this commit. Up until that point, the maintainers of Schema had no reason to include Inst in schema.core’s exclusions.
I’d guess that they’d welcome a pull request that silences the warning. ;)

James Reeves

unread,
Jun 12, 2016, 11:36:05 PM6/12/16
to clo...@googlegroups.com
On 13 June 2016 at 03:29, Alan Thompson <cloo...@gmail.com> wrote:
I would have expected the namespaces to avoid this kind of conflict. Why don't they?

All the vars in the clojure.core namespace are automatically imported into a namespace when it's created. It's why you can write (+ 1 1) instead of (clojure.core/+ 1 1).

In Clojure 1.9, a bunch of new vars have been added to clojure.core, and these vars will be automatically imported into namespaces. If they happen to conflict with vars defined in the namespace, you get a warning.

The solution is to use the :refer-clojure option in the ns macro to exclude vars from clojure.core you know conflict with the vars in your namespace. But since the Clojure 1.9 alphas are cutting edge, not every project has updated their Clojure exclusions yet.

- James

Jason Wolfe

unread,
Jun 14, 2016, 12:30:49 AM6/14/16
to Clojure
The warning should be fixed in schema 1.1.2.

-Jason

Howard M. Lewis Ship

unread,
Jul 15, 2016, 6:49:58 PM7/15/16
to Clojure
I hit this too and after an embarrasingly long time, found out the `lein clean` took care of it; I had some previously AOTed code lying around in target.
Reply all
Reply to author
Forward
0 new messages