clojurejs -- a Clojure (subset) to Javascript translator
I'm releasing clojurejs -- a Clojure library for translating a Clojure subset language to Javascript. The code is on github reachable at the following link:
http://github.com/kriyative/clojurejs
clojurejs is something I've been working on for a few weeks as part of a larger web app in Clojure. The code's a bit crufty (reflects my incremental discovery of the inconsistencies in Javascript), but functional and I wanted put something out there for people to check out. I welcome bug reports and feedback. It's been useful for my specific needs, and I'd be happy if it's even marginally useful to others.
I realize there are a number of other efforts to compile/translate Clojure (or other Lisp subset) to Javascript, but nothing quite fit my requirements, which prompted me to build clojurejs. Some useful aspects of clojurejs are:
- Consistent scoping in
letandloop/recurforms - Macros with
defmacro - Implicit
returnfrom all forms loop/recurtranslates to Javascriptforloops- Translates Clojure vectors, strings, keywords, symbols and maps to Javascript equivalents
- dot form access to methods and properties
Here's an example from the README:
(js
(defn join [arr delim]
(loop [str (get arr 0)
i 1]
(if (< i (length arr))
(recur (+ str delim (get arr i))
(+ i 1))
str))))translates to the following Javascript:
join = function(arr, delim) {
return (function () {
for (var str = arr[0],i = 1; true;) {
if ((i < arr.length)) {
str = (str + delim + arr[i]);
i = (i + 1);
continue;
} else {
return str;
} break;
}
})();
}