mori
react-matchstick
Our great sponsors
mori | react-matchstick | |
---|---|---|
5 | 1 | |
3,388 | 1 | |
- | - | |
0.0 | 0.0 | |
almost 4 years ago | about 2 years ago | |
Clojure | JavaScript | |
- | Eclipse Public License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
mori
-
Om but in javascript
immutable-js or mori for immutable data structures
-
How to handle "mutable state" in a pure functional way
Use persistent immutable data structures (as implemented in, for instance, mori or Immutable.js) to represent the state. As much as possible, push calculations into referentially transparent functions (i.e., input depends purely on output) which take persistent data. Write the interactions with the real world in imperative style.
- Understanding Clojure's Persistent Vectors (2013)
-
Immutable.js is not dead!
Mori
-
Functional Programming with Javascript | Introduction
Always make immutable variables. You can achieve this by having a persistence data structure using Mori or immutable.js libraries to open the features such as linked list, trees, path dealing to help with efficiency. I will not be covering how to create a persistence data structure using those libraries as it’s not the scope of this post.
react-matchstick
-
Understanding Clojure's Persistent Vectors (2013)
My experience with ImmutableJS was to remove it and see performance go up by a factor of 100-200.
https://github.com/mschaef/react-matchstick/commit/070802b69...
This was something of a worst case scenario (and it was five years ago, so presumably things have gotten better) but it still underscores the need to carefully consider these tools before adopting them. Do they really offer enough (to your application) to be worth the associated costs in readability, performance, etc.
If the goal is to prevent mutation, maybe there are better ways to do that. If the goal is to really accelerate, it's worth testing. (At the very least, Clojure's vectors seem unlikely to provide a benefit if you're working with vectors of len<32.)
What are some alternatives?
immutable-js - Immutable persistent data collections for Javascript which increase efficiency and simplicity.
nim-persistent-vector - Implementation of Clojures persistent vector in Nim for easy immutable lists.
Immer - Create the next immutable state by mutating the current one
vector - A persistent list experiment
ramda - :ram: Practical functional Javascript
lodash - A modern JavaScript utility library delivering modularity, performance, & extras.
underscore-contrib - The brass buckles on Underscore's utility belt
buckets - A complete, fully tested and documented data structure library written in pure JavaScript.
Index - ⚡ Pattern Matching in Typescript
lazy.js - Like Underscore, but lazier
hjson-js - Hjson for JavaScript