Julia 1.7では、新しいスレッド機能、新しいパッケージマネージャー機能、型推論の改善、新しい構文機能など、多くの重要な機能が強化された。これは、Apple Siliconでネイティブに実行される最初のリリースでもある。
Juliaは最近のリリースで、マルチスレッドプログラムをより適切にサポートするために多くの進歩を遂げてきた。Julia 1.7では、言語ランタイムの多くの競合状態が修正され、デフォルトの乱数ジェネレーターの設計が改善されることで、よりスレッドに適したものになっている。最も重要なことは、Julia Atomics Manifestoで説明されているように、プリミティブ言語機能としてアトミックのサポートが加わったことだ。
Juliaのアトミックの基礎は@atomic
マクロだ。これを使ってどのような式もマークすることができ、それによってコンパイラがそれをアトミック式として書き換えることができる。たとえば、y = @atomic a.b.x += 1
と記述すると、a.b.x
にアトミックにアクセスしてインクリメントできる。アトミックで使われる他のマクロは、@atomicswap
と@atomicreplace
である。
アトミックはアトミック性に対する低レベルの基盤を提供する。アクター、並列トランスデューサーなどのスレッドセーフな抽象化を構築するために使うことができる。
前述のように、Julia 1.7は型推論も改善している。推論のパフォーマンスに関してメリットを提供する。特に現在、Juliaは、特定の型制約を関数呼び出し全体に伝播できるようになっている。例えば、ユニオン分割シグニチャの定数に対する条件付き制約、invokeを介した呼び出しにおける定数などだ。また、より多くのランタイム計算を事前に計算された定数に置き換えることで、コンパイル時に条件分岐を解決することもできる。
ツールについては、Julia Package Managerは、REPLにロードしようとしたときに、使用可能だがインストールされていないパッケージを自動的にインストールできるようになった。これは、REPLでの素晴らしい開発者エクスペリエンスの改善である。さらに、マニフェストフォーマットが新しくなり、Juliaバージョンの指定できるようになった。それは、マニフェスト自体にリストされているパッケージすべてをインストールするために使用される。これにより、同じマニフェストで言語バージョンを混ぜたときにPkg
がユーザに警告できるようになる。そのため、たとえば、新しい言語バージョンであるパッケージの最新バージョンが必要で、そのパッケージが以前の言語バージョンによってインストールされていた場合に競合が発生する可能性がある。
言語レベルでは、Julia 1.7には、多くの新しい構文機能も含まれている。例えば、文字列内に改行を埋め込んだり、プロパティの名前に基づいてオブジェクトを分解したり、多次元配列リテラルを定義したりする機能などだ。多次元配列の場合、たとえば、次のように2つの2x2行列のベクトルを記述できる。
[1 2 ; 3 4 ;;; 5 6 ; 7 8]
最後に、Julia 1.7はApple Siliconをネイティブにサポートする最初のJuliaリリースである。ただし、実験的なものである。
Juliaは、数値解析と計算科学を特に目的とした、高水準で動的な汎用プログラミング言語である。その主な基本原則は、動的計画法のコンテキストにおけるパラメトリック多態性、別名ジェネリックプログラミング、そして多重ディスパッチである。