Julia recently announced the release of its latest version Julia 1.7. The new update comes with several enhancements and fixes to previous issues. Julia 1.7 now uses a much smaller state of the Xoshiro256 family of RNGs to put a state in every task and fork it on each task creation. This makes random numbers depend only on the task spawning structure of a program, and not on the parallel execution schedule.
Support for atomic access to mutable struct fields has been added to provide more efficient build blocks for working with threads via a set of @atomic macros and their corresponding generic functions. This work is based on the “Atomics Manifesto” that described how Julia envisioned threading to be a key part of the language’s future.
Sign up for your weekly dose of what's up in emerging technology.
The REPL has long featured “paste mode”, where a user could paste in an example session, such as the ones above, directly into the REPL; it would automatically strip out the prompts, recognize user input, and generally do the right thing. This has now been extended to all of the REPL modes (pkg, shell, and help) in addition to the normal mode; it even switches modes automatically based on the prompt string in the pasted text. In case a module is missing a docstring (not uncommon, especially with small packages), help will look around in the package directory for a README file and print the one closest to the module in question. In any case, it will print the list of exported names.
Whenever a user adds a package in Julia, the package manager (Pkg) writes out a TOML file called the “manifest” with the exact version of all the dependencies of that package. In version 1.7, a change has been introduced to this manifest format so that all dependencies are instead put under a common [deps] key. This frees up the global namespace so that a julia_version entry can be added. It also opens up the possibility of adding future useful data to the manifest. The ability to read such manifests will also be backported to Julia 1.6 and thus be in Julia 1.6.2 and forward.
This release comes with many type inference improvements. With these improvements, Julia 1.7 will more “smartly” infer types of your program and improve performance for free. Version 1.7 can propagate type constraints that can be derived from isa and === conditions inter-procedurally (i.e., across any function calls). Another remarkable improvement is more eager constant propagation. Julia 1.7 can substitute more runtime computations with pre-computed constants and eliminate dead code by resolving conditional branches at compile time.
Julia’s new version has also added syntax to enable writing for multidimensional arrays. This new syntax makes multidimensional arrays much easier to manipulate in Julia than they were before, and it compares favourably with the creation of multidimensional arrays in other languages.
Julia v1.7 is the first release that runs on Apple Silicon for the M1 family of ARM CPUs. Planning for this feature actually started more than one year ago, shortly after Apple’s announcement of their new chips. The Julia User & Developer Survey 2021 showed that 5% of Julia users were already running it on this platform before an official stable version for it was released.
You can download and check the new features of Julia 1.7 using the link here.