Julia v1.11 Release Notes
New language features
- 新しい
Memory
タイプは、Array
の代替として低レベルのコンテナを提供します。Memory
はオーバーヘッドが少なく、コンストラクタが速いため、Array
のすべての機能(例:多次元)を必要としない状況に適しています。Array
タイプのほとんどは、現在Memory
の上に Julia で実装されており、いくつかの関数(例:push!
)の大幅な速度向上や、より保守可能なコードにつながっています(#51319)。 public
は新しいキーワードです。public
でマークされたシンボルは公開APIと見なされます。export
でマークされたシンボルも現在は公開APIとして扱われます。public
とexport
の違いは、public
名はパッケージ/モジュールをusing
したときに利用可能にならないことです (#50105)。ScopedValue
は、タスク間での継承を伴う動的スコープを実装しています(#50958)。Manifest.toml
ファイルは、指定された Julia バージョンによって優先的に選択されるように、Manifest-v{major}.{minor}.toml
形式にリネームできるようになりました。つまり、同じフォルダー内で、Manifest-v1.11.toml
は v1.11 に使用され、Manifest.toml
は他のすべての Julia バージョンによって使用されます。これにより、複数の Julia バージョンの環境を同時に管理することが容易になります (#43845)。- Unicode 15.1 (#51799)のサポート。
Language changes
- プレコンパイル中に、
atexit
フックは出力ファイルを保存する前に実行されるようになりました。これにより、ユーザーはプログラムが終了を開始したときに、バックグラウンドの状態(Timer
のクローズやハートビートタスクへの切断通知の送信など)を安全に解消し、他のリソースをクリーンアップすることができます。 - コードカバレッジとmallocトラッキングは、パッケージのプリコンパイル段階ではもはや生成されません。さらに、これらのモードでは、トラッキングされていないパッケージに対してpkgimageキャッシュが使用されるようになりました。これは、カバレッジテスト(
julia-actions/julia-runtest
のデフォルト)が、テストされているパッケージ以外のすべてのパッケージに対してデフォルトでpkgimageキャッシュを使用することを意味し、テストの実行が速くなる可能性があります(#52123)。 JULIA_DEPOT_PATH
にパスを指定すると、空の文字列が展開されてデフォルトのユーザーデポ(#51448)が省略されるようになります。- プリコンパイルキャッシュファイルは現在移動可能であり、その有効性は
mtime
の代わりにソースファイルのコンテンツハッシュを通じて検証されます(#49866)。 - 拡張機能は、依存したい他の拡張機能のすべてのトリガーを含むトリガーを持っている場合に限り、他の拡張機能に依存できるようになりました(+ 少なくとも他の1つのトリガー)。この要件を満たさない拡張機能間の依存関係は、拡張サイクルを防ぐために、事前コンパイル中に
Base.get_extension
の使用がブロックされます #55557。
Compiler/Runtime improvements
- 更新されたGCヒューリスティクスは、個々のオブジェクトではなく、割り当てられたページをカウントします(#50144)。
Base.@assume_effects
のコードブロックへの注釈付けのサポートを追加しました (#52400)。
Command-line option changes
- The entry point for Julia has been standardized to
Main.main(args)
. This must be explicitly opted into using the@main
macro (see the docstring for further details). When opted-in, andjulia
is invoked to run a script or expression (i.e. usingjulia script.jl
orjulia -e expr
),julia
will subsequently run theMain.main
function automatically. This is intended to unify script and compilation workflows, where code loading may happen in the compiler and execution ofMain.main
may happen in the resulting executable. For interactive use, there is no semantic difference between defining amain
function and executing the code directly at the end of the script (#50974). --compiled-modules
および--pkgimages
フラグは、existing
に設定できるようになりました。これにより、Julia は既存のキャッシュファイルを読み込むことを考慮しますが、新しいファイルを作成することはありません(#50586、#52573)。--project
引数は、渡されたスクリプトファイルに対して相対的な Project.toml を持つディレクトリへのパスを指定するために@script
を受け入れるようになりました。--project=@script/foo
はfoo
サブディレクトリを指します。パスが指定されていない場合(つまり、--project=@script
の場合)、--project=@.
と同様に、ディレクトリとその親ディレクトリが Project.toml を探されます(#50864 と #53352)。
Multi-threading changes
Threads.@threads
は、非均一なワークロード向けに設計された:greedy
スケジューラをサポートするようになりました (#52096)。- 新しい公開(ただしエクスポートされていない)構造体
Base.Lockable{T, L<:AbstractLock}
は、リソースとそのロックを一緒に束ねるのを簡単にします(#52898)。
Build system changes
- 新しい
Makefile
があり、プロファイルガイドとリンク時最適化(PGOおよびLTO)戦略を使用してJuliaとLLVMをビルドします。詳細はcontrib/pgo-lto/Makefile
を参照してください(#45641)。
New library functions
テキストに関する「注釈」(
Pair{Symbol, Any}
エントリ、例::lang => "en"
または:face => :magenta
)のアイデアに基づく3つの新しいタイプ。これらの注釈は、可能な限り操作(例:*
による文字列の連結)を通じて保持されます。AnnotatedString
は新しいAbstractString
タイプです。これは基になる文字列をラップし、文字列の領域に注釈を付けることを可能にします。このタイプは、新しいStyledStrings
標準ライブラリでスタイリング情報を保持するために広く使用されています。AnnotatedChar
は新しいAbstractChar
タイプです。別のcharをラップし、それに適用される注釈のリストを保持します。AnnotatedIOBuffer
は新しいIO
タイプで、IOBuffer
を模倣していますが、注釈付きコンテンツのための特化したread
/write
メソッドを持っています。これは一種の「文字列ビルダー」として考えることもでき、注釈付きコンテンツと注釈なしコンテンツの間の接着剤としても機能します。
in!(x, s::AbstractSet)
はx
がs
に含まれているかどうかを返し、含まれていない場合はx
をs
に挿入します(#45156、#51636)。新しい
Libc.mkfifo
関数は、Unix プラットフォーム上のmkfifo
C 関数をラップします (#34587)。logrange(start, stop; length)
は、定数ステップの代わりに定数比の範囲を作成します。 (#39071)copyuntil(out, io, delim)
とcopyline(out, io)
は、out::IO
ストリームにデータをコピーします (#48273)。eachrsplit(string, pattern)
は、右から左に分割された部分文字列を反復処理します(#51646)。Sys.username()
は現在のユーザーのユーザー名を返すために使用できます(#51897)。Sys.isreadable(), Sys.iswritable()
は、現在のユーザーがそれぞれ読み取りおよび書き込みを許可するアクセス権を持っているかどうかを確認するために使用できます。 (#53320)GC.logging_enabled()
は、GC.enable_logging
を介して GC ロギングが有効になっているかどうかをテストするために使用できます (#51647)。IdSet
は現在 Base からエクスポートされており、公開と見なされています (#53262)。@time
は、ReentrantLock
が待機しなければならなかったロックの競合のカウントを報告し、さらにそのカウントを返す新しいマクロ@lock_conflicts
が追加されました(#52883)。新しいマクロ
Base.Cartesian.@ncallkw
はBase.Cartesian.@ncall
に類似していますが、関数呼び出しにキーワード引数を追加することができます (#51501)。新しい関数
Docs.hasdoc(module, symbol)
は、名前にドキュメンテーション文字列があるかどうかを示します (#52139)。新しい関数
Docs.undocumented_names(module)
は、モジュールの文書化されていない公開名を返します。(#52413)
New library features
invmod(n, T)
は、T
が定義する整数環におけるn
の剰余逆数を計算します (#52180)。invmod(n)
is an abbreviation forinvmod(n, typeof(n))
for native integer types (#52180).replace(string, pattern...)
は、出力を文字列として返すのではなく、ストリームに書き込むためのオプションのIO
引数をサポートするようになりました (#48625)。- 新しいメソッド
allequal(f, itr)
とallunique(f, itr)
が、述語関数を受け取ります。 (#47679) sizehint!(s, n)
は、縮小を無効にするオプションのshrink
引数をサポートするようになりました (#51929)。- Passing an
IOBuffer
as a stdout argument forProcess
spawn now works as expected, synchronized withwait
orsuccess
, so aBase.BufferStream
is no longer required there for correctness to avoid data races (#52461). - プロセスが終了した後、
closewrite
は渡されたストリームに対して自動的に呼び出されなくなります。プロセスに対してwait
を呼び出して、コンテンツが完全に書き込まれることを確認し、その後手動でclosewrite
を呼び出してデータ競合を避けるか、open
のコールバック形式を使用してすべてを自動的に処理させてください(#52461)。 @timed
は、コンパイルおよび再コンパイルの経過時間も追加で返します (#52889)。filter
は現在NamedTuple
に対しても作用することができます (#50795)。Iterators.cycle(iter, n)
runs overiter
a fixed number of times, instead of forever (#47354).zero(::AbstractArray)
now applies recursively, sozero([[1,2],[3,4,5]])
now produces the additive identity[[0,0],[0,0,0]]
rather than erroring (#38064).include_dependency(path; track_content=true)
は、プレコンパイルキャッシュの再配置可能性を復元するために、mtime
の使用からプレコンパイル依存関係のハッシュへの切り替えを可能にします (#51798)。
Standard library changes
- フォールバックメソッド
write(::IO, ::AbstractArray)
は、各要素に対して再帰的にwrite
を呼び出していましたが、現在は各値のメモリ内表現を書き込むようになりました。例えば、write(io, 'a':'b')
は、各文字のUTF-8表現を書くのではなく、各文字に対して4バイトを書き込みます。この新しいフォーマットはArray
で使用されるものと互換性があり、read!
を使用してデータを取り戻すことが可能です(#42593)。 length
を状態を持つイテレータに対して一般的に一貫した方法で定義することは不可能です。Stateful
イテレータに対する静かに不正確な結果の可能性は、length(::Stateful)
メソッドを削除することで対処されます。Stateful
の最後の型パラメータも削除されました。問題: (#47790)、PR: (#51747)。
Package Manager
- 現在、Project.tomlの
[sources]
セクションでパッケージの「ソース」を指定することが可能です。これを使用して、登録されていない通常の依存関係やテスト依存関係を追加できます。 - Pkgは現在、
[compat]
の制約に従い、実行中のJuliaバイナリのバージョンがProject.toml
の制約と互換性がない場合にエラーを発生させます。Pkgは常にレジストリパッケージでこの互換性を遵守してきました。この変更は主にローカルパッケージに影響を与えます。 pkg> add
とPkg.add
は、アクティブな環境がパッケージ(name
とuuid
エントリを持つ)である場合、新しい直接依存関係のための互換性エントリを追加します。- 依存関係は、
pkg> add --weak/extra Foo
またはPkg.add("Foo", target=:weakdeps/:extras)
の形式を使用して、直接弱依存関係または追加として追加できるようになりました。
StyledStrings
- 新しいスタンダードライブラリが、より包括的で構造的な方法でスタイリングを扱うために登場しました(#49586)。
- 新しい
Faces
構造体は、テキストスタイリング情報(フォント、色、装飾など)を格納するコンテナとして機能し、便利で拡張可能(addface!
を介して)かつカスタマイズ可能(ユーザーのFaces.toml
とloadfaces!
を使用して)なスタイル付きコンテンツへのアプローチを提供します (#49586)。 - 新しい
@styled_str
文字列マクロは、さまざまな顔や他の属性が適用されたAnnotatedString
を作成する便利な方法を提供します (#49586)。
Libdl
- 新しい
LazyLibrary
タイプがLibdl
からエクスポートされ、主に JLL 内で使用されるチェーンされた遅延ライブラリのロードを構築するために使用されます (#50074)。
LinearAlgebra
cbrt(::AbstractMatrix{<:Real})
は現在定義されており、実数値行列の立方根を返します(#50661)。eigvals/eigen(A, bunchkaufman(B))
とeigvals/eigen(A, lu(B))
は、それぞれB
のバンチカウフマン (LDL) 分解と LU 分解を利用して、A
とB
の一般化固有値(eigen
:および固有ベクトル)を効率的に計算します。注意:第二引数はbunchkaufman
またはlu
の出力です(#50471)。eigvals/eigen(::Hermitian{<:Tridiagonal})
のための専門的なディスパッチがあり、これは類似変換を行って実対称トリディアゴナル行列を作成し、それをLAPACKルーチンを使用して解決します。 (#49546)- 構造化行列は、親の軸(
Symmetric
/Hermitian
/AbstractTriangular
/UpperHessenberg
の場合)または主対角線の軸(バンド行列の場合)を保持します(#52480)。 bunchkaufman
とbunchkaufman!
は、任意のAbstractFloat
、Rational
およびその複素数バリアントで動作します。bunchkaufman
は、内部的にRational{BigInt}
への変換を行うことでInteger
型をサポートするようになりました。実対称行列またはエルミート行列のBunchKaufman
因子分解オブジェクトによって与えられる対角因子の慣性を計算する新しい関数inertia
が追加されました。複素対称行列の場合、inertia
は対角因子のゼロ固有値の数のみを計算します(#51487)。- Packages that specialize matrix-matrix
mul!
with a method signature of the formmul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number)
no longer encounter method ambiguities when interacting withLinearAlgebra
. Previously, ambiguities used to arise when multiplying aMyMatrix
with a structured matrix type provided by LinearAlgebra, such asAbstractTriangular
, which used to necessitate additional methods to resolve such ambiguities. Similar sources of ambiguities have also been removed for matrix-vectormul!
operations (#52837). lu
andissuccess(::LU)
now accept anallowsingular
keyword argument. When set totrue
, a valid factorization with rank-deficient U factor will be treated as success instead of throwing an error. Such factorizations are now shown by printing the factors together with a "rank-deficient" note rather than printing a "Failed Factorization" message (#52957).
Random
rand
はTuple
型に対するサンプリングをサポートするようになりました (#35856, #50251)。rand
は現在、Pair
タイプに対するサンプリングをサポートしています (#28705)。Random
によって提供されるRNGのシードに負の整数シードが使用できるようになりました(#51416)。Random
のシード可能な乱数生成器は、文字列でシードを設定できるようになりました。例えば、seed!(rng, "a random seed")
のように使用します(#51527)。
REPL
タブ補完のヒントは、REPLで入力中により明るいテキストで表示されるようになりました。無効にするには、
Base.active_repl.options.hint_tab_completes = false
をインタラクティブに設定するか、startup.jlに記述してください:if VERSION >= v"1.11.0-0" atreplinit() do repl repl.options.hint_tab_completes = false end end
(#51229).
Meta-Mは空のプロンプトで、前の非メインコンテキストモジュールとメインの間でコンテキストモジュールを切り替えるため、簡単に行き来できるようになります(#51616、#52670)。
Dates
ドキュメント化されていない関数 adjust
はもはやエクスポートされていませんが、現在はドキュメント化されています (#53092)。
Statistics
- 統計は現在、アップグレード可能な標準ライブラリです(#46501)。
Distributed
pmap
は現在、CachingPool
をデフォルトで使用します (#33892)。
Deprecated or removed
Base.map
、Iterators.map
、およびforeach
は、単一引数メソッドを失いました(#52631)。
External dependencies
- libuvライブラリは、v1.44.2からv1.48.0に更新されました(#49937)。
tput
はもはや端末の機能を確認するために呼び出されておらず、純粋なJuliaのterminfoパーサーに置き換えられました (#50797)。- ターミナル情報データベース
terminfo
はデフォルトでベンダー化されており、システムにterminfo
がない場合でもより良い REPL ユーザーエクスペリエンスを提供します。Julia は、Makefile オプションWITH_TERMINFO=0
を使用してデータベースをベンダー化せずにビルドすることができます。 (#55411)
Tooling Improvements
- CIは現在、すべてのPRに対して限定的な自動タイプミス検出を行っています。タイプミスCIチェックが失敗しているPRをマージすると、報告されたタイプミスは、同じファイルを編集するPRの将来のCI実行で自動的に無視されます(#51704)。