I think LISP is cool and want to use it more but I have 0 appetite to learn the toolchain and debug etc for JVM. You have Racket but Clojure ecosystem is already tiny.
That’s a common misconception. JVM toolchain is way better than the hellscape that are most other language ecosystems. Maven, for example, works reliably and is rock-solid. The only unsolved problem is if you get two libraries/frameworks requesting another dependency, but with different incompatible versions. But I don’t think most other ecosystems solve that painlessly either.
Debug specifically is state-of-the-art. Look at YourKit, or any debugger included with common IDEs.
None of those tools has a shiny Visual 2025 aesthetic, but again, they work reliably and are going to work the same way a year from now.
Indeed, JVM and .NET are the only two major ecosystems out the whole Xerox PARC ideas[0], and the reason that to this day they are my two main workhorses, plus JS runtimes, because Web.
[0] - Technincally Objective-C and Swift could also be considered, but they lack the industry wide adoption, as many cool tools only exist in Apple land.
Swift is quite good. I assume the tooling is catching up to Objective-C. It has been a couple of years since I had to solve something with Swift.
Any reason, apart from outside requirements, to pick the .NET CLR over the JVM as a runtime in your experience? Outside of library/framework support, which I've heard is good with the CLR.
Leiningen and deps.edn shield you a bit from the awfulness of Java project management. They feel a lot more like something you'd see in Node.js or something, but it still gets dependencies from Maven Central.
Debugging and profiling is still somewhat Java based, and yeah that's can be irritating, but you get used to it.
Personally I do think that it's worth it; Clojure is a very pleasant language that has no business being as fast as it is, and core.async is an absolutely lovely concurrency framework if you can convert your logic into messaging, and you have Haskell-style transactional memory for stuff that can't be. So many problems become less irritating in Clojure.