Julia is aiming at Matlab while Clojure is aiming at JVM/Lisp. If you're used to using Matlab for scientific computation then at some point Julia will become a much better option. Much of their work is around lifting heavy numerical components up into the runtime which are wasted on a lot of the programming one would do in something like Clojure.
Julia isn't (currently) targeted as a general-purpose programming language, but there's nothing in the core language that's specialized for scientific computing. While the linear algebra libraries etc. are part of the standard library, they're either written in Julia or wrappers for external projects. Its closest relative in terms of paradigm is might be Dylan (http://en.wikipedia.org/wiki/Dylan_programming_language), which Apple intended as a lispy general-purpose language for the Newton. IMHO, making it useful in the domains where people use Clojure is really just a matter of library support (and whether you can tolerate 1-based indexing).
While that's true, I can't believe that given its numerical bent it'll take anything less than an incredible push to move it to a more general playing field.
Quite different. I think a good way to imagine Julia is as a science-flavoured Go with dynamic types.
Well, no, that's not quite right. Really, it's more like someone took Matlab and made it a real general-purpose language, and built it close enough to C to be generally fast, not just fast at a few things. Matlab actually has more in common with Clojure, being a JVM language.
Matlab is not a JVM language, it just has some ability to call Java built in, and some of the IDE is in Java implementation. Launch Matlab without booting a JVM: matlab -nojvm
I bought a Clojure book and started going through it, and I have some limited experience with ELisp and Racket. I really like lispy (is that even a word?) languages, so I tried to get into Clojure, also because I really like the ideas behind ClojureScript and the various libraries for it. So far, my experience has been mixed, I guess because I didn't read enough, or maybe it is my unfamiliarity with anything jvm-related (having never been a Java guy), as that's also something I constantly run into when I'm doing Scala.
I'll try to write a bit more in Clojure, but so far Julia felt easier to get into, and I really like the ability to use types so that stupid errors don't result in runtime issues.
There're way too many interesting languages these days :)
I'm acutally playing with Clojure and Julia right now and I'm running into the same problem. Never used Java and a lot of the Clojure material assumes you're coming with at least a little bit of Java background. That said Clojure is a much more mature language, Julia is still very new, its APIs are changing rapidly, etc.
Agreed about too many interesting languages though :)
There's a few threads on SO that try to summarize what you need to know if you haven't programmed in java before(and, yes, it's a decent amount), e.g. what a JAR is, classpath, -server vs. -client, -Xmx and Xms, GC options etc. Alternatively, ask on reddit, IRC or the mailing list
Not exactly a trivial task... Incanter uses several sizable Java libraries (such as Parallel Colt) under the hood, so a port would first need to either finding suitable replacements or re-writing that code as well.
Definitely not a trivial task--though it may be a worthy task. Incanter has moved from PColt to JBlas, and is moving toward core.matrix which will abstract the linear algebra stuff. If anything, I'd guess that Racket might be an easier ask than Clojure due to the JVM weirdness around boxing / unboxing of numbers passed to and from the underlying jblas (it's entirely possible I don't understand what I'm talking about re boxing / unboxing, though I've heard tell that the JVM makes some aspects of numerical work very challenging).
Comments
I don't know if you have any experience with it, but how would you compare it to clojure?
Julia is aiming at Matlab while Clojure is aiming at JVM/Lisp. If you're used to using Matlab for scientific computation then at some point Julia will become a much better option. Much of their work is around lifting heavy numerical components up into the runtime which are wasted on a lot of the programming one would do in something like Clojure.
I'd say they're pretty different niches.
Julia isn't (currently) targeted as a general-purpose programming language, but there's nothing in the core language that's specialized for scientific computing. While the linear algebra libraries etc. are part of the standard library, they're either written in Julia or wrappers for external projects. Its closest relative in terms of paradigm is might be Dylan (http://en.wikipedia.org/wiki/Dylan_programming_language), which Apple intended as a lispy general-purpose language for the Newton. IMHO, making it useful in the domains where people use Clojure is really just a matter of library support (and whether you can tolerate 1-based indexing).
While that's true, I can't believe that given its numerical bent it'll take anything less than an incredible push to move it to a more general playing field.
Shh! Don't tell anyone but all computing is numerical computing.
I... disagree. Strongly? In fact almost feel the opposite, that "numerical work" is a subset of computing.
What would you call a lambda calculus reducer numerically?
A De Bruijn reducer: https://en.wikipedia.org/wiki/De_Bruijn_index
Sure, but that's hardly numerical. It's algebraic.
Quite different. I think a good way to imagine Julia is as a science-flavoured Go with dynamic types.
Well, no, that's not quite right. Really, it's more like someone took Matlab and made it a real general-purpose language, and built it close enough to C to be generally fast, not just fast at a few things. Matlab actually has more in common with Clojure, being a JVM language.
Matlab is not a JVM language, it just has some ability to call Java built in, and some of the IDE is in Java implementation. Launch Matlab without booting a JVM: matlab -nojvm
I bought a Clojure book and started going through it, and I have some limited experience with ELisp and Racket. I really like lispy (is that even a word?) languages, so I tried to get into Clojure, also because I really like the ideas behind ClojureScript and the various libraries for it. So far, my experience has been mixed, I guess because I didn't read enough, or maybe it is my unfamiliarity with anything jvm-related (having never been a Java guy), as that's also something I constantly run into when I'm doing Scala. I'll try to write a bit more in Clojure, but so far Julia felt easier to get into, and I really like the ability to use types so that stupid errors don't result in runtime issues.
There're way too many interesting languages these days :)
I'm acutally playing with Clojure and Julia right now and I'm running into the same problem. Never used Java and a lot of the Clojure material assumes you're coming with at least a little bit of Java background. That said Clojure is a much more mature language, Julia is still very new, its APIs are changing rapidly, etc.
Agreed about too many interesting languages though :)
There's a few threads on SO that try to summarize what you need to know if you haven't programmed in java before(and, yes, it's a decent amount), e.g. what a JAR is, classpath, -server vs. -client, -Xmx and Xms, GC options etc. Alternatively, ask on reddit, IRC or the mailing list
http://stackoverflow.com/questions/5721496/learning-java-so-...
http://stackoverflow.com/questions/11358929/what-should-a-sc...
http://www.reddit.com/r/Clojure/comments/1ev4u5/what_do_i_ne...
Thanks! These look very helpful! I'm currently doing quite some Scala and the problems are very similar, so I bet that these will help me a lot.
Here's an idea: A port of Incanter to Typed Racket
Not exactly a trivial task... Incanter uses several sizable Java libraries (such as Parallel Colt) under the hood, so a port would first need to either finding suitable replacements or re-writing that code as well.
Definitely not a trivial task--though it may be a worthy task. Incanter has moved from PColt to JBlas, and is moving toward core.matrix which will abstract the linear algebra stuff. If anything, I'd guess that Racket might be an easier ask than Clojure due to the JVM weirdness around boxing / unboxing of numbers passed to and from the underlying jblas (it's entirely possible I don't understand what I'm talking about re boxing / unboxing, though I've heard tell that the JVM makes some aspects of numerical work very challenging).