<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Clojure Q&amp;A - Recent questions and answers</title>
<link>https://ask.clojure.org/index.php/qa</link>
<description></description>
<item>
<title>Answered: Does Clojure have an anti LLM code contributions policy? Would it make sense for Clojure to adopt one?</title>
<link>https://ask.clojure.org/index.php/15004/clojure-contributions-policy-would-make-sense-clojure-adopt?show=15036#a15036</link>
<description>&lt;p&gt;We've added a statement in this regard to several pages on the site to clarify what is allowed under the Clojure contributor agreement.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/dev/contributor_agreement#_no_generated_code&quot;&gt;https://clojure.org/dev/contributor_agreement#_no_generated_code&lt;/a&gt;&lt;/p&gt;
</description>
<category>Meta</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15004/clojure-contributions-policy-would-make-sense-clojure-adopt?show=15036#a15036</guid>
<pubDate>Mon, 06 Apr 2026 13:24:09 +0000</pubDate>
</item>
<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>Missing protocol error will hang on infinite `(range)` input in ClojureScript but not Clojure</title>
<link>https://ask.clojure.org/index.php/15026/missing-protocol-error-infinite-range-clojurescript-clojure</link>
<description>&lt;p&gt;functions like &lt;code&gt;transient&lt;/code&gt;, &lt;code&gt;assoc&lt;/code&gt;, etc  will throw helpful missing-protocol error when receiving invalid input but it will hang if it receives infinite &lt;code&gt;(range)&lt;/code&gt;.&lt;br&gt;
this is related to issue below&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.clojure.org/index.php/14578/even-range-hangs?show=14578#q14578&quot;&gt;https://ask.clojure.org/index.php/14578/even-range-hangs?show=14578#q14578&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;however, missing-protocol only hang in clojurescript but not clojure so I am wondering if this difference is intended.&lt;/p&gt;
&lt;p&gt;example calls that should throws&lt;br&gt;
- &lt;code&gt;(transient (range))&lt;/code&gt;&lt;br&gt;
- &lt;code&gt;(assoc (range) :a 1)&lt;/code&gt;&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15026/missing-protocol-error-infinite-range-clojurescript-clojure</guid>
<pubDate>Fri, 03 Apr 2026 11:16:47 +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: Is the recent change to flow's futurize safe?</title>
<link>https://ask.clojure.org/index.php/14994/is-the-recent-change-to-flows-futurize-safe?show=14996#a14996</link>
<description>&lt;p&gt;Created &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/ASYNC-275&quot;&gt;ASYNC-275&lt;/a&gt;.&lt;/p&gt;
</description>
<category>core.async</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14994/is-the-recent-change-to-flows-futurize-safe?show=14996#a14996</guid>
<pubDate>Wed, 18 Mar 2026 13:41:35 +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: shasum not found error when using ./posix-install on linux</title>
<link>https://ask.clojure.org/index.php/14987/shasum-not-found-error-when-using-posix-install-on-linux?show=14988#a14988</link>
<description>&lt;p&gt;We've added a version verification step in the installer. The posix and linux installers use different tools to calculate the sha of the downloaded file according to the expectations of these platforms. You should use the installer that is most appropriate - here, that seems to be the linux installer (for Amazon Linux).&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14987/shasum-not-found-error-when-using-posix-install-on-linux?show=14988#a14988</guid>
<pubDate>Wed, 11 Mar 2026 22:05:18 +0000</pubDate>
</item>
<item>
<title>Answered: tools.cli: capture unrecognized options as unparsed arguments</title>
<link>https://ask.clojure.org/index.php/14977/tools-cli-capture-unrecognized-options-unparsed-arguments?show=14985#a14985</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TCLI-107&quot;&gt;https://clojure.atlassian.net/browse/TCLI-107&lt;/a&gt; with a proposed syntax:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:subcommand :explicit&lt;/code&gt; will have the same meaning as &lt;code&gt;:in-order true&lt;/code&gt; does today&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:subcommand :implicit&lt;/code&gt; will have the behavior the OP wants here, i.e., an unknown option is treated as if there were an implicit subcommand present&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deprecate &lt;code&gt;:in-order true&lt;/code&gt; (in favor of &lt;code&gt;:subcommand :explicit&lt;/code&gt;).&lt;/p&gt;
</description>
<category>tools.cli</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14977/tools-cli-capture-unrecognized-options-unparsed-arguments?show=14985#a14985</guid>
<pubDate>Fri, 06 Mar 2026 01:40:33 +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: Could some calls to clojure.core/= be replaced by clojure.core/identical?</title>
<link>https://ask.clojure.org/index.php/12721/could-some-calls-clojure-core-replaced-clojure-core-identical?show=14971#a14971</link>
<description>&lt;p&gt;The 1.2.x versions of &lt;code&gt;core.cache&lt;/code&gt; use delays inside the &lt;code&gt;wrapped&lt;/code&gt; ns so the original aspect of this Q is moot, but we could probably still change all those &lt;code&gt;=&lt;/code&gt; to &lt;code&gt;identical?&lt;/code&gt; for &lt;code&gt;::&lt;/code&gt; style keywords in the library.&lt;/p&gt;
</description>
<category>core.cache</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12721/could-some-calls-clojure-core-replaced-clojure-core-identical?show=14971#a14971</guid>
<pubDate>Wed, 25 Feb 2026 23:51:22 +0000</pubDate>
</item>
<item>
<title>Answered: clojure.core.cache caches delays that hold exceptions as of version 1.2.254</title>
<link>https://ask.clojure.org/index.php/14965/clojure-core-cache-caches-delays-that-hold-exceptions-version?show=14970#a14970</link>
<description>&lt;p&gt;Version 1.2.263 solves both the cache stampede bug and the cached exceptions bug, and does so without locking. Thank you, Claude Opus 4.6.&lt;/p&gt;
</description>
<category>core.cache</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14965/clojure-core-cache-caches-delays-that-hold-exceptions-version?show=14970#a14970</guid>
<pubDate>Wed, 25 Feb 2026 23:07:51 +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: clojure.java.doc.api/javadoc-data-fn does not include constructor info</title>
<link>https://ask.clojure.org/index.php/14920/clojure-java-doc-javadoc-data-does-include-constructor-info?show=14932#a14932</link>
<description>&lt;p&gt;That functionality is now present in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/java.doc/releases/tag/v0.1.4&quot;&gt;v0.1.4&lt;/a&gt; release.  &lt;/p&gt;
</description>
<category>java.doc</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14920/clojure-java-doc-javadoc-data-does-include-constructor-info?show=14932#a14932</guid>
<pubDate>Fri, 13 Feb 2026 18:33:40 +0000</pubDate>
</item>
<item>
<title>Answered: javadoc-data-fn does not find selected method for inherited methods</title>
<link>https://ask.clojure.org/index.php/14921/javadoc-data-does-not-find-selected-method-inherited-methods?show=14931#a14931</link>
<description>&lt;p&gt;Great feedback. &lt;/p&gt;
&lt;p&gt;We were indeed not looking for inherited methods. That functionality is now present in the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/java.doc/releases/tag/v0.1.4&quot;&gt;v0.1.4&lt;/a&gt; release.  &lt;/p&gt;
</description>
<category>java.doc</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14921/javadoc-data-does-not-find-selected-method-inherited-methods?show=14931#a14931</guid>
<pubDate>Fri, 13 Feb 2026 18:33:01 +0000</pubDate>
</item>
<item>
<title>Answered: does deps.edd support &quot;exclusion&quot; with wild cards ?</title>
<link>https://ask.clojure.org/index.php/14922/does-deps-edd-support-exclusion-with-wild-cards?show=14925#a14925</link>
<description>&lt;p&gt;There is an existing enhancement jira for this at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TDEPS-141&quot;&gt;https://clojure.atlassian.net/browse/TDEPS-141&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14922/does-deps-edd-support-exclusion-with-wild-cards?show=14925#a14925</guid>
<pubDate>Sun, 08 Feb 2026 17:14:18 +0000</pubDate>
</item>
<item>
<title>TypedArrays don't implement ICounted in cljs</title>
<link>https://ask.clojure.org/index.php/14919/typedarrays-dont-implement-icounted-in-cljs</link>
<description>&lt;p&gt;I just discovered that JS TypedArrays (&lt;code&gt;Uint8Array&lt;/code&gt; et al) do not implement &lt;code&gt;ICounted&lt;/code&gt; out of the box, even though it's trivial to make them do so. As a result &lt;code&gt;count&lt;/code&gt; doesn't work on them; this is in contrast to Clojure where &lt;code&gt;count&lt;/code&gt; works on arrays of primitives. Can/should this be added, or is the current behaviour intended?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(count (js/Uint8Array. [1 2 3]))
;; Execution error (Error) at (&amp;lt;cljs repl&amp;gt;:1).
;; No protocol method ICounted.-count defined for type object: 1,2,3
;=&amp;gt; :repl/exception!

(extend-protocol ICounted
 js/Uint8Array 
 (-count [this] (alength this)))
;=&amp;gt; #object [Function]

(count (js/Uint8Array. [1 2 3]))
;=&amp;gt; 3
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14919/typedarrays-dont-implement-icounted-in-cljs</guid>
<pubDate>Thu, 05 Feb 2026 12:37:54 +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>Answered: Core Cache and Count</title>
<link>https://ask.clojure.org/index.php/14910/core-cache-and-count?show=14914#a14914</link>
<description>&lt;p&gt;Seems reasonable. &lt;/p&gt;
&lt;p&gt;Created &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CCACHE-67&quot;&gt;https://clojure.atlassian.net/browse/CCACHE-67&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm happy to help screen a patch if you're so inclined to provide one.&lt;/p&gt;
</description>
<category>core.cache</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14910/core-cache-and-count?show=14914#a14914</guid>
<pubDate>Thu, 29 Jan 2026 14:03:17 +0000</pubDate>
</item>
<item>
<title>Answered: `flow/ping-proc` can be slow or fail to respond, even when process isn't busy</title>
<link>https://ask.clojure.org/index.php/14911/flow-ping-proc-slow-fail-respond-even-when-process-isnt-busy?show=14912#a14912</link>
<description>&lt;p&gt;Thanks, we've been discussing ways to specify filters for proc state datafication.&lt;/p&gt;
</description>
<category>core.async</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14911/flow-ping-proc-slow-fail-respond-even-when-process-isnt-busy?show=14912#a14912</guid>
<pubDate>Wed, 28 Jan 2026 19:54:27 +0000</pubDate>
</item>
<item>
<title>Answered: TDEPS-269: checksums should use sha256sum instead of shasum</title>
<link>https://ask.clojure.org/index.php/14906/tdeps-269-checksums-should-use-sha256sum-instead-of-shasum?show=14908#a14908</link>
<description>&lt;p&gt;Thanks, I logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TDEPS-275&quot;&gt;https://clojure.atlassian.net/browse/TDEPS-275&lt;/a&gt; and will change at least the Linux installer today, need to decide which to use for Posix installer.&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14906/tdeps-269-checksums-should-use-sha256sum-instead-of-shasum?show=14908#a14908</guid>
<pubDate>Tue, 27 Jan 2026 15:18:40 +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: Improving curl options for CLI install scripts (brew-install)</title>
<link>https://ask.clojure.org/index.php/14900/improving-curl-options-for-cli-install-scripts-brew-install?show=14902#a14902</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TDEPS-274&quot;&gt;https://clojure.atlassian.net/browse/TDEPS-274&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14900/improving-curl-options-for-cli-install-scripts-brew-install?show=14902#a14902</guid>
<pubDate>Mon, 26 Jan 2026 19:36:29 +0000</pubDate>
</item>
<item>
<title>Answered: clojure.java.doc.api/javadoc-data-fn does not include return types for methods</title>
<link>https://ask.clojure.org/index.php/14898/clojure-java-javadoc-data-does-include-return-types-methods?show=14899#a14899</link>
<description>&lt;p&gt;I just released &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/java.doc/releases/tag/v0.1.3&quot;&gt;v0.1.3&lt;/a&gt; that now includes the &lt;code&gt;:return-type&lt;/code&gt; in the response from jdoc-data&lt;/p&gt;
</description>
<category>java.doc</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14898/clojure-java-javadoc-data-does-include-return-types-methods?show=14899#a14899</guid>
<pubDate>Fri, 23 Jan 2026 21:55:59 +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: false positive warning: &quot;cljs.core/+, all arguments must be numbers&quot;</title>
<link>https://ask.clojure.org/index.php/14870/false-positive-warning-cljs-core-all-arguments-must-numbers?show=14871#a14871</link>
<description>&lt;p&gt;The problem is the &lt;code&gt;when&lt;/code&gt;. The inference mechanism isn't strong enough to narrow the return type (number|nil) if the type of the argument is known.&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14870/false-positive-warning-cljs-core-all-arguments-must-numbers?show=14871#a14871</guid>
<pubDate>Tue, 06 Jan 2026 20:07:06 +0000</pubDate>
</item>
<item>
<title>Answered: ClojureScript :preloads doesn't work with just cljs.main --repl</title>
<link>https://ask.clojure.org/index.php/14863/clojurescript-preloads-doesnt-work-with-just-cljs-main-repl?show=14867#a14867</link>
<description>&lt;p&gt;I just figured that the preloads do get compiled, it is just that the goog.requires aren't being added to the on-the-fly generated main.js.&lt;/p&gt;
&lt;p&gt; Leaving a possible patch here in case there is interest :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;diff --git a/src/main/clojure/cljs/cli.clj b/src/main/clojure/cljs/cli.clj
index da4f2761..9087151c 100644
--- a/src/main/clojure/cljs/cli.clj
+++ b/src/main/clojure/cljs/cli.clj
@@ -321,7 +321,8 @@ present&quot;
         reopts (merge repl-env-options (select-keys opts [:main :output-dir]))
         _      (when (or ana/*verbose* (:verbose opts))
                  (util/debug-prn &quot;REPL env options:&quot; (pr-str reopts)))
-        renv   (apply (target-&amp;gt;repl-env (:target options) repl-env) (mapcat identity reopts))]
+        renv   (-&amp;gt; (apply (target-&amp;gt;repl-env (:target options) repl-env) (mapcat identity reopts))
+                   (assoc :compiler-opts opts))]
     (repl/repl* renv
       (assoc opts
         ::repl/fast-initial-prompt?
diff --git a/src/main/clojure/cljs/repl/browser.clj b/src/main/clojure/cljs/repl/browser.clj
index 2c907c6d..9b333127 100644
--- a/src/main/clojure/cljs/repl/browser.clj
+++ b/src/main/clojure/cljs/repl/browser.clj
@@ -182,7 +182,7 @@
 
 (defn send-static
   [{path :path :as request} conn
-   {:keys [static-dir output-dir host port gzip?] :or {output-dir &quot;out&quot;} :as opts}]
+   {:keys [static-dir output-dir host port gzip? compiler-opts] :or {output-dir &quot;out&quot;} :as opts}]
   (let [output-dir (when-not (.isAbsolute (io/file output-dir)) output-dir)]
     (if (and static-dir (not= &quot;/favicon.ico&quot; path))
       (let [path (if (= &quot;/&quot; path) &quot;/index.html&quot; path)
@@ -224,7 +224,11 @@
                                       clojure.browser.repl/PORT ~port}
                                   (merge (:closure-defines @browser-state))
                                   cljsc/normalize-closure-defines
-                                  json/write-str)]
+                                  json/write-str)
+                preloads (when-let [preloads (:preloads compiler-opts)]
+                           (mapv (fn [ns-symb]
+                                   (str &quot;document.write('&amp;lt;script&amp;gt;goog.require(\&quot;&quot; (munge ns-symb) &quot;\&quot;);&amp;lt;/script&amp;gt;');&quot;))
+                                 preloads))]
             (server/send-and-close conn 200
               (str &quot;var CLOSURE_UNCOMPILED_DEFINES = &quot; closure-defines &quot;;\n&quot;
                    &quot;var CLOSURE_NO_DEPS = true;\n&quot;
@@ -233,6 +237,7 @@
                    (when (.exists (io/file output-dir &quot;cljs_deps.js&quot;))
                      (str &quot;document.write('&amp;lt;script src=\&quot;&quot; output-dir &quot;/cljs_deps.js\&quot;&amp;gt;&amp;lt;/script&amp;gt;');\n&quot;))
                    &quot;document.write('&amp;lt;script src=\&quot;&quot; output-dir &quot;/brepl_deps.js\&quot;&amp;gt;&amp;lt;/script&amp;gt;');\n&quot;
+                   (when preloads (str/join &quot;\n&quot; preloads))
                    &quot;document.write('&amp;lt;script&amp;gt;goog.require(\&quot;clojure.browser.repl.preload\&quot;);&amp;lt;/script&amp;gt;');\n&quot;)
               &quot;text/javascript&quot; &quot;UTF-8&quot;))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is basically adding the compiler options to the repl environment, so they are available when generating main.js, then adding one goog.require per preload.&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14863/clojurescript-preloads-doesnt-work-with-just-cljs-main-repl?show=14867#a14867</guid>
<pubDate>Fri, 26 Dec 2025 20:13:53 +0000</pubDate>
</item>
<item>
<title>Answered: How to access non-jar artifacts (aar, zip) downloaded via tools.deps in build.clj?</title>
<link>https://ask.clojure.org/index.php/14862/how-access-non-jar-artifacts-aar-downloaded-tools-deps-build?show=14864#a14864</link>
<description>&lt;p&gt;In tools.build you can find these paths in the :libs key of the basis when you build it, so that would give you the path.&lt;/p&gt;
&lt;p&gt;You can then use &lt;code&gt;unzip&lt;/code&gt; in the tools.build api to help unzipping it. See &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.github.io/tools.build/clojure.tools.build.api.html#var-unzip&quot;&gt;https://clojure.github.io/tools.build/clojure.tools.build.api.html#var-unzip&lt;/a&gt;&lt;/p&gt;
</description>
<category>tools.deps</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14862/how-access-non-jar-artifacts-aar-downloaded-tools-deps-build?show=14864#a14864</guid>
<pubDate>Wed, 24 Dec 2025 18:03:56 +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>Answered: `(max &quot;x&quot; &quot;y&quot;)` used to return &quot;y&quot;, now it returns &quot;x&quot;</title>
<link>https://ask.clojure.org/index.php/14847/max-x-y-used-to-return-y-now-it-returns-x?show=14850#a14850</link>
<description>&lt;p&gt;The docstring of max implies that it should be used for numbers.&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14847/max-x-y-used-to-return-y-now-it-returns-x?show=14850#a14850</guid>
<pubDate>Mon, 22 Dec 2025 16:57:28 +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: `derive [tag] [parent]` accepts non namespaced keyword/symbol as `tag` ?</title>
<link>https://ask.clojure.org/index.php/14759/derive-tag-parent-accepts-non-namespaced-keyword-symbol-tag?show=14844#a14844</link>
<description>&lt;p&gt;Reading between the lines of this &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/clojure/commit/d49f0d32473d8387696049b8b10b8403d86e05e4&quot;&gt;commit message&lt;/a&gt;, it seems like the intent was to relax the requirements on namespacing for private hierarchies (so, required for global but not for private).&lt;/p&gt;
&lt;p&gt;Thus, I'm going to treat this as documentation issue in Clojure (presumably adding this constraint would break some existing code). Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2934&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2934&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Not sure on CLJS.&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14759/derive-tag-parent-accepts-non-namespaced-keyword-symbol-tag?show=14844#a14844</guid>
<pubDate>Mon, 15 Dec 2025 20:54:55 +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: Trying to extract vec from vec - conj not working?</title>
<link>https://ask.clojure.org/index.php/14838/trying-to-extract-vec-from-vec-conj-not-working?show=14840#a14840</link>
<description>&lt;p&gt;Thanks Harold. I see. &lt;/p&gt;
&lt;p&gt;For others coming here Harolds comment above is the answer (I don't know how to select it as the answer directly).&lt;/p&gt;
</description>
<category>Beginner</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14838/trying-to-extract-vec-from-vec-conj-not-working?show=14840#a14840</guid>
<pubDate>Mon, 15 Dec 2025 04:02:15 +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>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</link>
<description>&lt;p&gt;Stemming from a &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C03S1KBA2/p1765287690702079&quot;&gt;conversation on slack&lt;/a&gt;, I learned that &lt;code&gt;list&lt;/code&gt; is not a function created with &lt;code&gt;fn*&lt;/code&gt; but an instance of the class &lt;code&gt;clojure.lang.PersistentList$Primordial&lt;/code&gt;. This leads to inconsistencies, such as &lt;code&gt;(vary-meta list assoc :hello :world)&lt;/code&gt; throwing an error instead of returning an &lt;code&gt;AFunction&lt;/code&gt; with metadata. Reading through the git history, it looks like this approach was chosen very early (commit &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/clojure/commit/a0d9ca6b9746767376ef8546889d7c44a9332ba5&quot;&gt;&quot;made list return a PersistentList, not a seq&quot;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Is there a reason why this approach was taken versus a &lt;code&gt;create(ISeq args)&lt;/code&gt; overload like &lt;code&gt;vector&lt;/code&gt; and &lt;code&gt;hash-map&lt;/code&gt;?&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</guid>
<pubDate>Tue, 09 Dec 2025 15:18:48 +0000</pubDate>
</item>
</channel>
</rss>