For example, the latest vesion of Compojure (1.1.3) uses Ring 1.1.5 and not the latest version of Ring (1.1.6) which has significantly better util functions available - but I can't use them until Compojure catches up.
I've been experimenting with Clojure web services recently, and posting the work on GitHub and my blog.
When putting this test app together, it occurred to me that most other languages have a full-stack API available which makes life easier when it comes to making decisions about which libraries/APIs/frameworks to use. It also reduces the possibility of "impedance mismatch" between the libraries. For Java, you can use Spring (or any one of a dozen or more other popular frameworks), for Scala there's Typesafe, and so on. Clojure has Compojure, Ring, several logging, validation and database libraries, and they can be used together but they don't constitute a coordinated full stack - and that creates issues.
For example, the latest vesion of Compojure (1.1.3) uses Ring 1.1.5 and not the latest version of Ring (1.1.6) which has significantly better util functions available - but I can't use them until Compojure catches up. By the time you add logging, validation, data access, etc the odds of a mismatch between these libraries goes up dramatically.
This is a concern, because these mismatches must be worked around in my code and are likely to break as the libraries are upgraded in future versions. So, I'm having to spend my time maintaining what are essentially "patches" for third-party libraries just so that they work together.
Now, it may not be the best decision to try to put together a true full-stack framework from scratch, but is it worth choosing a bunch of existing frameworks and coordinating their releases - in much the same way as Eclipse coordinates plugin releases for major releases - so that putting together a full-stack app becomes easier?
Projects taking part in the "meta-project" will work together to harmonize their functionality & APIs, and coordinate their development cycles & releases so that the meta-framework remains consistent and easily usable.
Is this another barrier to adoption the Clojure community can remove? Is this even a barrier? Am I missing something?
Thoughts?
[Also posted to http://www.reddit.com/r/Clojure]
I'm somewhat allergic to ORM, favoring thin, simple data mappers instead :)
There is, however, value in curated sets of independent libriaries that work well together. Also in having declarative syntax available for common tasks.Still IMO, Clojure's web story is still somewhat lacking on those. More specifically in in environment integration, since ring does a great job for binding application components.
Is there a page that gives "Clojure web recipes"? It would be great for beginners if you could have one place that says "To make a web app, you need X, Y and Z, and here are libraries that fulfil each of these needs."