<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Clojure Q&amp;A - Recent questions and answers in Clojure</title>
<link>https://ask.clojure.org/index.php/qa/clojure</link>
<description></description>
<item>
<title>Answered: Optimize `eduction`</title>
<link>https://ask.clojure.org/index.php/15027/optimize-eduction?show=15033#a15033</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2953&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2953&lt;/a&gt;&lt;/p&gt;
</description>
<category>Transducers</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15027/optimize-eduction?show=15033#a15033</guid>
<pubDate>Sun, 05 Apr 2026 21:50:04 +0000</pubDate>
</item>
<item>
<title>Answered: &quot;Nested&quot; vs &quot;lateral&quot; exception causes</title>
<link>https://ask.clojure.org/index.php/15031/nested-vs-lateral-exception-causes?show=15032#a15032</link>
<description>&lt;p&gt;I'm not sure this problem is common enough to warrant solving in core or extending the existing ex-info. If you are trying to throw a map bundling multiple exceptions, this really seems like a data problem more than an exception problem, and we have plenty of ways to bundle data into the ex map.&lt;/p&gt;
&lt;p&gt;In Java, the typical solution for (one) lateral exception is to use &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html&quot;&gt;ExecutionException&lt;/a&gt;, doesn't handle multiple though.&lt;/p&gt;
</description>
<category>Errors</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15031/nested-vs-lateral-exception-causes?show=15032#a15032</guid>
<pubDate>Sun, 05 Apr 2026 21:46:32 +0000</pubDate>
</item>
<item>
<title>Answered: Destructuring {:as opts} unexpected behaviour with seq</title>
<link>https://ask.clojure.org/index.php/15028/destructuring-as-opts-unexpected-behaviour-with-seq?show=15029#a15029</link>
<description>&lt;p&gt;A lot of this can be broadly considered &quot;garbage-in, garbage-out&quot;. &lt;code&gt;{:as opts}&lt;/code&gt; is map destructuring and so if you give it a non-map, you'll get undefined behavior.&lt;/p&gt;
&lt;p&gt;In particular, try these expressions on Clojure 1.10 and you'll see that many of them throw exceptions.&lt;/p&gt;
&lt;p&gt;Clojure 1.11 introduced a new meaning for some key/value destructuring -- see &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/news/2021/03/18/apis-serving-people-and-programs&quot;&gt;https://clojure.org/news/2021/03/18/apis-serving-people-and-programs&lt;/a&gt; -- which changed the undefined behavior, in order to support new use cases.&lt;/p&gt;
&lt;p&gt;Bottom line: pass a non-map to map destructuring and you are in undefined behavior territory. It just happened to change between 1.10 and 1.11 so that some cases that threw exceptions now just produce &quot;junk&quot; instead.&lt;/p&gt;
</description>
<category>Sequences</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15028/destructuring-as-opts-unexpected-behaviour-with-seq?show=15029#a15029</guid>
<pubDate>Sun, 05 Apr 2026 02:22:50 +0000</pubDate>
</item>
<item>
<title>Answered: requiring an empty .clj without an alias should fail as with an alias</title>
<link>https://ask.clojure.org/index.php/15022/requiring-an-empty-clj-without-alias-should-fail-with-alias?show=15023#a15023</link>
<description>&lt;p&gt;Logged:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2951&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2951&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And one for compile:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2952&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2952&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15022/requiring-an-empty-clj-without-alias-should-fail-with-alias?show=15023#a15023</guid>
<pubDate>Thu, 02 Apr 2026 20:41:10 +0000</pubDate>
</item>
<item>
<title>Answered: Is taggedliteral's equality check inefficient?</title>
<link>https://ask.clojure.org/index.php/15002/is-taggedliterals-equality-check-inefficient?show=15020#a15020</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2950&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2950&lt;/a&gt;&lt;/p&gt;
</description>
<category>Records and Types</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15002/is-taggedliterals-equality-check-inefficient?show=15020#a15020</guid>
<pubDate>Tue, 31 Mar 2026 19:58:35 +0000</pubDate>
</item>
<item>
<title>Answered: Optimized str function</title>
<link>https://ask.clojure.org/index.php/14990/optimized-str-function?show=15003#a15003</link>
<description>&lt;p&gt;I've done some &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/bsless/prrr&quot;&gt;independent exploration&lt;/a&gt; of the options space for optimizing &lt;code&gt;str&lt;/code&gt; which does not involve anything ground shattering but still gives good performance improvements&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;variadic arities (up to 20, yuck) will probably give the best performance. Can settle for common cases like up to 5  (apply str will still suck but whatever)&lt;/li&gt;
&lt;li&gt;using reduce instead of a loop (would probably require redefining str or providing a str1 with the old impl for bootstrap purposes)&lt;/li&gt;
&lt;li&gt;using inline meta, orthogonal to all other options&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, having a function like &lt;code&gt;str&lt;/code&gt; which only takes a sequence and reduces over it could provide a better code path than (apply str xs)&lt;/p&gt;
&lt;p&gt;Similar work has been done in &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/joinr/spork/blob/master/src/spork/util/general.clj#L835&quot;&gt;spork&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/kumarshantanu/stringer&quot;&gt;stringer&lt;/a&gt;&lt;/p&gt;
</description>
<category>Sequences</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14990/optimized-str-function?show=15003#a15003</guid>
<pubDate>Sun, 29 Mar 2026 08:47:19 +0000</pubDate>
</item>
<item>
<title>Why doesn't defn also implicitly name the anonymous function it defines for recursion?</title>
<link>https://ask.clojure.org/index.php/15000/doesnt-defn-implicitly-anonymous-function-defines-recursion</link>
<description>&lt;p&gt;Why doesn't &lt;code&gt;defn&lt;/code&gt; implicitly name the function to create a named recursion point?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(clojure.walk/macroexpand-all
  '(defn foo [x]
     (foo x)))
; =&amp;gt;
(def foo
  (fn*
    ([x]
     (foo x))))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This could instead expand to&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def foo
  (fn* foo ; note the foo here
    ([x]
     (foo x))))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How it works right now, &lt;code&gt;foo&lt;/code&gt; resolves to a global var &lt;code&gt;#'foo&lt;/code&gt;, which is created when the &lt;code&gt;(def ...)&lt;/code&gt; form is analyzed. In the second case, it resolves directly to the function object. Thus, it should save us a var dereference at runtime in this case.&lt;/p&gt;
&lt;p&gt;EDIT: Found out, this is exactly what &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/compilation#directlinking&quot;&gt;direct linking&lt;/a&gt; is used for.&lt;/p&gt;
</description>
<category>Macros</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15000/doesnt-defn-implicitly-anonymous-function-defines-recursion</guid>
<pubDate>Sat, 21 Mar 2026 13:49:43 +0000</pubDate>
</item>
<item>
<title>Controlled Bailout, Jira issue 2213</title>
<link>https://ask.clojure.org/index.php/14999/controlled-bailout-jira-issue-2213</link>
<description>&lt;p&gt;I would like to improve &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2213&quot;&gt;Issue 2213&lt;/a&gt; as follows. Do you think, this makes sense? Shall I become contributor for this? &lt;/p&gt;
&lt;p&gt;The new description would be:&lt;/p&gt;
&lt;p&gt;When developing Input-Process-Output tools I am often in the situation, that I have a sequence of activities (e.g. opening a file, spec checking a file, calling external tools, creating files), which each could fail in certain ways. Clojure does not have a good way to control such a sequence of activities in a way that all sorts of things, which could go wrong, can be handled comfortably. In imperative programming languages concepts like early exit or bailout are used. These are not not very functional. Unfortunately practical problems are often like this.&lt;/p&gt;
&lt;p&gt;The issue is a bit more general and a solution would be nice not only for those who develop such sort of tools. So I can give a simple example.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(let [config-file (get-file-from-network xy)
      config-file (parse-edn config-file)
      syntax-ok?   (spec-check config-file)]
  (do-something-with config-file))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As all these steps can fail, we could instead implement it like this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(if-let [config-file (get-file-from-network xy)]
  (if-let [config-file (parse-edn config-file)]
    (if (spec-check config-file)
      (do-something-with config-file))))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now the code has suffered already a lot. The sequential nature of the problem is lost. And it is not even doing what we need. We have to report to the user what went wrong.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(if-let [config-file (get-file-from-network xy)]
  (if-let [config-file (parse-edn config-file)]
    (if (spec-check config-file)
      (do-something-with config-file)
      :file-has-syntax-errors)
    :file-not-valid-edn)
  :file-cannot be openned)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But this is still not doing what we need. We have to provide more information about each failure. If a file cannot be openned, is it because the file does not exist or we do not have read permissions? And what did the spec check tell us? So we cannot just use &lt;code&gt;nil&lt;/code&gt; as a universal failure. We must deliver more information when failing. And we cannot use if-let, either. So we are not even done.&lt;/p&gt;
&lt;p&gt;This problem report asks for a better solution for this conceptual challenge.&lt;/p&gt;
&lt;p&gt;This example depicts a conflict that should not happen when using an appropriate programming language: First we are able to quickly make a prototype. But in the end the final code has not much in common with the first code any more. The final design is not driven by the problem domain, but by the technical need for an error handling. The need for a bailout mechanism in this example imposes too many huge code changes.&lt;/p&gt;
&lt;p&gt;The principal problem with all these solutions is that they coerce a sequence of actions into something which is not a sequence. If your problem is a sequence, then the implementation should also be a sequence.&lt;/p&gt;
&lt;h2&gt;Idea: Exceptions&lt;/h2&gt;
&lt;p&gt;As an alternative implementation I went with Exceptions. But it feels wrong, because I am talking about things, that are expected to fail. I cannot just use the Exceptions that are comming out of Java for example when opening a file for read. I need detailed information, what went wrong. If you are a command line tool, it is expected from you, that you provide good error messages. I ended up catching and rethrowing exceptions everywhere in the program.&lt;/p&gt;
&lt;h2&gt;Idea: Like for/doseq&lt;/h2&gt;
&lt;p&gt;For me I created a small macro, that extends &lt;code&gt;let&lt;/code&gt;. Then I use this syntax:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(let [[config-file error] (get-file-from-network xy)
      :escape     error
      config-file (parse-edn config-file)
      syntax-ok?   (spec-check config-file)]
  (do-something-with config-file))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This often allows a surprisingly intuitive code. For example here:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(let [[config-file error-code] (get-file-from-network xy)
      :escape     (if (= error-code :does-not-exist) 
                    :file-xy-does-not-exist)
      :escape     (if (= error-code :io-error)
                    :file-xy-cannot-be-read)
      [config-file error-code] (parse-edn config-file)
      :escape     (if error-code :file-xy-not-legal-edn)
      syntax-ok?   (spec-check config-file)]
  (do-something-with config-file))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is inspired by the &lt;code&gt;for&lt;/code&gt;/&lt;code&gt;doseq&lt;/code&gt;. But I don't claim that this is a good solution for Clojure (although I think so). But I think, the &lt;code&gt;let&lt;/code&gt; macro is a good candidate when improving how Clojure can be used for such imperative things.&lt;/p&gt;
&lt;h2&gt;Idea: Using &lt;code&gt;if-let&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;I also investigated the solution, that was originally proposed by this issue.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(if-let [config-file (get-file-from-network xy)
         config-file (parse-edn config-file)
         config-file-ok? (spec-check config-file)]
  (do-something-with config-file)
  :error)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This problem with this solution is that none of the bindings are available in the else part. That makes it very hard to react accordingly. This is a nice and small new language feature. But I don't think, that in practice it would be of help so often. The example from the original issue was very artificial with mathematical operations that cannot fail. The first draft of this issue with that artificial example does not actally describe a real problem. That is why this issue has completelly been rewritten.&lt;/p&gt;
&lt;p&gt;Or course we could still bind everything, which was not failed. But I don't think, we would want that. It would have very interesting consequences to the compiling model.&lt;/p&gt;
&lt;h2&gt;Idea: Threading macros&lt;/h2&gt;
&lt;p&gt;As this issue is a about a sequence of activities, a new type of threading macro (e.g. &lt;code&gt;let-&amp;gt;&lt;/code&gt;) could also be an intuitive solution. But I have not tried anything like this.&lt;/p&gt;
&lt;h2&gt;Final Words&lt;/h2&gt;
&lt;p&gt;The principle challenge is, that all these solutions establish a sort of alternative control flow. It is a hard challenge to do this right, especially in a functional language. Like exceptions, that immediatelly exit and magically jump somewhere else. Clojure as a practically language could address this challenge.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14999/controlled-bailout-jira-issue-2213</guid>
<pubDate>Sat, 21 Mar 2026 10:14:48 +0000</pubDate>
</item>
<item>
<title>Answered: Evaluating forms using eval can create a valid undesirable recursion point</title>
<link>https://ask.clojure.org/index.php/14991/evaluating-forms-using-create-valid-undesirable-recursion?show=14993#a14993</link>
<description>&lt;p&gt;I logged this as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2947&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2947&lt;/a&gt; but I don't think it's a big deal.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14991/evaluating-forms-using-create-valid-undesirable-recursion?show=14993#a14993</guid>
<pubDate>Tue, 17 Mar 2026 15:46:56 +0000</pubDate>
</item>
<item>
<title>Answered: It's difficult to figure out options I can pass to slurp function.</title>
<link>https://ask.clojure.org/index.php/14975/its-difficult-to-figure-out-options-can-pass-slurp-function?show=14976#a14976</link>
<description>&lt;p&gt;This is fair. I created &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2944&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2944&lt;/a&gt; to track this.&lt;/p&gt;
</description>
<category>Docs</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14975/its-difficult-to-figure-out-options-can-pass-slurp-function?show=14976#a14976</guid>
<pubDate>Fri, 27 Feb 2026 15:11:56 +0000</pubDate>
</item>
<item>
<title>Answered: Is it legal for a namespace to start with a number?</title>
<link>https://ask.clojure.org/index.php/14962/is-it-legal-for-a-namespace-to-start-with-a-number?show=14963#a14963</link>
<description>&lt;p&gt;As far as I can tell, there is no reason a namespace segment other than the first can't start with a number.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14962/is-it-legal-for-a-namespace-to-start-with-a-number?show=14963#a14963</guid>
<pubDate>Mon, 23 Feb 2026 19:12:09 +0000</pubDate>
</item>
<item>
<title>Feature Request:Make anonymous fn/reify class name IDs per namespace instead of one global counter</title>
<link>https://ask.clojure.org/index.php/14935/feature-request-anonymous-namespace-instead-global-counter</link>
<description>&lt;p&gt;  Compiled anonymous functions and reify classes get names like ns$fn__4532, where the numeric suffix comes from a global AtomicInteger counter&lt;br&gt;
  (RT.nextID()).&lt;/p&gt;
&lt;p&gt; This counter is shared across the entire runtime and is consumed by fn classes, reify classes, constants tables, gensyms, etc.&lt;/p&gt;
&lt;p&gt;  The problem is that because the counter is global, any code change shifts the IDs for everything compiled after it. This makes profiling across builds&lt;br&gt;
  really painful, you can't meaningfully compare flame graphs because all the class names change even in code you didn't touch.&lt;/p&gt;
&lt;p&gt;  I'd like to propose scoping the ID counter per-namespace instead. Since the namespace is already part of the class name prefix, uniqueness is still&lt;br&gt;
  guaranteed. This would eliminate the cascading effect across unchanged namespaces and make profiling diffs actually useful.&lt;/p&gt;
&lt;p&gt;I'm not sure what's the downsides of this, but from what I saw of AtomicInteger, it isn't used a lot to break things.&lt;/p&gt;
&lt;p&gt;Thank you!&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14935/feature-request-anonymous-namespace-instead-global-counter</guid>
<pubDate>Wed, 18 Feb 2026 15:34:38 +0000</pubDate>
</item>
<item>
<title>Answered: Is it valid for metadata to have metadata?</title>
<link>https://ask.clojure.org/index.php/14927/is-it-valid-for-metadata-to-have-metadata?show=14933#a14933</link>
<description>&lt;p&gt;Thanks for the additional info! I do think this is bug, which I've filed at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2941&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2941&lt;/a&gt; and patch is welcome. &lt;/p&gt;
&lt;p&gt;If you need to sign the contributor agreement or get access to jira, please follow process at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/dev/dev#_becoming_a_contributor&quot;&gt;https://clojure.org/dev/dev#_becoming_a_contributor&lt;/a&gt;&lt;/p&gt;
</description>
<category>Metadata</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14927/is-it-valid-for-metadata-to-have-metadata?show=14933#a14933</guid>
<pubDate>Tue, 17 Feb 2026 15:10:58 +0000</pubDate>
</item>
<item>
<title>Answered: bit-count in cljs but not clj</title>
<link>https://ask.clojure.org/index.php/14917/bit-count-in-cljs-but-not-clj?show=14918#a14918</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2937&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2937&lt;/a&gt;&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14917/bit-count-in-cljs-but-not-clj?show=14918#a14918</guid>
<pubDate>Fri, 30 Jan 2026 14:20:06 +0000</pubDate>
</item>
<item>
<title>definterface doesn't expose gen-interface's :extends for interface extension</title>
<link>https://ask.clojure.org/index.php/14903/definterface-doesnt-interfaces-extends-interface-extension</link>
<description>&lt;p&gt;gen-interface allow :extends to specify one or more interfaces, which will be extended by this interface. &lt;/p&gt;
&lt;p&gt;definterface doesn't expose this.&lt;/p&gt;
&lt;p&gt;Use case is working with primitives (where protocols don’t help), to get things to dispatch nicely in a zero boxing primitive transducer implementation.&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14903/definterface-doesnt-interfaces-extends-interface-extension</guid>
<pubDate>Mon, 26 Jan 2026 19:49:08 +0000</pubDate>
</item>
<item>
<title>Answered: How to force clojure.spec generator to skip a field</title>
<link>https://ask.clojure.org/index.php/14893/how-to-force-clojure-spec-generator-to-skip-a-field?show=14894#a14894</link>
<description>&lt;p&gt;Given that you're using &lt;code&gt;gen/let&lt;/code&gt;, why not just this?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(gen/let [x (s/gen (s/keys :opt [::a]))
          y (s/gen (s/keys :opt [::a]))]
  {:x x
   :y (cond-&amp;gt; y (not (contains? x ::a)) (dissoc ::a))})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alternatively:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(gen/let [x (s/gen (s/keys :opt [::a]))
          y (s/gen (cond-&amp;gt; (s/keys :opt [::a])
                     (not (contains? x ::a))
                     (s/and #(not (contains? % ::a)))))]
  {:x x
   :y y})
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Spec</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14893/how-to-force-clojure-spec-generator-to-skip-a-field?show=14894#a14894</guid>
<pubDate>Thu, 15 Jan 2026 10:26:11 +0000</pubDate>
</item>
<item>
<title>Answered: Is invoking an anonymous primitive function expected to use the primitive interface?</title>
<link>https://ask.clojure.org/index.php/14888/invoking-anonymous-primitive-function-primitive-interface?show=14891#a14891</link>
<description>&lt;p&gt;Reviewing this it appears to be the same issue as &lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.clojure.org/index.php/3326/cannot-create-anonymous-primitive-functions&quot;&gt;cannot-create-anonymous-primitive-functions&lt;/a&gt; which tracks with this jira &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-919&quot;&gt;CLJ-919&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14888/invoking-anonymous-primitive-function-primitive-interface?show=14891#a14891</guid>
<pubDate>Tue, 13 Jan 2026 22:47:58 +0000</pubDate>
</item>
<item>
<title>Answered: clojure.core/subs should use type hints of ^CharSequence, NOT ^String</title>
<link>https://ask.clojure.org/index.php/14889/clojure-core-subs-should-use-type-hints-charsequence-string?show=14890#a14890</link>
<description>&lt;p&gt;Created jira and patch at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2936&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2936&lt;/a&gt;&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14889/clojure-core-subs-should-use-type-hints-charsequence-string?show=14890#a14890</guid>
<pubDate>Tue, 13 Jan 2026 19:06:31 +0000</pubDate>
</item>
<item>
<title>Answered: Literals for Unicode code points (and perhaps also sequences thereof)</title>
<link>https://ask.clojure.org/index.php/14875/literals-unicode-code-points-perhaps-also-sequences-thereof?show=14886#a14886</link>
<description>&lt;p&gt;Created feature request jira &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2935&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2935&lt;/a&gt;&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14875/literals-unicode-code-points-perhaps-also-sequences-thereof?show=14886#a14886</guid>
<pubDate>Mon, 12 Jan 2026 22:26:24 +0000</pubDate>
</item>
<item>
<title>Answered: Reader docs say foo.bar is a qualified symbol but qualified-symbol? is false</title>
<link>https://ask.clojure.org/index.php/14882/reader-docs-say-foo-qualified-symbol-qualified-symbol-false?show=14883#a14883</link>
<description>&lt;p&gt;&quot;Qualified&quot; means more than one thing depending on context. Java classes are &quot;qualified&quot; by their package name. symbols are &quot;qualified&quot; by their namespace. class names are syntactically represented by a symbol which has overlapping senses - the class package is a dotted prefix that lives in the &quot;name&quot; part of the  symbol. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;qualified-symbol?&lt;/code&gt; is specifically referring to namespace qualification.&lt;/p&gt;
&lt;p&gt;My guess is that Rich would say that the original sentence is correct and written as intended.&lt;/p&gt;
</description>
<category>Docs</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14882/reader-docs-say-foo-qualified-symbol-qualified-symbol-false?show=14883#a14883</guid>
<pubDate>Mon, 12 Jan 2026 22:08:25 +0000</pubDate>
</item>
<item>
<title>Answered: CVE-warning in org.fressian/fressian &lt;- org.clojure/data.fressian</title>
<link>https://ask.clojure.org/index.php/14872/cve-warning-org-fressian-fressian-org-clojure-data-fressian?show=14873#a14873</link>
<description>&lt;p&gt;I agree that this is a false positive. Neither org.fressian/fressian nor org.clojure/data.fressian depend on either Datomic or h2, either explicitly or implicitly, even via test deps, so not sure how that could be possible even via test deps. &lt;/p&gt;
&lt;p&gt;clj-watson depends on &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/dependency-check/DependencyCheck&quot;&gt;https://github.com/dependency-check/DependencyCheck&lt;/a&gt; to do its checks, and you can report false positives as an issue on its issue tracker &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/dependency-check/DependencyCheck/issues&quot;&gt;https://github.com/dependency-check/DependencyCheck/issues&lt;/a&gt;. &lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14872/cve-warning-org-fressian-fressian-org-clojure-data-fressian?show=14873#a14873</guid>
<pubDate>Fri, 09 Jan 2026 16:31:43 +0000</pubDate>
</item>
<item>
<title>Answered: Why does the REPL incorrectly display my command after I press enter?</title>
<link>https://ask.clojure.org/index.php/14848/why-does-repl-incorrectly-display-command-after-press-enter?show=14858#a14858</link>
<description>&lt;p&gt;Updating the version of &lt;code&gt;rlwrap&lt;/code&gt; by building it from source fixed the issue.&lt;/p&gt;
&lt;p&gt;The version installed on my FreeBSD system was 0.45, the latest version available for the package manager, building from source yielded version 0.48, which seems to have fixed the display bug :)&lt;/p&gt;
</description>
<category>REPL</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14848/why-does-repl-incorrectly-display-command-after-press-enter?show=14858#a14858</guid>
<pubDate>Tue, 23 Dec 2025 08:15:40 +0000</pubDate>
</item>
<item>
<title>Octal escape sequence decoding in strings does not stop at non-octal digit</title>
<link>https://ask.clojure.org/index.php/14846/octal-escape-sequence-decoding-strings-does-stop-octal-digit</link>
<description>&lt;p&gt;Strings suppose to support standard Java escape sequences, including octal escape sequence: [0-7]{1,3} &lt;/p&gt;
&lt;p&gt;In Java decoding of octal sequences stop at the first non-octal digit or any other character if there are 1 or two octal digits in the escape sequence. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jshell&amp;gt; &quot;\18&quot;
$1 ==&amp;gt; &quot;\0018&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But Clojure reads up to 3 potentially octal digits greedily resulting in wrongly consuming non-octal digits:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.4
user=&amp;gt; &quot;\18&quot;
Syntax error reading source at (REPL:1:5).
Invalid digit: 8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;non-octal characters:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.4
user=&amp;gt; &quot;\1d&quot;
Syntax error reading source at (REPL:1:5).
Invalid digit: d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And succeed only when there is line terminator or exact three octal digits in supported octal range:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.4
user=&amp;gt; &quot;\1&quot;
&quot;&quot;
user=&amp;gt; &quot;\1&quot;
&quot;&quot;
user=&amp;gt; &quot;\12&quot;
&quot;\n&quot;
user=&amp;gt; &quot;\123&quot;
&quot;S&quot;
user=&amp;gt; &quot;\123d&quot;
&quot;Sd&quot;
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14846/octal-escape-sequence-decoding-strings-does-stop-octal-digit</guid>
<pubDate>Thu, 18 Dec 2025 09:35:53 +0000</pubDate>
</item>
<item>
<title>Answered: [clojure.edn] Leading zeros in numbers</title>
<link>https://ask.clojure.org/index.php/14798/clojure-edn-leading-zeros-in-numbers?show=14842#a14842</link>
<description>&lt;p&gt;Leading zeroes in Clojure should largely follow the lead of Java when the reference is unclear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long - multiple leading 0s allowed, treated as octal&lt;/li&gt;
&lt;li&gt;BigInteger - multiple leading 0s allowed, treated as decimal in Java BigInteger, octal in Clojure (this is a difference, but supported by the reader reference page)&lt;/li&gt;
&lt;li&gt;Double - multiple leading 0s allowed in either whole number part of exponent, treated as decimal &lt;/li&gt;
&lt;li&gt;BigDecimal - multiple leading 0s allowed, treated as decimal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With respect to edn, there are additional constraints - octal is not supported, and leading 0s not allowed in integers, but are allowed in decimal whole and exponents by my reading. I do not see support for your assertion &quot;even for floats&quot; - the constraint is listed only for integers). &lt;/p&gt;
&lt;p&gt;Thus I would expect that any leading 0s in an integer (with or without N suffix) should be invalid, yet they are all read as octal. So that seems like a potential bug. Because clojure.edn is a superset of edn, you could potentially contend this is additive syntax/semantics beyond edn but seems a little confusing.&lt;/p&gt;
&lt;p&gt;For floating points, by my reading, leading 0s in whole or exponent parts are allowed, so no issue or difference from Clojure or Java there afaict.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14798/clojure-edn-leading-zeros-in-numbers?show=14842#a14842</guid>
<pubDate>Mon, 15 Dec 2025 20:05:17 +0000</pubDate>
</item>
<item>
<title>Answered: `find` docstring enhancement proposal</title>
<link>https://ask.clojure.org/index.php/14828/find-docstring-enhancement-proposal?show=14832#a14832</link>
<description>&lt;p&gt;See &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/data_structures#Maps&quot;&gt;https://clojure.org/reference/data_structures#Maps&lt;/a&gt; (and other places on that page) where &quot;entry&quot; is referred to and, in particular:&lt;/p&gt;
&lt;p&gt;&quot;...a sequence of map entries, which are key/value pairs&quot;&lt;/p&gt;
&lt;p&gt;See also &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Map.html&quot;&gt;https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Map.html&lt;/a&gt; where &quot;entry&quot; is referred to several times and also defined as a key/value pair.&lt;/p&gt;
&lt;p&gt;Searching the web for &lt;code&gt;map entry -java&lt;/code&gt; seems to indicate this is pretty common terminology in other languages as well.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14828/find-docstring-enhancement-proposal?show=14832#a14832</guid>
<pubDate>Thu, 11 Dec 2025 20:35:32 +0000</pubDate>
</item>
<item>
<title>Answered: Aliased namespace in tagged literal</title>
<link>https://ask.clojure.org/index.php/14829/aliased-namespace-in-tagged-literal?show=14830#a14830</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2932&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2932&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I reworded the title and problem as this slips into solution space (and I'm not sure that solution is even possible given the reader nature of the problem).&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14829/aliased-namespace-in-tagged-literal?show=14830#a14830</guid>
<pubDate>Thu, 11 Dec 2025 20:18:34 +0000</pubDate>
</item>
<item>
<title>Answered: clojure.edn and clojure allows keywords with empty (&quot;&quot;) namespaces</title>
<link>https://ask.clojure.org/index.php/14811/clojure-edn-clojure-allows-keywords-with-empty-namespaces?show=14824#a14824</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2931&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2931&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Other old and related JIRAs for relevance: &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-1286&quot;&gt;CLJ-1286&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-1252&quot;&gt;CLJ-1252&lt;/a&gt;&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14811/clojure-edn-clojure-allows-keywords-with-empty-namespaces?show=14824#a14824</guid>
<pubDate>Tue, 09 Dec 2025 22:55:20 +0000</pubDate>
</item>
<item>
<title>Answered: Why is `list` defined with a RestFn instead of `create` method?</title>
<link>https://ask.clojure.org/index.php/14820/why-is-list-defined-with-a-restfn-instead-of-create-method?show=14823#a14823</link>
<description>&lt;p&gt;Probably only known to Rich, don't think these inconsistencies are important.&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14820/why-is-list-defined-with-a-restfn-instead-of-create-method?show=14823#a14823</guid>
<pubDate>Tue, 09 Dec 2025 22:44:08 +0000</pubDate>
</item>
<item>
<title>Answered: bug   bigdec</title>
<link>https://ask.clojure.org/index.php/14809/bug-bigdec?show=14822#a14822</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2930&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2930&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14809/bug-bigdec?show=14822#a14822</guid>
<pubDate>Tue, 09 Dec 2025 22:36:21 +0000</pubDate>
</item>
<item>
<title>Answered: not-found arg for invoking set (and vector)?</title>
<link>https://ask.clojure.org/index.php/14815/not-found-arg-for-invoking-set-and-vector?show=14816#a14816</link>
<description>&lt;p&gt;Dupe of &lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.clojure.org/index.php/2833/optional-found-argument-when-invoking-vectors-sets-functions&quot;&gt;https://ask.clojure.org/index.php/2833/optional-found-argument-when-invoking-vectors-sets-functions&lt;/a&gt; - please vote there if you're interested, happy for someone to refresh the jira+patch on &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-1305&quot;&gt;https://clojure.atlassian.net/browse/CLJ-1305&lt;/a&gt; too.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14815/not-found-arg-for-invoking-set-and-vector?show=14816#a14816</guid>
<pubDate>Sat, 06 Dec 2025 19:46:50 +0000</pubDate>
</item>
<item>
<title>Answered: Double colon (&quot;::&quot;) in the middle or at the end of identifier.</title>
<link>https://ask.clojure.org/index.php/14787/double-colon-in-the-middle-or-at-the-end-of-identifier?show=14793#a14793</link>
<description>&lt;p&gt;Don't know, sorry.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14787/double-colon-in-the-middle-or-at-the-end-of-identifier?show=14793#a14793</guid>
<pubDate>Tue, 02 Dec 2025 16:47:37 +0000</pubDate>
</item>
<item>
<title>Answered: Support characters beyond basic multilingual plane</title>
<link>https://ask.clojure.org/index.php/14790/support-characters-beyond-basic-multilingual-plane?show=14791#a14791</link>
<description>&lt;p&gt;That line you linked is specifically for reading an individual character value (like &lt;code&gt;\a&lt;/code&gt;) - as a single character it's not possible to represent both parts of a surrogate pair, so this seems correct (a Java char is an int).&lt;/p&gt;
&lt;p&gt;However, you can use surrogate pairs in strings, which is how you would most commonly use them, and that works fine.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$  clj
Clojure 1.12.3
user=&amp;gt; &quot;\ud83d\ude0d&quot;
&quot;&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I believe surrogate pairs are not currently allowed in symbols or keywords, that's maybe something that could be extended in the future, but I haven't seen anyone looking for that yet.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14790/support-characters-beyond-basic-multilingual-plane?show=14791#a14791</guid>
<pubDate>Tue, 02 Dec 2025 16:42:47 +0000</pubDate>
</item>
<item>
<title>Answered: Typo in clojure.zipper/zipper docstring</title>
<link>https://ask.clojure.org/index.php/14733/typo-in-clojure-zipper-zipper-docstring?show=14778#a14778</link>
<description>&lt;p&gt;Good catch! Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2929&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2929&lt;/a&gt;&lt;/p&gt;
</description>
<category>Docs</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14733/typo-in-clojure-zipper-zipper-docstring?show=14778#a14778</guid>
<pubDate>Tue, 25 Nov 2025 20:32:58 +0000</pubDate>
</item>
<item>
<title>Answered: clojure.edn/read invoke user-supplied reader functions when tagged literal is to be discarded by discard macro</title>
<link>https://ask.clojure.org/index.php/14761/clojure-supplied-functions-tagged-literal-discarded-discard?show=14775#a14775</link>
<description>&lt;p&gt;This is definitely an appropriate thing to put on Ask Clojure and seems like a bug in the impl of the spec to me.&lt;/p&gt;
&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2928&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2928&lt;/a&gt;&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14761/clojure-supplied-functions-tagged-literal-discarded-discard?show=14775#a14775</guid>
<pubDate>Tue, 25 Nov 2025 20:22:21 +0000</pubDate>
</item>
<item>
<title>Answered: Docstring clojure.edn/read-string is misleading</title>
<link>https://ask.clojure.org/index.php/14762/docstring-clojure-edn-read-string-is-misleading?show=14774#a14774</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2927&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2927&lt;/a&gt;&lt;/p&gt;
</description>
<category>Docs</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14762/docstring-clojure-edn-read-string-is-misleading?show=14774#a14774</guid>
<pubDate>Tue, 25 Nov 2025 20:14:35 +0000</pubDate>
</item>
<item>
<title>Answered: Could we get deref support on ScopedValue?</title>
<link>https://ask.clojure.org/index.php/14771/could-we-get-deref-support-on-scopedvalue?show=14773#a14773</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2926&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2926&lt;/a&gt;&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14771/could-we-get-deref-support-on-scopedvalue?show=14773#a14773</guid>
<pubDate>Tue, 25 Nov 2025 20:00:22 +0000</pubDate>
</item>
<item>
<title>Answered: Inconsistent errors in ratio parsing with either `clojure.edn/read` or `clojure.core/read`</title>
<link>https://ask.clojure.org/index.php/14763/inconsistent-errors-ratio-parsing-either-clojure-clojure?show=14772#a14772</link>
<description>&lt;p&gt;Ratios in Clojure are rational ratios with integer numerator and denominator. Ratio syntax is not a composite of integer or other numeric syntaxes, it is its own definition where the numerator and denominator are strings of digits of arbitrary length (treated as long or biginteger as necessary based on scale).&lt;/p&gt;
&lt;p&gt;The syntax is semantically defined as: &lt;br&gt;
 &lt;code&gt;sign? digit+ '/' digit+&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The regex pattern is currently:&lt;br&gt;
&lt;code&gt;&quot;([-+]?[0-9]+)/([0-9]+)&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This pattern incorrectly allows leading 0 and should be narrowed.&lt;/p&gt;
&lt;p&gt;Filed jira at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2925&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2925&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The other errors are expected and these syntaxes are not supported.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14763/inconsistent-errors-ratio-parsing-either-clojure-clojure?show=14772#a14772</guid>
<pubDate>Tue, 25 Nov 2025 19:43:36 +0000</pubDate>
</item>
<item>
<title>Answered: Multiple Java types cannot be idiomatically leveraged w/o proper `IDeref` support</title>
<link>https://ask.clojure.org/index.php/14767/multiple-cannot-idiomatically-leveraged-proper-ideref-support?show=14769#a14769</link>
<description>&lt;p&gt;Probably tough to make it a protocol now, especially with backward compiled compatibility.&lt;/p&gt;
&lt;p&gt;It would be best to vote on the &lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.clojure.org/index.php/14501/idiomatic-way-to-use-java-util-optional&quot;&gt;question for Optional&lt;/a&gt; to voice your opinion there - we look at higher voted things with more urgency.&lt;/p&gt;
&lt;p&gt;ScopedValue is only available non-preview in 25, so pretty new still. would probably be best to file an Ask question specifically about that so it can gather votes.&lt;/p&gt;
&lt;p&gt;LazyConstant is not a thing yet, so will be a long while probably.&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14767/multiple-cannot-idiomatically-leveraged-proper-ideref-support?show=14769#a14769</guid>
<pubDate>Mon, 24 Nov 2025 20:55:02 +0000</pubDate>
</item>
<item>
<title>Answered: Support for automatic promotion to BigDecimal in +', *', etc.</title>
<link>https://ask.clojure.org/index.php/14752/support-for-automatic-promotion-to-bigdecimal-in-etc?show=14755#a14755</link>
<description>&lt;p&gt;I think this is not a bug and is by design - the auto-promotion operators only have promotion semantics for integer arguments, not for floats.&lt;/p&gt;
&lt;p&gt;The only relevant reference page here is &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/data_structures#_longs&quot;&gt;https://clojure.org/reference/data_structures#_longs&lt;/a&gt; - it's important to note that this is in a header called &quot;Longs&quot; and &lt;strong&gt;only&lt;/strong&gt; mentions promotion for integer types:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Clojure provides a set of alternative math operators suffixed with an&lt;br&gt;
apostrophe: +', -', *', inc', and dec'. These operators auto-promote&lt;br&gt;
to BigInt upon overflow, but are less efficient than the regular math&lt;br&gt;
operators.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I went back and did some digging from when numerics were overhauled (Clojure 1.3). The design docs from this time can be found in these wayback links that provide more context and align with the semantics above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.archive.org/web/20120706124330/https://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics&quot;&gt;Documentation for 1.3 Numerics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.archive.org/web/20121108015138/https://dev.clojure.org/display/doc/Enhanced+Primitive+Support&quot;&gt;Enhanced Primitive Support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The promotion op docstrings are currently not very helpful in understanding this (see &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2923&quot;&gt;CLJ-2923&lt;/a&gt; ).&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14752/support-for-automatic-promotion-to-bigdecimal-in-etc?show=14755#a14755</guid>
<pubDate>Mon, 17 Nov 2025 15:28:28 +0000</pubDate>
</item>
<item>
<title>Answered: Multimethod does not consistently resolve methods in a diamond-like hierarchy</title>
<link>https://ask.clojure.org/index.php/13106/multimethod-consistently-resolve-methods-diamond-hierarchy?show=14754#a14754</link>
<description>&lt;p&gt;FWIW, &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clj-commons/manifold/issues/255&quot;&gt;we might have encountered this issue in Manifold&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13106/multimethod-consistently-resolve-methods-diamond-hierarchy?show=14754#a14754</guid>
<pubDate>Tue, 11 Nov 2025 12:58:24 +0000</pubDate>
</item>
<item>
<title>Answered: cannot call Java Constructor overload</title>
<link>https://ask.clojure.org/index.php/14744/cannot-call-java-constructor-overload?show=14745#a14745</link>
<description>&lt;p&gt;That constructor is private, you can't call it.&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14744/cannot-call-java-constructor-overload?show=14745#a14745</guid>
<pubDate>Mon, 03 Nov 2025 18:35:22 +0000</pubDate>
</item>
<item>
<title>Answered: Macro expansion lose type hints</title>
<link>https://ask.clojure.org/index.php/14740/macro-expansion-lose-type-hints?show=14741#a14741</link>
<description>&lt;p&gt;I believe this is the same general problem as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-865&quot;&gt;https://clojure.atlassian.net/browse/CLJ-865&lt;/a&gt;, which has been long-debated in the core team.&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14740/macro-expansion-lose-type-hints?show=14741#a14741</guid>
<pubDate>Mon, 03 Nov 2025 14:30:41 +0000</pubDate>
</item>
<item>
<title>Unwrapped do is treated as a special form in let and fn bodies</title>
<link>https://ask.clojure.org/index.php/14729/unwrapped-do-is-treated-as-a-special-form-in-let-and-fn-bodies</link>
<description>&lt;p&gt;when a let or fn body begins with the bare symbol &lt;code&gt;do&lt;/code&gt; (not in list head position) it is treated as a do-block wrapper for the rest of the body&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.0
user=&amp;gt; (let [] do)
nil
user=&amp;gt; (let [] do 123)
123
user=&amp;gt; (let [] 123 do)
Syntax error compiling at (REPL:1:1).
Unable to resolve symbol: do in this context
user=&amp;gt; ((fn [] do))
nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aside from being unexpected, it also has the effect of appearing to override any local binding named 'do':&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user=&amp;gt; (let [do :something] do)
nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that Clojurescript treats all the above cases 'correctly':&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ClojureScript 1.11.132
cljs.user=&amp;gt; (let [] do)
                    ^
WARNING: Use of undeclared Var cljs.user/do at line 1
nil
cljs.user=&amp;gt; (let [do :something] do)
:something
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The community guide at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure-doc.org/articles/language/macros/&quot;&gt;https://clojure-doc.org/articles/language/macros/&lt;/a&gt;&lt;br&gt;
has pointed out this exact edge case (since 2013?) and recommends to 'Never use special names as local binding or global variable names'. However it seems like a bug worth addressing given the discrepancy between JVM/CLJS outputs&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14729/unwrapped-do-is-treated-as-a-special-form-in-let-and-fn-bodies</guid>
<pubDate>Fri, 24 Oct 2025 17:30:35 +0000</pubDate>
</item>
<item>
<title>Answered: The docstring on empty? should perhaps not recommend using seq instead anymore</title>
<link>https://ask.clojure.org/index.php/14724/docstring-empty-should-perhaps-recommend-instead-anymore?show=14725#a14725</link>
<description>&lt;p&gt;The docstring says &quot;To check the emptiness &lt;strong&gt;of a seq&lt;/strong&gt;...&quot; which is still the preferred idiom.&lt;/p&gt;
</description>
<category>Docs</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14724/docstring-empty-should-perhaps-recommend-instead-anymore?show=14725#a14725</guid>
<pubDate>Fri, 17 Oct 2025 14:13:15 +0000</pubDate>
</item>
<item>
<title>`(s/gen ...)` caches its failure to load generators and thus is incompatible with `add-lib`</title>
<link>https://ask.clojure.org/index.php/14718/gen-caches-failure-load-generators-thus-incompatible-with</link>
<description>&lt;pre&gt;&lt;code&gt;Clojure 1.12.0
user=&amp;gt; (require '[clojure.spec.alpha :as s])
nil
user=&amp;gt; (s/def ::x #{1 2 3})
:user/x
user=&amp;gt; (s/gen ::x)
Execution error (FileNotFoundException) at user/eval145 (REPL:1).
Could not locate clojure/test/check/generators__init.class, clojure/test/check/generators.clj or clojure/test/check/generators.cljc on classpath.
user=&amp;gt; (add-lib 'org.clojure/test.check)
[org.clojure/test.check]
user=&amp;gt; (s/gen ::x)
Execution error (FileNotFoundException) at user/eval145 (REPL:1).
Could not locate clojure/test/check/generators__init.class, clojure/test/check/generators.clj or clojure/test/check/generators.cljc on classpath.
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>REPL</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14718/gen-caches-failure-load-generators-thus-incompatible-with</guid>
<pubDate>Tue, 23 Sep 2025 16:23:58 +0000</pubDate>
</item>
<item>
<title>Improve javadoc especially for tool usage</title>
<link>https://ask.clojure.org/index.php/14715/improve-javadoc-especially-for-tool-usage</link>
<description>&lt;p&gt;In order to provide a hot key in VS Code to show the JavaDocs associated with a selected form (class name or the type of an expression), I wrote the following Joyride script:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/scripts/javadoc.cljs#L15&quot;&gt;https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/scripts/javadoc.cljs#L15&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This highlights three issues that could be addressed/improved:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;On JDKs later than 15, the javadoc machinery falls back to JDK 8, unless you explicitly call &lt;code&gt;add-remote-javadoc&lt;/code&gt; for at least &lt;code&gt;java.&lt;/code&gt; and &lt;code&gt;javax.&lt;/code&gt;. This is a known issue that should be addressed in Clojure 1.13 per &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2920&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2920&lt;/a&gt; -- hopefully it will assume the URL structure for JDKs going forward so we don't run into this problem again, unless Oracle changes their URL structure again (hopefully, unlikely).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;javadoc-url&lt;/code&gt; is private so tools have to use &lt;code&gt;#'&lt;/code&gt; to access it, which makes it feel like this is just an implementation detail and subject to change. It would be nice for tools if this was part of the public, documented API for &lt;code&gt;clojure.java.javadoc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inner classes are not handled well. If you ask for the &lt;code&gt;javadoc-url&lt;/code&gt; for &lt;code&gt;java.util.Map$Entry&lt;/code&gt;, you get a URL with &lt;code&gt;Map$Entry.html&lt;/code&gt; which doesn't exist. Since inner classes are documented in their outer class, removing &lt;code&gt;$[a-zA-Z0-9_]+&lt;/code&gt; from the class name or from the URL would really help here.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here's an example REPL session for Clojure 1.12.2 on JDK 24, showing these issues:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;user=&amp;gt; (clojure-version)
&quot;1.12.2&quot;
user=&amp;gt; (require 'clojure.java.javadoc)
nil
user=&amp;gt; (#'clojure.java.javadoc/javadoc-url &quot;java.util.concurrent.ExecutionException&quot;)
&quot;http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html&quot;
user=&amp;gt; (#'clojure.java.javadoc/javadoc-url &quot;java.util.Map$Entry&quot;)
&quot;http://docs.oracle.com/javase/8/docs/api/java/util/Map$Entry.html&quot;
user=&amp;gt; &lt;/code&gt;&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14715/improve-javadoc-especially-for-tool-usage</guid>
<pubDate>Tue, 16 Sep 2025 17:54:13 +0000</pubDate>
</item>
<item>
<title>clojure -X hangs with agent use</title>
<link>https://ask.clojure.org/index.php/14708/clojure-x-hangs-with-agent-use</link>
<description>&lt;p&gt;Given this repro:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(ns repro)

(defn exec-fn [_]
  (let [a (agent nil)]
    (prn (-&amp;gt; (java.lang.ProcessHandle/current) (.pid)))
    (send a (fn [_] 3))))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;the &lt;code&gt;clojure -X repro/exec-fn&lt;/code&gt; invocation is hanging.&lt;/p&gt;
&lt;p&gt;This seems to be unintentional, given that clojure -X doesn't wait for futures to finish either?&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14708/clojure-x-hangs-with-agent-use</guid>
<pubDate>Wed, 10 Sep 2025 21:02:32 +0000</pubDate>
</item>
<item>
<title>Answered: Do you use arity 3 or higher comparisons such as = &lt; &lt;= &gt; &gt;= == in performance sensitive code?</title>
<link>https://ask.clojure.org/index.php/13627/arity-higher-comparisons-such-performance-sensitive-code?show=14681#a14681</link>
<description>&lt;p&gt;Yes, I use 3-arity inequality functions with some regularity, much like PostgreSQL's &lt;code&gt;BETWEEN&lt;/code&gt; operator, I've also seen it used by others. I think the most frequent use case for this is in tests for me personally but some of these are inside &lt;code&gt;are&lt;/code&gt;s that can get large, so I would appreciate a performance optimization.&lt;/p&gt;
&lt;p&gt;I would also agree that 4+ arity is exponentially rarer than 3-arity (I've never seen it in practice, but I assume there's been at least one person who has done &lt;code&gt;(apply &amp;gt; coll)&lt;/code&gt; at some point to check if a collection is sorted), but I have no data on this beyond anecdotal experience.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13627/arity-higher-comparisons-such-performance-sensitive-code?show=14681#a14681</guid>
<pubDate>Tue, 12 Aug 2025 21:31:07 +0000</pubDate>
</item>
<item>
<title>Answered: core.async docstrings for `take!` and `put!` not clear on impact of `on-caller?`</title>
<link>https://ask.clojure.org/index.php/14679/core-async-docstrings-for-take-and-put-not-clear-impact-caller?show=14680#a14680</link>
<description>&lt;p&gt;Including the docstring here for reference:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Asynchronously takes a val from port, passing to fn1. Will pass nil if&lt;br&gt;
closed. If on-caller? (default true) is true, and value is immediately&lt;br&gt;
available, will call fn1 on calling thread.&lt;/p&gt;
&lt;p&gt;fn1 may be run in a fixed-size dispatch thread pool and should not&lt;br&gt;
perform blocking IO, including core.async blocking ops (those that end&lt;br&gt;
in !!).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The docstring is promising what will will happen if on-caller? is true and the value is immediately available.  When those conditions are not met, there are no promises being made. The actual implementation has changed over time and may change again to optimize performance.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14679/core-async-docstrings-for-take-and-put-not-clear-impact-caller?show=14680#a14680</guid>
<pubDate>Tue, 12 Aug 2025 14:32:22 +0000</pubDate>
</item>
<item>
<title>Answered: specifying `:let` as the first element of `for` causes an macro expansion error</title>
<link>https://ask.clojure.org/index.php/14670/specifying-let-first-element-causes-macro-expansion-error?show=14671#a14671</link>
<description>&lt;p&gt;Seems like it is working as intended per the docstring.&lt;/p&gt;
</description>
<category>Macros</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14670/specifying-let-first-element-causes-macro-expansion-error?show=14671#a14671</guid>
<pubDate>Mon, 11 Aug 2025 01:09:48 +0000</pubDate>
</item>
</channel>
</rss>