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. :) -- Abram Demski Blog: http://lo-tho.blogspot.com/ Leave anonymous feedback: http://www.admonymous.com/abramdemski
