I have been playing around with the Julia programming language for about a week. I like it. It has a easy to read syntax, and makes sense.
What surprised me the most was after an afternoon I had submitted two PRs on GitHub for libraries in the HTTP stack. It’s not normally the case that I can get my head around a language that fast. Ok, my contribution was small, and I have by no means mastered the language.
(Edit) First of all I’d like to say how responsive and supportive the Julia community are. This is probably the most important point.
I like the syntax, for example:
Nice language features including:
- Destructuring assignment
- Callback functions have a slightly odd, but nice syntax
- Optional type system
- …lots more
The callback syntax looks like this:
Code is just in time compiled, and it feels like a scripting language from a developer’s perspective. You just point
julia.exe at your source code and you’re away.
Another oddity is string concatenation:
Anyway, any syntax looks odd until you get used to it.
There are a couple of ways (well there are lots actually) of importing modules. You can use
import. This confused me until I read the documentation.
using will take everything in the module, and add it to the scope.
import namespaces everything with the modules name. I still prefer the
require approach in node, but that’s just me.
Another things I like is that Julia uses libuv (and many other libraries) under the covers.
Julia takes ages to start. I know it’s still work in progress, and improvements are being made to cache the compiled code, but it just feels too sluggish.
I have also found small stability problems, and find that my console can lock up when exiting a program.
The julia process locks the source files, stopping you from editing them while the program is running.
The string implementation makes me a bit sad, I seem to be spending too much time worrying about whether I’ve got a
UTF8String or an
The package system is not up to standard.
All packages seem to be installed globally (you can tell your program to search elsewhere) but I prefer my packages to be installed alongside my application. This makes it easer to copy my application from one machine to another.
I haven’t quite got my head around how the package versioning works, but it looks like you pick one version of a package for the machine. I think this is a poor choice, when compared to node.js, which is able to support multiple package versions in the same application.
The package repository is a GitHub repo. This on the face of it is a good idea. It’s a public database that you can take a local offline clone of. My problem with it is that it has gatekeepers (who (may) approve your contribution). I found some resistance to contributing. This can be a good thing, maintaining a high level of quality is important, but if there’s too much of a barrier to package entry, I’m not interested thanks.
I’ll stick with it and report back.