概要

Julia言語の開発チームは9月10日、最新メジャーバージョン「Julia 1.13」のリリースハイライトを公開した。今回の目玉は開発体験に直結する速度改善で、パッケージのプリコンパイル時間はJulia 1.12比で約30%、LTS版の1.10比でも10〜20%短縮された。起動時間も1.12比で約20%高速化しており、実測値では平均69.1ms±1.0msから56.7ms±0.5msへと1.22倍の改善を確認している。これらの数値は39個の実世界ワークフローの計測に基づくもので、プリコンパイル・読み込み・実行時間のそれぞれを個別に最適化した結果だという。改善作業はJuliaの開発プロセスに継続的に組み込まれており、専用のトラッキングサイト(perf.julialang.org/ttfx)で今後も推移を追跡していく方針だ。

ガベージコレクションとハッシュ関数の刷新

今回のリリースで特に効果が大きいのが、ガベージコレクション(GC)まわりの最適化だ。イメージに組み込まれたオブジェクトのマーク処理をスキップする改善により、あるベンチマークでは0.035493秒から0.000528秒へと約67倍の高速化を達成した。実際の開発ワークフローでも効果は顕著で、Reviseパッケージ読み込み後のフルGC実行時間は50msから11msへ、GLMakie読み込み後は187msから68msへとそれぞれ大幅に短縮され、あるワークロード全体に占めるGC時間の割合も79.80%から44.32%に減少している。あわせてハッシュ関数もMurmurHash3から「RapidhashNano」へと刷新された。ストリーミング方式を採用したことで事前に長さを取得する必要がなくなり、実装もC言語からJulia純粋実装に置き換わった。長い文字列のハッシュ計算では1.12の8.555μsから1.13では1.742μsへと約4.9倍高速化している。なお新しいハッシュは非暗号学的なものであり、カスタム型向けのメソッドを実装する際は常にseedパラメータを受け取る設計になっている。

REPLと開発体験の強化

対話環境(REPL)にも複数の改善が加えられた。構文ハイライトが標準搭載され、保守的な配色をデフォルトにしつつMonokaiなどへのカスタマイズも可能になった。また履歴検索にはfzf風のファジー検索が導入され、複数候補からの選択やREPLモードの表示、構文ハイライトにも対応する。Windows環境では括弧の自動補完を意識したペースト処理が改善され、数百行規模の関数を貼り付ける際の使い勝手が大きく向上したという。このほか、再帰関数内で自分自身を参照できる@__FUNCTION__マクロや、トップレベル評価の進捗を表示してハングの診断に役立つ--trace-evalフラグ、型注釈付きで@whichのような内省をスタックトレースから直接利用できる機能なども追加された。ビルドツールのjuliac.jlも正式パッケージ「JuliaC.jl」として独立し、ファイナライザやmapreduceなどのさらなるコードトリミングに対応している。

パッケージ管理とインストーラの改善

パッケージマネージャPkgも複数の点で強化された。パッケージレジストリの圧縮方式がgzipからzstdに変更され、圧縮率と解凍速度が向上した(Plots・Makie・ModelingToolkitパッケージのダウンロードで307.99MBから239.31MBへ、解凍時間は8.77秒から5.50秒へ短縮)。レジストリ処理とリゾルバの最適化により、Plotsパッケージを追加する際の所要時間も1.257秒から0.745秒に短縮されている。また、使用したレジストリ情報がマニフェストファイルに記録されるようになり、他環境での自動インストールに手動設定が不要になったほか、スタック環境ではすでに読み込み済みのパッケージを優先することで不要なプリコンパイルを回避する仕組みも導入された。インストーラのJuliaupも1.22以降でGUIを搭載し、インストール済みチャネルの管理や利用可能チャネルの一覧表示、設定画面を提供する。今回のリリースはIan Butterworth氏やKristoffer Carlsson氏、Cody Tapscott氏らコアチームに加え、多くのコミュニティ貢献者の協力によって実現したとしている。