4 ms·
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 exce
by thomasvarney723 10y ago
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.
- jgalt212 10y agoAll of the above is good except for transducers. They are a necessary hack in Clojure because the data is immutable running a large number of functions across changing data is rife with overhead in Clojure. So the hack is mutate the code many times, so you only have mutate the data once.
- thomasvarney723 10y agoI see what you mean and although the definition of a from-scratch transducer looks a bit ugly to me, the idea of composing existing transducers together seems rather elegant.