Clojure conditional feature reader

I’ve been experimenting with tagged literals and data-readers to create what I’m calling a “conditional feature reader”. The basic element is the condf tag, which works sort of like cond but the tests are “feature requirements”. A feature requirement can be something like clj1.5 (meaning Clojure 1.5) or java1.6+ (meaning JDK 1.6 or greater). For example:

(println #feature/condf [(and jdk1.6+ clj1.5.*) "Ready for reducers" else "No reducers for you."])

I’ve only implemented it for regular Clojure 1.4 and 1.5 (on the JVM), but I’m hoping it might prove useful for other variants such as ClojureScript.

For more details, see:

Moving away from Noir

Anthony Grimes (Raynes) reports on the deprecation of Noir for Clojure web apps:

Chris and I discussed this last night, and we decided that it???s time to deprecate Noir and ask that people focus on Compojure instead. The good news is that you don???t have to give much of anything up if you move to Compojure! A while back when I started moving my own sites to Compojure, I took most of the useful libraries that were embedded in Noir and I split them out into a new library that you can use from Compojure! lib-noir is the legacy of Noir. The best thing that came out of it. It has all the useful stateful sessions, flashes, cookies, as well as the other useful libraries. In fact, the latest release of Noir depends on this library so if you???re using it, you???re already secretly using lib-noir!

For new websites, please use Compojure and lib-noir. This is pretty much just as batteries included as Noir itself ever was! You just have to learn how to write routes with Compojure. It???s easy and just as concise as it was in Noir. You don???t have to use ring-jetty-adapter and stuff, just use the lein-ring plugin to start your server.

Related links: