
2026/09/10 21:27
Julia 1.13 のハイライト
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Julia 1.13 がリリースされ、回帰と課題を特定することに焦点を当てたテスターおよびコントリビューターからの大きな貢献が反映されています。今回のアップデートは、特に起動時間とパッケージの前コンパイルにおいて劇的なパフォーマンス向上をもたらします。ベンチマークによると、パッケージの読み込みはバージョン 1.12 に比べて約 30% 速く(LTS の 1.10 に比べて約 10-20% 速く)、アプリケーションの起動時間は 1.12 に比べて約 20% 向上しており、平均的なスピードアップ率は約 1.22 倍です。これらの改善は、AbstractString および数値型に対して RapidhashNano を採用したことであり、イメージオブジェクトのマーキングをスキップしてフルコレクション時間を短縮した強化された garbage collection、そして新しいデフォルトのハッシュングアルゴリズムという技術的なアップデートによって実現されています。より迅速な開発ワークフローを支援するために、重要なバグ修正により Ctrl-C を通じた割り込み処理がより信頼性高く、タスクのカANCEL mechanisms が改善されました。また、リリースには REPL に直接組み込まれる貴重な開発者ツールが含まれます:内部実装による構文ハイライトは OhMyREPL.jl などの外部パッケージの必要性を排除し、新しい fzf スタイルの履歴検索(Ctrl-R)がファジー検索と複数結果の選択、そして REPL モードの表示をサポートします。また、Windows では効率的なテキスト入力を可能にする括弧付きペースト機能も利用可能です。診断機能をさらに強化するために、「--trace-eval」フラグにより、テストスイートやスクリプトでの停滞を特定しながらトップレベルの評価進捗を監視することができ、新しい「@FUNCTION」マクロは「#self#」の代替としてパブリック API として機能します。さらに、イントロスペクションマクロは型の付いた呼び出し式を受け付けるようになり、Time To First X(TTFX)モニタリングは 2026 年 9 月 7 日より稼働開始される新しい CI ジョブを通じて Julia の開発プロセスの一部として統合されました。これらの改善は、テスト時や大規模スクリプト実行時の待ち時間を大幅に削減し、個人のコントリビューターおよびエンタープライズチームの両方に対して全体の生産性を高め、より速いフィードバックループを提供します。
Text to translate:
Julia version 1.13 has been released with significant contributions from testers and contributors focused on identifying regressions and issues. The update delivers dramatic performance improvements, particularly in startup times and package precompilation. Benchmarks indicate that loading packages is now roughly 30% faster than in version 1.12 (and roughly 10-20% faster than 1.10 LTS), while application startup times have improved by approximately 20% over 1.12, with a mean speedup of ~1.22x. These gains are driven by technical updates including the adoption of RapidhashNano for AbstractString and numeric types, enhanced garbage collection that skips marking image objects to reduce full collection time, and new default hashing algorithms. To support this faster development workflow, critical bug fixes ensure more reliable interrupt handling via Ctrl-C and improved task cancellation mechanisms. The release also introduces valuable developer tools directly into the REPL: built-in syntax highlighting replaces the need for external packages like OhMyREPL.jl, a new fzf-style history search (Ctrl-R) supports fuzzy searching with multiple result selection and REPL mode indication, and bracketed paste functionality is now available on Windows for efficient text input. Further enhancing diagnostics, the
--trace-eval flag allows users to monitor top-level evaluation progress to identify hangs in test suites or scripts, while a new @__FUNCTION__ macro serves as a public API alternative to #self#. Additionally, introspection macros now accept call expressions with types, and Time To First X (TTFX) monitoring is now an integrated part of Julia's development process through new CI jobs, going live on September 7, 2026. Collectively, these improvements significantly reduce wait times during testing or large-scale script execution, thereby boosting overall productivity and providing faster feedback loops for both individual contributors and enterprise teams.本文
Julia 1.13 リリースハイライト
Julia 1.13 がリリースされました。このリリースへの貢献者全員の皆様に、またプレリリース期間中に尽力してくださったテスターの皆様に心から感謝申し上げます。
リリースハイライト
主な変更点は以下の通りです:
- 遅延 (TTFX) の改善
- パッケージの予彙込み(precompile)時間を大幅に削減。
- REPL の改良
- 外部パッケージなしでのシンタックスハイライト機能搭載。
- fzf スタイルの新しい履歴検索機能の実装。
- Windows における括弧付きペースト機能の追加。
- コア機能の強化
マクロの導入。@__FUNCTION__- ハッシュ化アルゴリズムの変更(RapidhashNano 採用)。
- イメージオブジェクトをスキップした高速ガベージコレクション (GC)。
- Scheduler と中断処理に関する修正。
- 型注釈を用いた内部状態の省察機能強化。
- Pkg エコシステムの進化
- デフォルト圧縮アルゴリズムの gzip から zstd への変更。
- 全体の動作パフォーマンス向上。
- マニフェスト管理機能とソースコード収集機能の強化。
コマンドの挙動変更(ロード済みパッケージへの優先適用)。pkg> add
- ツール・インフラ
- JuliaC/trim の更新。
- トップレベル評価追跡機能 (
) の追加。--trace-eval - Juliaup 用グラフィカルユーザインタフェース (GUI) の実装。
遅延 (TTFX) の改善
貢献者:Ian Butterworth および他の方々
Julia 1.13 では、パッケージの予彙込み時間をバージョン 1.12 より約 30% 短縮し、マシン条件によっては LTS バージョン 1.10 よりも 10-20% 高速化しました。
「最初の X までに要する時間 (TTFX)」は、起動から結果を得るまでの時間を指し、主に以下の 3 コストで構成されます:
- パッケージの予彙込み
- ロード処理
- コードの実行
コミュニティワークフロー(Julia-TTFX-Snippets)を活用し、以下のベンチマーク結果が得られました。グラフは 39 つのワークフローの幾何平均値を示しており、2 回の予彙込み試行中最良の結果を採用しています。
% hyperfine --warmup 3 --runs 20 -N \ --command-name "julia 1.12" "julia +1.12 --startup-file=no -e ''" \ --command-name "julia 1.13" "julia +1.13 --startup-file=no -e ''" Benchmark 1: julia 1.12 Time (mean ± σ): 69.1 ms ± 1.0 ms [User: 50.1 ms, System: 18.1 ms] Range (min … max): 68.0 ms … 72.6 ms 20 runs Benchmark 2: julia 1.13 Time (mean ± σ): 56.7 ms ± 0.5 ms [User: 49.1 ms, System: 18.9 ms] Range (min … max): 56.0 ms … 58.1 ms 20 runs Summary julia 1.13 ran 1.22 ± 0.02 times faster than julia 1.12
このモニタリングは今後、開発プロセスの一部として継続され、結果は perf.julialang.org/ttfx で追跡されます。
REPL の改良
シンタックスハイライト (Syntax highlighting)
貢献者:Timothy, Kristoffer Carlsson
Julia の REPL は、外部パッケージ(
OhMyREPL.jl など)をロードしなくてもシンタックスハイライト機能を使用可能になりました。
デフォルトは比較的色彩控えめですが、REPL のドキュメント を参照してカスタマイズ可能です。
新しい fzf スタイルの履歴検索
貢献者:Timothy
Ctrl-R キーによる履歴検索機能が再設計され、コマンドラインファインダ fzf に似た動作を実装しました。
以下の機能をサポートします:
- 履歴内のフューズィ(あいまい)検索
- コマンドが使用した REPL モードの表示
- 複数の検索結果を選択してプロンプトバッファへの挿入
- REPL と同期されたコードハイライト
検索画面内で
? を入力するとヘルプ情報を確認できます。
Windows における括弧付きペースト機能
貢献者:JuliaLang Core
Linux/macOS に次いで Windows でも「括弧付きペースト機能 (Bracketed paste)」が利用可能になりました。 この機能により、ターミナル上でテキストが「ペーストされた状態」と「タイピングされた状態」を区別でき、処理の効率と精度が向上します。
@__FUNCTION__
マクロ
@__FUNCTION__貢献者:Miles Cranmer, Jeff Bezanson
既存の
@__MODULE__ や @__FILE__ と同様に、新しい @__FUNCTION__ マクロは、匿名関数であっても最内側の包含されている関数を参照します。
これにより、内部変数 #self# のように使用制限のあるものではなく、パブリック APIとして利用可能です。
julia> fact = n -> n <= 1 ? 1 : n * @__FUNCTION__()(n - 1); julia> fact(5) 120
ハッシュ化の変更
貢献者:Andy Dienes, Jameson Nash
ハッシュ関数が入れ替わり、バイトハッシュアルゴリズムは RapidhashNano に変更されました。
AbstractString や BigInt などの多くの数値型でデフォルトで使用され、カスタムタイプの変換処理が不要になりやすくしました。
既存の
MurmurHash3 実装と比較した際の利点:
- 大幅なパフォーマンス向上(ストリーミングハッシュのため入力長さの事前把握不要)。
- C から純粋な Julia へ移行し、保守性・可読性が向上。
パフォーマンス改善例 (長文字列)
using BenchmarkTools, Downloads io = IOBuffer() Downloads.download("https://www.gutenberg.org/cache/epub/1080/pg1080.txt", io) s = String(take!(io)); # 1.12 @btime hash(s) 8.555 μs (0 allocations: 0 bytes) # 1.13 @btime hash(s) 1.742 μs (0 allocations: 0 bytes)
パフォーマンス改善例 (フォールバック実装)
struct MyString <: AbstractString s::String end m = MyString(s); # 1.12 Base.iterate(m::MyString) = iterate(m.s) Base.iterate(m::MyString, i::Integer) = iterate(m.s, i) @btime hash(m) 204.583 μs (21 allocations: 107.02 KiB) # 1.13 Base.codeunit(m::MyString) = codeunit(m.s) Base.codeunits(m::MyString) = codeunits(m.s) @btime hash(m) 1.750 μs (0 allocations: 0 bytes)
重要な注意点
- ハッシュは依然として 非暗号的 です。
- デフォルトのシード値も変更されました。
- カスタムハッシュメソッドでは、常に
のように引数でシードを受け取る必要があります。hash(x::MyType, h::UInt)
イメージオブジェクトをスキップした高速な GC
貢献者:Cody Tapscott
システムイメージからロードされた多数のオブジェクトは、一度解放されることなく永久にマークされた状態です。これにより、完全なガベージコレクション(GC)のコストが劇的に削減されました。 プログラムによって実際に Heap に作成されたサイズに合わせて GC コストがスケールするため、大規模なパッケージをロードしたセッションでも効率的になります。
比較結果:完全なコレクション (GC.gc()
)
GC.gc()# 1.12 julia> @time GC.gc() 0.035493 seconds (99.90% gc time) # 1.13 julia> @time GC.gc() 0.000528 seconds (99.08% gc time)
Apple M4 Pro における完全なコレクション (
GC.gc(true)) の比較(ロード後のサイズ増加時):
| シーン | 1.12 | 1.13 |
|---|---|---|
| 裸セッション | 35 ms | 2 ms |
| 50 ms | 11 ms |
| 59 ms | 18 ms |
| 90 ms | 30 ms |
| 187 ms | 68 ms |
実運用例:大規模データ処理
function work(n) d = Dict{Int,Vector{Float64}}() for i in 1:n d[i % 50_000] = rand(64) end return length(d) end # 1.12 julia> @time work(5_000_000) 1.699095 seconds (10.00 M allocations: 2.688 GiB, 79.80% gc time) # 1.13 julia> @time work(5_000_000) 0.566276 seconds (10.00 M allocations: 2.688 GiB, 44.32% gc time)
Scheduler と中断処理の修正
貢献者:Kiran Pamnany, Jameson Nash, Ian Butterworth
アイドル状態のスレッドは、完了したタスクを保持するのではなく、専用スケジューラタスクへ駐車するため、ガベージコレクションが速行されました。これに伴う信頼性向上の修正も適用されています。
- 中断処理:
が再びユーザーコードに到達し、スリープや IO ブロック状態でも動作します(issue #62665)。Ctrl+C - REPL 耐性: 繰り返されるタイミングの悪い
入力にも耐えられます。Ctrl+C
の最適化: 現在ロードされているすべてのスレッドを覚醒させるのではなく、1 つのアイドルスレッドのみを覚醒させます(issue #61826)。@spawn- macOS では改善なし。
- Linux (16 コア) で 1.1-1.6 倍の高速化。
- Windows および過剰予約マシンで 10-300 倍の高速化。
- バグ修正: タスク喪失およびデッドロック競合状態の修正を行いました。
型注釈を用いた省察機能 (Introspection)
コード省察マクロ (
@which, @code_typed, @code_warntype など) は、今や値ではなく型として与えられた引数を持つ呼び出し式を受け付けるようになりました。
メソッド定義で使用される同じ ::T 構文を利用できます。
julia> @which push!(::Vector{Int}, 1) push!(a::Vector{T}, item) where T @ Base array.jl:1339 julia> @which sort!(::Vector{Int}; by = ::Function) kwcall(::NamedTuple, ::typeof(sort!), v::AbstractVector{T}) where T @ Base.Sort sort.jl:1734
これにより、スタックトレースからフレームをそのままコピーして
@which に貼り付けることで、呼ばれたメソッドを見つけることが容易になります。ブロードキャスト式もサポートされています。
julia> @code_warntype (::Vector{Int}) .+ 1.0
トップレベルの評価追跡 (--trace-eval
)
--trace-eval貢献者:Ian Butterworth
新しいコマンドラインフラグ
は、トップレベルの評価の進行状況を表示します。テストスイートやスクリプトの実行時、ハングアップ(停止)などを特定するのに役立ちます。--trace-eval
% julia --trace-eval script.jl eval: #= /Users/me/.julia/config/startup.jl:1 =# eval: #= /Users/me/.julia/config/startup.jl:2 =# eval: #= /Users/me/.julia/config/startup.jl:3 =# eval: #= script.jl:1 =# eval: #= script.jl:2 =# Hello world
CI 実行(例:GitHub Actions)のデバッグロギングオプションをオンにした場合、自動的に有効になります。
JuliaC/trim
貢献者:Cody Tapscott および他の方々
juliac.jl スクリプトは正式パッケージ JuliaC.jl に変更されました。
- トリムできるコードの範囲が拡大(ファイナライザー、
、mapreduce などを含む)。@cfunction - トリムプロセス自体のバグ修正により信頼性が向上。
Pkg の進化
貢献者:Kristoffer Carlsson
デフォルト圧縮アルゴリズムの変更 (gzip → zstd)
パッケージサーバーからのダウンロードにおいて、デフォルトで
zstd 圧縮されたアーカイブを使用します。
これにより、より良い圧縮率と展開パフォーマンスが得られます(例:Plots, Makie, ModelingToolkit)。
| アルゴリズム | ダウンロードサイズ合計 | 展開時間合計 | 平均展開時間 |
|---|---|---|---|
| gzip (旧) | 307.99 MB | 21.98 ms | - |
| zstd (新) | 239.31 MB | 13.77 ms | - |
※ zstd はサイズ縮小と展開速度の両面で優れています。
パフォーマンス向上
Resolver およびレジストリ処理のマクロ最適化により、Pkg 全体の動作が高速化しました。 空の環境に
Plots を追加・削除を繰り返すベンチマーク結果(1.12.1 vs 1.13.0):
- 1.12.1: 1.257 秒 (8.83 M allocations)
- 1.13.0: 0.745 秒 (4.43 M allocations)
また、リポジトリのクローン効率が向上し、不要なデータのダウンロードが削減されました。
- 1.12.1:
が 10.95 秒かかる場合がある。Pkg.add - 1.13.0: 2.98 秒で完了。
マニフェスト管理機能の強化
パッケージが由来したレジストリがマニフェストに記録され、必要な場合のみ自動的にインストールされます。
ソースの再帰的収集
URL で取得されたパッケージから
[sources] エントリを再帰的に収集し、プライベート依存チェーンも解決可能になりました。
pkg> add
の挙動変更
pkg> addロード済みパッケージのバージョンが優先されるようになりました。 これにより、境界角のような不具合(予彙込みの繰り返し)を防ぎ、コンパチビリティ制約を満たすバージョンを安定的に利用できます。
Pkg.test
のデフォルト動作変更
Pkg.test以前はテストプロセスで常に
--check-bounds=yes が有効化されました。
今や 境界チェックモードを変更せず、親セッションから継承し、既存の予彙込みファイルを再利用します。
より厳密な検証が必要な場合は、明示的に Pkg.test(; julia_args=["--check-bounds=yes"]) を使用してください。
Juliaup GUI
貢献者:Ian Butterworth
Juliaup はコマンドラインに加え、グラフィカルユーザインタフェース (GUI) を備えるようになりました(Ver 1.22 以降)。
juliaup gui
- インストール済みタブ: インストール済みチャンネルをタイルまたはリスト表示。起動、環境変数設定、更新、削除が可能。
- データベースタブ: リリース、LTS、RC、Nightly、PR チャンネルなどをリストし、インストール可能。既存のバイナリとのリンクもサポート。
- 設定タブ: 更新間隔や自動自己更新などの設定を開示。