| Though I likely haven't completely understood each of the authors gripes, each problem to me seems to have a notable solution provided by Clojure (with the exception of tail-call optimization). Clojure: is compiled to JVM byte-code and is fast. has a good parallelism story (parallel map, parallel fold, channels) is almost completely backwards compatible. has a sequence abstraction that leverages the same operations over many different types (string, vecctor, list, set, map, etc.). has a standard compose function. has reduce, map and filter in the standard library. Transducers (also first class) further extend their usefulness. 's closures allow statements and there's even sugar for annonymous functions. has macros to reduce boilerpate. has a conditional macro. I'm sure this list isn't unique to Clojure but I'm most familiar with it. |