Julia, the open-source programming language with a taste for science, turned 1.0 on Thursday, six years after its public debut in 2012. The occasion was presented on YouTube, live from JuliaCon 2018 in London.
Created by Jeff Bezanson, Stefan Karpinski, Viral Shah, and Alan Edelman, the language was designed to excel at data science, machine learning, and scientific computing.
That's a niche – a rather substantial one these days – also served by Python and R, among other languages. However, the Julia aspires to be better, undaunted by being ranked 50 on Tiobe's programming language popularity index for August 2018. For what it's worth, Python presently sits at number 4 while R comes in at 18.
Six years ago, Julia's creators framed their goals thus:
We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.
They're targeting perfection and, as might be expected, there's some work still to be done, particularly on how Julia copes with errors (exception handling).
In a julialang.org post announcing the milestone, the minders of the language claim to have achieved some of their goals.
Julia is fast, they say, and can target multiple platforms via LLVM. It implements a multi-dispatch design and comes with a standard library full of niceties like asynchronous I/O and support for parallelism. It's dynamically typed (for those who'd leave typing on autopilot) and optionally typed (for those who want to declare data types, but only at their discretion). It's usable either as general purpose programming language or as a technically-focused tool, thanks to its broad support for numeric data types.
The major achievement of version 1.0 is API stability. Previous version bumps included breaking changes. And 1.0 isn't guaranteed to work with pre-1.0 packages, either. But going forward, code written for Julia 1.0 should work with Julia 1.1, 1.2 and so on, at least until 2.0.
There's a new built-in package manager and support for missing values in datasets. The String type has been changed to allow it to survive arbitrary data. The language's broadcasting capability (useful for binary operations on arrays of different sizes) has been extended to custom data types. And support for named tuples has been added.
The full list of changes is documented in the 0.7.0 release notes – version 0.7 is being released concurrently with 1.0, the only difference between the two being the removal of deprecation warnings (useful for developers who need to update older packages). So this is really the 0.7 release. We won't say anything if you don't.
Julia (like any language) has both fans and detractors. Some people dislike the fact Julia indexes start at one (like Lua) rather than at zero (like Python, C, and just about everything else). However, it does offer the ability to change that. Flexibility appears to be one of Julia's virtues. ®