5 ms·
> When revisiting old projects I have seen countless of Clojure dependencies having died in the meantime. I have replaced utility libraries with more recent uti
by krn 4y ago
> When revisiting old projects I have seen countless of Clojure dependencies having died in the meantime. I have replaced utility libraries with more recent utility libraries sometimes several times. Very annoying.
Yes, the "best in class" libraries change every few years in Clojure's universe, but they always bring huge improvements that require completely new APIs.
For instance:
https://github.com/plumatic/schema https://github.com/plumatic/schema -> https://github.com/metosin/malli https://github.com/metosin/malli
https://github.com/juxt/bidi https://github.com/juxt/bidi -> https://github.com/metosin/reitit https://github.com/metosin/reitit
https://github.com/bhauman/lein-figwheel https://github.com/bhauman/lein-figwheel -> https://github.com/thheller/shadow-cljs https://github.com/thheller/shadow-cljs
https://github.com/stuartsierra/component https://github.com/stuartsierra/component -> https://github.com/weavejester/integrant https://github.com/weavejester/integrant
https://github.com/technomancy/leiningen https://github.com/technomancy/leiningen -> https://github.com/practicalli/clojure-deps-edn https://github.com/practicalli/clojure-deps-edn
> So overall Clojure is in a strange situation. For picking it up on-the-job its not the responsible choice probably for most situations I work in. For my private tinkering the JVM dependency feels just a little too heavyweight. I don't see that Clojure will hit an inflection point of adoption in any way in the future that would make it a viable candidate for me to use at work.
I think about programming languages as tools for different bottlenecks.
– Computational: Rust
– Networking: Go
– Business logic: Clojure / Python
And for many people Python has everything that Clojure is missing: a very low barrier to enter, and a very stable and well-documented ecosystem of frameworks and libraries.
- huahaiy 4y ago"very stable" and python in the same sentence? I am not sure about that.
- krn 4y agoWhat I meant, is frameworks like Django, Flask, and PyTorch. Also, libraries like Pandas, SciPy, and NumPy. That's what Clojure is missing the most for an average software engineer: simple and easy choices, that can remain relevant for decades.
- huahaiy 4y agoSo what you mean by "stable" is in the names only, but not in substance. What I mean by stable, is that my code remains working after I upgrade the dependencies, which is definitely NOT the case for python frameworks, but it is mostly the case for Clojure libraries. In Clojure, Web related things have remained relevant for a long time as well. For example, I do not anticipate that the standard things such as Ring, Reagent, Re-frame, etc. are going to change any time soon. If you have not used Clojure, you just have not experienced what a stable ecosystem looks like. You have too used to changing your own code just because of a dependency bump. This is very rare in the Clojure world, but a norm outside.
- krn 4y agoYes, these are two different meanings of "stable". In Clojure, "stable" means that your code remains working after the upgrades of its dependencies. In Python, "stable" means that the dependencies themselves remain upgraded. I am not suggesting that one thing is better than the other. What I meant, is that one thing is more attractive than the other for an average developer. Currently, there are very few Clojure libraries from a decade ago that are still being actively maintained today.
- huahaiy 4y agoClojure itself is not much more than a decade years old. Even that, there are quite many libraries that have stayed all these year, e.g. the standard things I mentioned, such as Ring, Reagent, etc. As I have already mentioned, "actively maintained" is not a requirement for many Clojure libraries. Many are just done, as in "nothing needs to be changed". As long as they are still working, why do you want to update them? As I mentioned, many production code bases in Clojure contain libraries that have not been updated for ages, but they still work. Why fixing things that are not broken?
- wirrbel 4y agoDo you want to back that up with something else than the Python2-to-3 migration? Python 3.4 was released in 2014 and ever since stability was never an issue for me.
- huahaiy 4y agoOf course. I have plenty of cases when working django, flask, and tensorflow code stop working after bumping the dependency versions. In fact, it is rare that I do not need to change code after I upgrade python dependencies. Most likely I have to change my code.
- mdemare 4y ago> I think about programming languages as tools for different bottlenecks. I’m going to steal this!
- cutler 4y agoDon't forget Clojure's libpython.clj. There's also Hylang which was inspired by Clojure.