See also LispyScript (http://lispyscript.com/), “a JavaScript with Lispy syntax and macros”.
Like Ki, it requires inclusion of a standard library. Unlike Ki, it does not provide alternative data structures in addition to native JS values; it only uses native JS values. LispyScript also does not support embedded JavaScript or being embedded within JavaScript. But LispyScript currently has better docs, including a page to try it in the browser (http://lispyscript.com/tryit/).
I agree, LispyScript is very neat, closer to a full-fledged language than ki. On the other hand, ki is focused on ClojureScript's immutable data structures and related idioms - in fact it's just a thin layer around those.
The main difference is structural sharing: I can update a Clojure map with a new value, which will create another map that shares the vast majority of the data with the former map. With plain JavaScript, you'd have to clone your object, update it and freeze it again. In addition Clojure/ClojureScript/mori offer a whole API designed to leverage immutable data structures.
Comments
See also LispyScript (http://lispyscript.com/), “a JavaScript with Lispy syntax and macros”.
Like Ki, it requires inclusion of a standard library. Unlike Ki, it does not provide alternative data structures in addition to native JS values; it only uses native JS values. LispyScript also does not support embedded JavaScript or being embedded within JavaScript. But LispyScript currently has better docs, including a page to try it in the browser (http://lispyscript.com/tryit/).
I agree, LispyScript is very neat, closer to a full-fledged language than ki. On the other hand, ki is focused on ClojureScript's immutable data structures and related idioms - in fact it's just a thin layer around those.
Can anyone enlighten me to the difference between Clojure-like immutability and Object.freeze()?
The main difference is structural sharing: I can update a Clojure map with a new value, which will create another map that shares the vast majority of the data with the former map. With plain JavaScript, you'd have to clone your object, update it and freeze it again. In addition Clojure/ClojureScript/mori offer a whole API designed to leverage immutable data structures.
also JavathScript http://kybernetikos.github.io/Javathcript/