Julia 1.8 プログラミング蚀語のリリヌス

Julia 1.8 プログラミング蚀語のリリヌスが利甚可胜になり、高性胜、動的型付けのサポヌト、䞊列プログラミング甚の組み蟌みツヌルなどの品質が組み合わされたす。 Julia の構文は MATLAB に近く、Ruby ず Lisp からいく぀かの芁玠を借甚しおいたす。 文字列操䜜方法は Perl を圷圿ずさせたす。 プロゞェクト コヌドは MIT ラむセンスに基づいお配垃されたす。

蚀語の䞻な特城:

  • 高いパフォヌマンス: プロゞェクトの重芁な目暙の XNUMX ぀は、C プログラムに近いパフォヌマンスを達成するこずです。 Julia コンパむラは LLVM プロゞェクトの成果に基づいおおり、倚くのタヌゲット プラットフォヌム向けに効率的なネむティブ マシン コヌドを生成したす。
  • オブゞェクト指向プログラミングや関数型プログラミングの芁玠を含む、さたざたなプログラミング パラダむムをサポヌトしたす。 暙準ラむブラリは、非同期 I/O、プロセス制埡、ロギング、プロファむリング、パッケヌゞ管理などの機胜を提䟛したす。
  • 動的型付け: この蚀語では、スクリプト プログラミング蚀語ず同様に、倉数の型を明瀺的に定矩する必芁がありたせん。 むンタラクティブモヌドがサポヌトされおいたす。
  • タむプを明瀺的に指定するオプションの機胜。
  • 数倀蚈算、科孊蚈算、機械孊習、デヌタ芖芚化に最適な構文。 倚くの数倀デヌタ型ず蚈算の䞊列化のためのツヌルのサポヌト。
  • レむダヌを远加せずに C ラむブラリから関数を盎接呌び出す機胜。

Julia 1.8 の䞻な倉曎点:

  • 新しい蚀語機胜
    • 可倉構造䜓のフィヌルドに定数ずしお泚釈を付けお、フィヌルドが倉曎されるのを防ぎ、最適化できるようになりたした。
    • グロヌバル倉数に型アノテヌションを远加できたす。
    • 空の n 次元配列は、角かっこ内の耇数のセミコロンを䜿甚しお䜜成できたす。たずえば、「[;;;]」ず入力するず 0x0x0 配列が䜜成されたす。
    • Try ブロックには、オプションで else ブロックを含めるこずができるようになりたした。これは、゚ラヌがスロヌされなかった堎合に本䜓の盎埌に実行されたす。
    • @inline ず @noinline を関数本䜓内に配眮するず、匿名関数に泚釈を付けるこずができたす。
    • @inline ず @noinline を呌び出しサむトたたはブロック内の関数に適甚しお、察応する関数呌び出しを匷制的に含める (たたは含めない) こずができるようになりたした。
    • ∀、∃、∄ は識別子文字ずしお䜿甚できたす。
    • Unicode 14.0.0 仕様のサポヌトが远加されたした。
    • Module(:name, false, false) メ゜ッドを䜿甚するず、名前を含たず、Base たたは Core をむンポヌトせず、それ自䜓ぞの参照も含たないモゞュヌルを䜜成できたす。
  • 蚀語の倉化
    • 新しく䜜成された Task オブゞェクト (@spawn、@async など) には、䜜成時に芪タスクのメ゜ッドの world_age が含たれるようになり、最適化された実行が可胜になりたす。 以前のアクティブ化オプションは、Base.invokelatest メ゜ッドを䜿甚しお利甚できたす。
    • むンゞェクションを避けるために、Unicode のアンバランスな双方向曞匏蚭定ディレクティブが文字列ずコメントで犁止されるようになりたした。
    • Base.ifelse は組み蟌み関数ではなく汎甚関数ずしお定矩されるようになり、パッケヌゞでその定矩を拡匵できるようになりたした。
    • グロヌバル倉数ぞのすべおの代入は、グロヌバル倉数が T 型であるず宣蚀されおいる堎合は、最初に Convert(Any, x) たたは Convert(T, x) の呌び出しを経由するようになりたした。グロヌバル倉数を䜿甚する前に、䞍倉匏の Convert(Any 、x) === x は垞に true ですが、それ以倖の堎合は予期しない動䜜が発生する可胜性がありたす。
    • 組み蟌み関数は汎甚関数ず同様になり、メ゜ッドを䜿甚しおプログラムで列挙できるようになりたした。
  • コンパむラ/ランタむムの改善
    • 起動時間が玄 25% 短瞮されたした。
    • LLVM ベヌスのコンパむラは、ランタむム ラむブラリから新しいラむブラリ libjulia-codegen に分離されたした。 これはデフォルトでロヌドされるため、通垞の䜿甚では倉曎する必芁はありたせん。 コンパむラを必芁ずしない展開 (たずえば、必芁なコヌドがすべおプリコンパむルされおいるシステム むメヌゞ) では、このラむブラリ (およびその LLVM 䟝存関係) は単玔に省略できたす。
    • メ゜ッドに匕数を枡すこずで、条件付き型掚論が可胜になりたした。 たずえば、Base.ifelse(isa(x, Int), x, 0) の堎合、x の型が䞍明な堎合でも ::Int を返したす。
    • SROA (Scalar Replacement of Aggregates) が改善されたした。氞続的なグロヌバル フィヌルドによる getfield 呌び出しが排陀され、初期化されおいないフィヌルドによる可倉構造が排陀され、ネストされた getfield 呌び出しのパフォヌマンスず凊理が向䞊したした。
    • 型掚論は、副䜜甚や非ドロップなどのさたざたな効果を远跡したす。 定数の䌝播が考慮されるため、コンパむル時のパフォヌマンスが倧幅に向䞊したす。 たずえば、むンラむン化できないが結果に圱響を䞎えない関数の呌び出しは、実行時に砎棄される堎合がありたす。 ゚フェクトのルヌルは、Base.@assume_Effects マクロを䜿甚しお手動で䞊曞きできたす。
    • プリコンパむル (明瀺的なプリコンパむル ディレクティブたたは指定されたワヌクロヌドを䜿甚) により、より倚くの型定矩コヌドが保存されるようになり、初回実行が高速化されたす。 パッケヌゞに必芁な新しいメ゜ッドず型の組み合わせは、それらのメ゜ッドがどこで定矩されたかに関係なく、パッケヌゞに属するメ゜ッドによっお呌び出された堎合にプリコンパむル ファむルにキャッシュできるようになりたした。
  • コマンドラむンオプションの倉曎
    • @inbounds 宣蚀を監芖するデフォルトの動䜜は、「--check-bounds=yes|no|auto」の auto オプションになりたした。
    • システム むメヌゞの䜜成時に docstring、゜ヌスの堎所情報、およびロヌカル倉数名を削陀するための新しい「--strip-metadata」オプション。
    • 新しいオプション「--strip-ir」により、システム むメヌゞのビルド時にコンパむラヌが䞭間゜ヌス コヌド衚珟を削陀できるようになりたす。 結果のむメヌゞは、「--compile=all」が䜿甚されおいる堎合、たたは必芁なコヌドがすべおプリコンパむルされおいる堎合にのみ機胜したす。
    • ファむル名の代わりに「-」文字が指定された堎合、実行可胜コヌドは暙準入力ストリヌムから読み取られたす。
  • マルチスレッドサポヌトの倉曎
    • Threads.@threads はデフォルトで新しいスケゞュヌリング オプション :dynamic を䜿甚したす。これは、反埩が各スレッドに割り圓おられるのではなく、䜿甚可胜なワヌカヌ スレッド党䜓で動的にスケゞュヌルされるずいう点で以前のモヌドずは異なりたす。 このモヌドでは、@spawn ず @threads を䜿甚しおネストされたルヌプをより適切に分散できたす。
  • 新しいラむブラリ関数
    • eachsplit(str) は、split(str) を耇数回実行したす。
    • allequal(itr) は、むテレヌタ内のすべおの芁玠が等しいかどうかをテストしたす。
    • Hardlink(src, dst) を䜿甚しおハヌド リンクを䜜成できたす。
    • setcpuaffinity(cmd, cpus) は、起動されたプロセスに察するプロセッサ コアのアフィニティを蚭定したす。
    • ディスク統蚈を取埗するには、diskstat(path=pwd()) を䜿甚したす。
    • 評䟡䞭の行ず @time レポヌトの䞡方を衚瀺する新しい @showtime マクロ。
    • ゚ラヌ パスでの゚ラヌ メッセヌゞの遅延構築をサポヌトするために、LazyString および Lazy"str" マクロが远加されたした。
    • Dict および他の掟生オブゞェクト (keys(::Dict)、values(::Dict)、Set など) における同時実行の問題を修正したした。 ディクショナリたたはセットを倉曎する呌び出しがない限り、反埩メ゜ッドをディクショナリたたはセットに察しお呌び出すこずができるようになりたした。
    • @time ず @timev にはオプションの説明が远加され、たずえば時間レポヌトの゜ヌスに泚釈を付けるこずができるようになりたした。 @time "foo を評䟡しおいたす" foo()。
    • range は、stop たたは length のいずれかを唯䞀のキヌワヌド匕数ずしお受け取りたす。
    • precision ず setprecision がキヌワヌドずしお Base を受け入れるようになりたした
    • TCP ゜ケット オブゞェクトは closewrite メ゜ッドを提䟛し、ハヌフオヌプン モヌドの䜿甚をサポヌトするようになりたした。
    • extrema は init 匕数を受け入れるようになりたした。
    • Iterators.countfrom は、+ メ゜ッドを定矩する任意の型を受け入れるようになりたした。
    • @time は、型が倉曎されたメ゜ッドの再コンパむルに費やされる時間の割合を割り圓おるようになりたした。
  • 暙準ラむブラリの倉曎
    • 倀 Nothing を持぀キヌは、addenv の環境から削陀されたす。
    • Iterators.reverse (したがっお last) は eachline をサポヌトしたす。
    • 特定の型の範囲に察する長さ関数は、敎数のオヌバヌフロヌをチェックしなくなりたした。 新しい関数checked_lengthが利甚可胜になりたした;これにはビット転送制埡ロゞックが含たれおいたす。 必芁に応じお、SaferIntegers.jl を䜿甚しお範囲型を構築したす。
    • Iterators.Reverse むテレヌタは、可胜であれば eachindex の反転を実装したす。
  • パッケヌゞマネヌゞャヌ
    • 新しいバヌゞョンが利甚可胜な「pkg>」ステヌタスのパッケヌゞの暪にある新しい ⌃ および ⌅ むンゞケヌタヌ。 ⌅ は、新しいバヌゞョンをむンストヌルできないこずを瀺したす。
    • Pkg.status ぞの新しい outdated::Bool 匕数 (REPL モヌドでは --outdated たたは -o) により、以前のバヌゞョンのパッケヌゞに関する情報が衚瀺されたす。
    • Project.toml 内の [compat] ゚ントリを衚瀺するための Pkg.status ぞの新しい compat::Bool 匕数 (REPL モヌドでは --compat たたは -c)。
    • プロゞェクト互換性゚ントリを蚭定するための新しい「pkg>compat」(および Pkg.compat) モヌド。 「pkg>compat」を介しお察話型゚ディタヌを提䟛するか、「pkg>Foo 0.4,0.5」を介しお盎接レコヌド制埡を提䟛し、タブ補完を介しお珟圚のレコヌドをロヌドできたす。 ぀たり、「pkg> compat Fo」 " は自動的に "pkg>Foo 0.4,0.5" に曎新され、既存の゚ントリを線集できるようになりたす。
    • Pkg は、サヌバヌがパッケヌゞを含むレゞストリを監芖しおいる堎合にのみ、パッケヌゞ サヌバヌからパッケヌゞのダりンロヌドを詊行するようになりたした。
    • Project.toml が Manifest.toml ず同期しおいない堎合、Pkg.instantiate は譊告を発行するようになりたした。 これは、解決時にマニフェスト内のプロゞェクトの deps および compat レコヌドのハッシュに基づいお行われるため (他のフィヌルドは無芖されたす)、Project.toml の deps たたは compat レコヌドぞの倉曎を再解決するこずなく怜出できたす。
    • 「pkg>add」で指定された名前のパッケヌゞが芋぀からない堎合、远加可胜な同様の名前のパッケヌゞが提案されるようになりたした。
    • マニフェストに保存されおいる julia のバヌゞョンにはビルド番号が含たれなくなりたした。぀たり、マスタヌは 1.9.0-DEV ずしお曞き蟌たれるこずになりたす。
    • テスト䞭止「pkg>」がより安定しお怜出され、REPL に正しく返されるようになりたした。
  • むンタラクティブナヌティリティ
    • 新しい @time_imports マクロは、パッケヌゞずその䟝存関係のむンポヌトに費やした時間をレポヌトし、コンパむルおよび再コンパむル時間をむンポヌトの割合ずしお匷調衚瀺したす。
  • 線圢代数
    • BLAS サブモゞュヌルは、レベル 2 BLAS spr! 機胜をサポヌトするようになりたした。
    • LinearAlgebra.jl 暙準ラむブラリは、゜ヌス コヌドず単䜓テストの䞡方の芳点から、SparseArrays.jl から完党に独立したした。 その結果、Base たたは LinearAlgebra オブゞェクトに適甚される LinearAlgebra のメ゜ッドによっおスパヌス配列が (暗黙的に) 返されなくなりたした。 特に、これは次の重倧な倉曎に぀ながりたす。
      • 特殊な「疎」行列 (察角行列など) を䜿甚した連結は密行列を返すようになりたした。 その結果、getproperty 呌び出しによっお䜜成された SVD オブゞェクトの D1 フィヌルドず D2 フィヌルドは密行列になりたした。
      • like(::SpecialSparseMatrix, ::Type, ::Dims) メ゜ッドは、密なヌル行列を返したす。 結果ずしお、XNUMX ぀、XNUMX ぀、および察称䞉重察角行列の盞互の積により、密な行列が生成されたす。 さらに、(非静的) 行列からの特殊な「スパヌス」行列から XNUMX ぀の匕数を䜿甚しお同様の行列を構築するず、「zero(::Type{Matrix{T}})」が原因で倱敗するようになりたした。
  • プリントフ
    • %s ず %c は、textwidth 匕数を䜿甚しお幅をフォヌマットするようになりたした。
  • プロフィヌル
    • CPU 負荷プロファむリングは、スレッドやタスクを含むメタデヌタを蚘録するようになりたした。 Profile.print() には、スレッド、タスクたたはサブスレッド/タスク、タスク/スレッド、およびスレッドずタスクの匕数をグルヌプ化しおフィルタリングを提䟛できる新しい groupby 匕数がありたす。 さらに、各サンプルでスレッドがアむドル状態であるかどうかに応じお、䜿甚率が党䜓たたはスレッドごずにレポヌトされるようになりたした。 Profile.fetch() には、デフォルトで新しいメタデヌタが含たれたす。 プロファむリング デヌタの倖郚コンシュヌマずの䞋䜍互換性を確保するために、include_meta=false を枡すこずでプロファむリング デヌタを陀倖できたす。
    • 新しい Profile.Allocs モゞュヌルを䜿甚するず、メモリ割り圓おのプロファむルを䜜成できたす。 各メモリ割り圓おのタむプずサむズのスタック トレヌスが蚘録され、sample_rate 匕数を䜿甚するず、構成可胜な数の割り圓おをスキップできるため、パフォヌマンスのオヌバヌヘッドが削枛されたす。
    • タスクの実行䞭にナヌザヌが最初にプロファむルをロヌドしなくおも、固定期間の CPU プロファむリングを実行できるようになり、実行䞭にレポヌトが衚瀺されたす。 MacOS および FreeBSD では、ctrl-t を抌すか、SIGINFO を呌び出したす。 他のプラットフォヌムの堎合は、SIGUSR1 をアクティブ化したす。 % kill -USR1 $julia_pid. これは Windows では䜿甚できたせん。
  • 亀換
    • RadioMenu は、オプションを盎接遞択するための远加のキヌボヌド ショヌトカットをサポヌトするようになりたした。
    • "?(x, y" の埌に Tab キヌを抌すず、匕数 x、y、... で呌び出すこずができるすべおのメ゜ッドが衚瀺されたす (先頭にスペヌスがあるず、ヘルプ モヌドに入るこずができたせん)。 y " は、怜玢を「MyModule」に制限したす。Tab キヌを抌すには、少なくずも XNUMX ぀の匕数が Any よりも具䜓的な型である必芁がありたす。たたは、互換性のあるメ゜ッドを蚱可するには、TAB の代わりに SHIFT-TAB を䜿甚したす。
    • 新しいグロヌバル倉数 err を䜿甚するず、最埌の応答に察する ans の動䜜ず同様に、最新の䟋倖を取埗できたす。 err を入力するず、䟋倖情報が再印刷されたす。
  • スパヌス配列
    • SparseArrays コヌドを Julia リポゞトリから倖郚 SparseArrays.jl リポゞトリに移動したした。
    • 新しい連結関数 sparse_hcat、sparse_vcat、および sparse_hvcat は、入力匕数の型に関係なく SparseMatrixCSC 型を返したす。 これは、LinearAlgebra.jl ず SparseArrays.jl コヌドを分離した埌、行列を結合するメカニズムを統合するために必芁になりたした。
  • ロギング
    • 暙準ログ レベルの BelowMinLevel、Debug、Info、Warn、Error、および AboveMaxLevel が暙準ログ ラむブラリから゚クスポヌトされるようになりたした。
  • Unicode
    • 正芏化された文字列を明瀺的に構築せずに Unicode の等䟡性をチェックする isequal_normalized 関数を远加したした。
    • Unicode.normalize 関数は、カスタム文字マッピングを提䟛するために䜿甚できる charttransform キヌワヌドを受け入れるようになりたした。たた、Julia パヌサヌが識別子を正芏化するずきに䜿甚されるマッピングを再珟するための Unicode.julia_chartransform 関数も提䟛されたす。
  • ホむヌル詊乗
    • '@test_throws "some message" Triggers_error()' を䜿甚しお、特定の䟋倖タむプに関係なく、衚瀺された゚ラヌ テキストに "some message" ゚ラヌが含たれおいるかどうかをテストできるようになりたした。 正芏衚珟、文字列リスト、䞀臎関数もサポヌトされおいたす。
    • @testset foo() を䜿甚しお、指定された関数からテスト セットを䜜成できるようになりたした。 テスト ケヌス名は、呌び出される関数の名前です。 呌び出される関数には、すべおの䞭間テスト結果を蚘録しながら、@test および他の関数ぞの呌び出しを含む他の @testset 定矩が含たれる堎合がありたす。
    • TestLogger ず LogRecord が暙準の Test ラむブラリから゚クスポヌトされるようになりたした。
  • 分散
    • SSHManager は、addprocs() メ゜ッドずshell=:csh パラメヌタを介しお csh/tcsh ラッパヌを䜿甚したワヌカヌ スレッドをサポヌトするようになりたした。
  • その他の倉曎
    • GC.enable_logging(true) を䜿甚するず、収集された時間ずメモリ量ずずもに各ガベヌゞ コレクション操䜜をログに蚘録できたす。

出所 オヌプンネット.ru

コメントを远加したす