In case anyone is interested in its ideas but is stuck with JavaScript, you may be interested in a vanilla JavaScript port I've been (very sporadically) working on: https://github.com/davezuko/re-frame. It's incomplete, and definitely lacking in many areas (documentation being the obvious one), but perhaps somebody will find it useful or want to contribute back. I've personally been using it in some internal apps for a while now.
> It's a pernicious accident of history that we are taught to accept references to mutable objects as normal, inevitable, and desirable in most CS curricula. It is much easier to develop, debug, and maintain immutable data structures instead
Except for trees and graphs and the like. immutability makes working with these much more complicated.
most of the alogrithms and datastructures that you learn in CS were developed using mutability.
I am not sure that we can even develop immutable equivalents for most of them with similar time/space complexities.
- instaparse: takes EBNF (and other formats) as a string and gives you a parser instantly (!!!) https://github.com/Engelberg/instaparse
- re-frame: React-Redux alternative that IMO is much easier to work with https://github.com/day8/re-frame
- reagent: React wrapper https://reagent-project.github.io/
- ring https://github.com/ring-clojure/ring
- fulcro https://github.com/fulcrologic/fulcro
More than any library, though, what keeps bringing me back to Clojure is its incredibly blissful set of persistent data structures. It's a pernicious accident of history that we are taught to accept references to mutable objects as normal, inevitable, and desirable in most CS curricula. It is much easier to develop, debug, and maintain immutable data structures instead, and I consider my good fortune every time I get to debug something in Clojure rather than in some reference-laden OOP soup.