Julia devs keep up momentum with 1.1 release

Julia devs keep up momentum with 1.1 release

Julia’s developers recently released version 1.1 of the general-purpose programming language making it more consistent for its growing user base.

Julia, which hit the big 1.0 signaling production readiness in August 2018 – a good six years after its first public appearance – was initially created with linear algebra, scientific computing, machine learning, distributed and parallel computing in mind. Although often used in more academic environments, it can also be found in high-profile environments such as banking and insurance, where it is mainly utilised for model computation for simulations.

A recent investigation of machine learning projects on GitHub saw the language amongst the top 10 most used in the field – although the significance of that might seem questionable, given that not everyone will take their secret ML sauce to the platform.

One of the biggest signs of appreciation for Julia to date has to be the awarding of creators Jeff Bezanson, Stefan Karpinski, and Viral B. Shah with the J.H. Wilkinson Prize for Numerical Software which was announced in early January. The presentationwill take place in late February 2019. Since 1991 the prize has been jointly presented every four years by the Argonne National Laboratory, the National Physical Laboratory and the Numerical Algorithms Group. Honourees include the initial authors of FFTW, a C library for computing discrete Fourier transforms.

The most current version is 1.1 which saw the addition of  .~ as an infix operator as well as an experimental macro for returning a dictionary of current local variable names and values. It also introduced an exception stack, to facilitate the throwing of exceptions while handling an exception and fix problems with task switching in the process.

Besides that, the Julia team used the 1.1 release to make the language more consistent, disallowing spaces in broadcast call syntax, and treating parser inputs ending with comma as incomplete. To align findmin(::BitArray) and findmax(::BitArray) with other array types, they now return a CartesianIndex for matrices or a higher-dimensional arrays. The same is true for findall(in(b), a) which starting in v1.1 returns a CartesianIndex when a is a matrix or a higher-dimensional array so that it is consistent with other findall methods.

If the same name is used for both a local variable and a static parameter Julia 1.1 throws an error instead of a warning, and method signatures such as f(::Type{T}, ::T) where {T <: X} are considered ambiguous to let transitivity hold for all convert methods. Additions to library functions include one to split file paths into their components, a way to get the declared types of the fields in a specified type, and some predicates to detect BSD systems and check whether an argument is nothing.

There have also been a number of changes to the standard library which should turn out to be quite useful: for example do channels now convert inserted values to match, Regex behaves like a scalar when used in broadcasting, range accepts the stop value as a positional argument, diff can work with arrays of arbitrary dimensionality and operate over any dimension, and Base.tail works with named tuples. Once updated, CartesianIndices can be constructed from two CartesianIndex values I and J via I:J, they also support broadcasting arithmetic with a CartesianIndex.

More information can be found in the news file connected to the release.