Hi all!
I've been using Julia for a little over a month now, and I thought it would be fun/informative to write a little post about my experience.
I'm mostly a Common Lisp guy. I write AI code in an academic setting. However, I recently became enthusiastic about Clojure and was trying to start a project in that.
Indecisive as usual, I continued poking around looking for the best programming language to do the project in, even as I became fairly committed to doing it in Clojure.
I had heard about Julia some time ago (looked at it very briefly), but looked at it a second time when a friend mentioned it on twitter earlier this year.
Looking at it again, I realized that:
1) Julia is "essentially a Lisp", IE, it is homoiconic (despite not appearing so) and has the metaprogramming capabilities I am used to. (I don't need these often, but if a language lacks it, I feel like I'm missing an essential tool.)
2) Julia's type system and multiple dispatch capabilities give me much of what I liked about Clojure's multimethods and protocols.
3) Julia is significantly faster (at least for many things).
I decided to start hacking out my project in Julia, abandoning the Clojure code I had started.
After using it for a bit, I feel like it's been much easier to pick up what I need to know than it was with Clojure. Both Julia and Clojure have the deep, elegant stuff I like in a programming language; however, it seems like Clojure creates a rich, interlocking set of concepts which you must learn in order to write very much code, whereas Julia has a gentle learning curve, facilitating "normal" programming and allowing the user to learn the deeper features as they become useful. At least, that's been my feeling.
Monkeying around with the metaprogramming has taught me that it's a bit less convenient than Lisp. Thinking about expr.head and expr.args is not as intuitive as composing expressions as lists, I think. It's not a big obstacle, though.
I've also found it a bit annoying that array access is not the same as function application, again a feature of Clojure. Being able to treat arrays and dictionaries as functions is convenient for certain higher-order functions like map.
Overall, although I admit I'm judging Julia by Lisp/Clojure standards, it comes out rather favorably. :)
--