I have developed a tiny web app in Clojure/ClojureScript and have written an overview here <http://notehub.org/2012/6/16/how-notehub-is-built>. In general, it was an exciting experience, but I also faced several problems with ClojureScript. For example, if you compile your code to JS, then the output file (in contrast to CoffeeScript) will contain other code (~18kb or so): this code contains the Google Closure libraries, which do a lot of stuff, like accessing the DOM elements. However, I found it *much* easier to use jQuery (through the jayq library written in ClojureScript). Hence, in my case, a lot of this additional code will be loaded for nothing. And the first-time load times are not negligible!
Furthermore, I did experience some performance problems with ClojureScript, which I didn't investigate further, so I'm not sure, that these problems hold in general. I did some per-character computations on a very large text and it took just too long for such a primitive operation. Since my code was quite high-level I assumed, that the GC of JS engine was choked. Now to your questions 1. I suppose you can't call any Java library from ClojureScript if you want > it to compile to JS. Can you call any Clojure library and have it > translated? > This is right, what is supported in ClojureScript is _almost_ everything what is supported in _native_ Clojure only, so don't expect things like Integer/parseInt or all String methods to work in JS! > 2. If I'd create a DSL with Clojure, could it be deployed to JS through > ClojureScript also? > If you manage to keep it platform-independent, then of course. However, even if you'll need some platform-specific calls, you can abstract them: I had a similar problem with my web app (the problem is described in my overview <http://notehub.org/2012/6/16/how-notehub-is-built>) when I needed a simple hash function, which would work on the client and on the server. The problem is that you run into the platform much faster, than you assume: JS (and therefore ClojureScript) has no chars, it doesn't produce overflows, the entire String API is different and so on. What I did, I just implemented my code with dependency injections in form of higher order functions injected as arguments. Such code can be run on the client and on the server with different platform-specific parameter. This was fun. > 3. One of my main concerns ... > I can't give more insightful answers as already given. I know the tooling is raw at the moment and that it'll get better overtime, > so I'm asking more about the fundamental problems that are hardly going to > be solved in the near time. > I think the only problem (if it is a problem at all), which won't be solved soon is ClojureScript's performance resulting from creating a lot of implicit objects in very high level computations. Something like (filter (map (reduce ... ... (map ...)))) can't be as fast and as memory-efficient for loops and in-place array operations of JS. In theory, the same holds for Clojure and Java as well, however, in contrast to ClojureScript, I never faced this problem on JVM yet. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en