The language has been designed by experienced and mature people and doesn't go through "let's throw everything out and start again" phases like so many other languages do.
Swift was designed by highly experienced and mature compiler devs and is notorious for making breaking changes. It's just a difference of opinion. I prefer to suffer the occasional upgrade pain in exchange for clean and consistent APIs. And I totally understand those who don't want to deal with that.
Although to be fair to them, Swift is much younger than Clojure and the number of breaking changes has steadily declined with each major release. In seven years maybe they will take the backwards compatible approach too.
"Compiler devs". I think that is exactly my point. I should have said "app developers" or "system designers". If you listen to a Rich Hickey talk, you'll see that he is all about Getting Things Done in the real world, and much less about theoretical concepts. Language design is subservient to app developer needs.
I've got a Clojure book with a spirited defense of why it's good that the simple symbol + just does what you'd expect instead of throwing exceptions based on an implementation detail, and it kind of falls flat now.
New macros can very well be prototyped and battle-hardened in external libraries before being added to core.
More complex things still present you with overly complex errors, but with some painless repl usage it's way easier to figure out things now.
Kudos.
Nice work everyone!
For me personally, I think Clojure (or any lisp) targeting Go would be awesome.
The JVM lacks a killer Go "feature" which is _native binaries/easy deployment. Common lisp and many other lisps lack community which is why I think Go+Lisp would make a great combo. Go, even though it is a new language, already outpaces (a much older) Common Lisp as far as libraries go due to the huge community Go has.
I know there is `zygomys` but it doesn't reach Clojure popularity/maturity.
Can Clojure target Go?
Edit:
Maybe it is infeasible but I think targeting JVM, Go, and JavaScript would give Clojure a ridiculous advantage over almost any current programming language.
It can turn a Clojure app into a single executable with excellent performance and memory characteristics.
All major commercial JDKs have such support, e.g. PTC, Aicas, IBM J9, IBM RealTime WebSphere, Imsys, Excelsior JET.
Additionally OpenJDK has been integrating such support since Java 9 via Graal and GraalVM.
It's a Clojure dialect written in Go. Currently, its mostly used as a linter but you can also do programming/scripting.
The JVM /= Oracle JVM by the way. There is OpenJDK
EDIT: Also I think recent Java releases have gotten into making self contained binaries (which just means they package the JVM...it's in there, it might jump out and bite you!). But, as long as you are careful what you are shipping, packing up a JVM has always been an option
Kotlin has Kotlin/Native, so I was hoping there might be a similar initiative for Clojure. But, a few reasons:
* Startup time
* Ability to deploy/share a binary
* The JVM just seems so "heavy" to me. It's certainly the only language runtime I know of that runs a persistent helper app, or asks to install an Ask toolbar upon installation.
* Bias against Oracle and Java
> Also I think recent Java releases have gotten into making self contained binaries
TIL, thanks.
Edit: edited.
no, it typically doesn't. in certain edge cases the JVM does out perform Graal though.
Can do NodeJS with Clojure a’la Clojurescript as well
Most lisps allows such live repls for debugging like Scheme and Emacs lisp, while clojure only provides a stacktace on exception, and not a repl.
The emacs based tooling had too many components, and is very brittle, ie, a minor version bump in one of the component often renders the whole build/repl process unserviceable.
Usage of local jars is extremely difficult, you need to setup a local maven repository and then add dependencies through it, which is a very painful process, esp for hobby projects and prototyping. I should be working on my problem not wrangling with maven.
Clojure bundles tools.deps since 1.9, and it works great. cljs and figwheel already supports it, as do many others. I prefer it to leiningen, but YMMW.
I use emacs to develop clojure, never had any problems with it :/
> Usage of local jars is extremely difficult, you need to setup a local maven repository and then add dependencies through it, which is a very painful process, esp for hobby projects and prototyping. I should be working on my problem not wrangling with maven.
tools.deps makes this very easy.
Sadly tools.deps lack the support for reading credentials from a gpg/pgp-encrypted file: https://dev.clojure.org/jira/browse/TDEPS-9 This is a shame as I rely on this to keep repository credentials safe. I'm not a fan of the maven master password system.