Julia is a new language that promises (or threatens) to take the best of all existing languages and put them into one fantastic package.
As a Python fan I found the syntax immediately appealing and familiar. However there are a number of Python niggles that appear to be improved in Julia.
Don’t like significant whitespace? Julia is using a end keyword.
function add(x, y) x + y end
Find Python’s keyword initialising rule counter-intuitive? Julia re-initialises on invocation.
function test_init(a, b = [1])
println(a, b)
push!(b, a)
println(b)
end
test_init(5) # Prints 5, 1, 1, 5
test_init(7) # Prints 7, 1, 1, 7
Wish that sequence operations were more consistent?
a = [1, 2, 3] # 3-element Array{Int64,1}: (via type inference)
shift!(a) # 1
pop!(a) # 3
Julia also comes with a shell which has all the niceties of ipython.
Julia is typed but so far the inferencing for primitives has been good enough. For collections you only seem to need a type declaration if the collection is initially empty.
Julia is also trying to do a lot with parallel processing and performance. I haven’t looked into that so much because that isn’t my usecase but so far the requirements for efficient typing aren’t causing any ceremony in the code. There is also some innate immutability in things like tuples but apart from that it is mutable by default with an immutable keyword applied to data structures that allows compiler and GC optimisation.
So Julia is a language that is immediately accessible to all Pythonistas, currently has less surprises than Python and is typed but enough inference to avoid them getting in the way. Pretty exciting!
Looks cool
Does Julia have any notable built-in mechanisms for things like library packaging? Independent environments? Distribution of executables? I see there are some lovely looking OpenGL bindings. 🙂
Good questions, the package system seems to have taken a leaf out of the Go book and you can specify git repository urls. Packages also seem to be resolved locally like NPM rather than globally.
I haven’t found a good environment manager yet, although if I am right about the packages then you shouldn’t need one, which is nice.
I’ll have to look into the executable thing, not my use case.