How do I specify in Quicklisp the exact version of the lib that I want to download? How do I specify what are my dependencies and what are my dev-dependencies?
Quicklisp works differently: it gives you a consistent set of libraries. If you want to get the library with some exact version (which may be inconsistent with the current quicklisp dist), you can download it separately and use at your own risk. (And quicklisp will quickload it as well, because it gives preference to local libraries - nice :)
This isn't ideal, but here you have to make some trade-off, because in both Java and Lisp you can't have two versions of the same library loaded at once (actually, in Lisp you can do that with some rename-package trickery, but that's beyond the scope of quicklisp. I wonder, can you do the same thing in clojure? ;)
Considering specifying dev-dependencies. Once again it's not in the scope of quicklisp, which is a library distribution tool and not a dependency management tool. But ASDF, the build tool and dependency management system, allows to do that quite easy: for example, you can define a separate system for dev, which you may load or not load, depending on your needs.
Actually, leiningen tries to do all at once: dependency management, library distribution and building. And that's why it's quite complicated (in the sense of Rich Hickey's complecting, I mean)...
In Clojure you can also play with namespaces to have multiple versions of your code for use. But for the JVM there is also OSGi which is a modular system which the CL world completly lacks. It allows loading and unloading of modules at runtime, and you can have multiple versions of your code available in one JVM. So in this case the JVM is years ahead, and CL will probably not offer this too soon, at least not for professional use.
The thing is: the CL world currently lacks a comparable mechanism. We work with CL and CLJ, and we spend much more time getting builds done in CL, because we need several tools, and integration into Jenkins is also more difficult and tiresome.
This is no argument against the CL language qualities, but about tooling.
I am also not aware of repository managers for CL. Several of our libs have to be managed manually. Our CLJ libs however we can simply store in our private repo proxy. For other devs it is nothing more than a dependency they add in Leiningen and be done with it. It is trivial to set this up in Jenkins, which automatically uploads relevant artifacts into the repo. This is a fantastic and productive environment,
Bundled with greater productivity in Clojure I would start new projects today pretty much always with Clojure, not CL anymore. Though CL is still interesting to study for newcomers to Lisps.
9 comments
[ 4.5 ms ] story [ 28.7 ms ] threadhttps://github.com/technomancy/leiningen/blob/master/test_pr...
This isn't ideal, but here you have to make some trade-off, because in both Java and Lisp you can't have two versions of the same library loaded at once (actually, in Lisp you can do that with some rename-package trickery, but that's beyond the scope of quicklisp. I wonder, can you do the same thing in clojure? ;)
Considering specifying dev-dependencies. Once again it's not in the scope of quicklisp, which is a library distribution tool and not a dependency management tool. But ASDF, the build tool and dependency management system, allows to do that quite easy: for example, you can define a separate system for dev, which you may load or not load, depending on your needs.
Actually, leiningen tries to do all at once: dependency management, library distribution and building. And that's why it's quite complicated (in the sense of Rich Hickey's complecting, I mean)...
I don’t like ASDF. It feels ugly.
Actually Leiningen defers dependency management entirely to maven/aether and distribution to Clojars.
I am also not aware of repository managers for CL. Several of our libs have to be managed manually. Our CLJ libs however we can simply store in our private repo proxy. For other devs it is nothing more than a dependency they add in Leiningen and be done with it. It is trivial to set this up in Jenkins, which automatically uploads relevant artifacts into the repo. This is a fantastic and productive environment, Bundled with greater productivity in Clojure I would start new projects today pretty much always with Clojure, not CL anymore. Though CL is still interesting to study for newcomers to Lisps.