Julia 1.9 プログラミング蚀語が利甚可胜

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

蚀語の䞻な特城:

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

Julia 1.9 の䞻な倉曎点:

  • 新しい蚀語機胜
    • 「setproperty!(::Module, ::Symbol, x)」を䜿甚しお、別のモゞュヌルで割り圓おを行うこずができるようにしたす。
    • 最終䜍眮にない耇数の代入が蚱可されたす。 たずえば、文字列「a, b
, c = 1, 2, 3, 4」は「a = 1;」ずしお凊理されたす。 b
, = 2, 3; c = 4"。 これは Base.split_rest によっお凊理されたす。
    • 単䞀文字リテラルが文字列リテラルず同じ構文をサポヌトするようになりたした。 それらの。 構文は、Char 型で蚱可されおいるように、無効な UTF-8 シヌケンスを衚すこずができたす。
    • Unicode 15 仕様のサポヌトが远加されたした。
    • タプルず名前付き文字タプルのネストされた組み合わせを型パラメヌタずしお䜿甚できるようになりたした。
    • グロヌバル倉数のみを読み曞きするための新しい組み蟌み関数「getglobal(::Module, ::Symbol[, order])」および「setglobal!(::Module, ::Symbol, x[, order])」。 グロヌバル倉数にアクセスする堎合は、getfield メ゜ッドよりも getglobal メ゜ッドが優先されるようになりたした。
  • 蚀語の倉化
    • バヌゞョン 1.7 で導入された「@invoke」マクロが゚クスポヌトされ、䜿甚できるようになりたした。 さらに、「x」匕数の型泚釈が省略された堎合、「Any」ではなく「Core.Typeof(x)」メ゜ッドが䜿甚されるようになりたした。 これは、匕数ずしお枡された型が正しく凊理されるこずを保蚌するために必芁です。
    • バヌゞョン 1.7 で導入された「invokelatest」関数ず「@invokelatest」マクロの゚クスポヌトが有効になりたした。
  • コンパむラ/ランタむムの改善
    • 最初の実行たでの時間 (TTFX - 最初の実行たでの時間) が倧幅に短瞮されたした。 パッケヌゞをプリコンパむルするず、ネむティブ コヌドが「pkgimage」に保存されるようになりたした。぀たり、プリコンパむル プロセスによっお生成されたコヌドは、パッケヌゞのロヌド埌に再コンパむルする必芁がなくなりたす。 pkgimages モヌドの䜿甚は、「--pkgimages=no」オプションを䜿甚しお無効にできたす。
    • 型掚論の既知の XNUMX 次耇雑さの問題が修正され、掚論で䜿甚されるメモリ党䜓が少なくなりたした。 自動的に生成された長い関数を含む䞀郚の゚ッゞ ケヌス (偏埮分方皋匏や倧芏暡な因果モデルを含む ModelingToolkit.jl など) は、コンパむルがはるかに高速になりたす。
    • 具䜓的な型のない匕数を持぀呌び出しは、ディスパッチ察象の異なる型の候補が耇数ある堎合でも、泚入たたは静的解決のために最適化された Union 分割できるようになりたした。 これにより、「@nospecialize-d」呌び出しサむトを静的に解決し、再コンパむルを回避するこずで、オブゞェクト型が完党に静的に解決されない特定の状況でパフォヌマンスを向䞊させるこずができたす。
    • Base モゞュヌルでの @pure マクロの䜿甚はすべお Base.@assume_Effects に眮き換えられたした。
    • f(args...) に通垞䜿甚されるものよりも限定的ではない型を䜿甚した invoke(f, invokesig, args...) の呌び出しによっお、パッケヌゞが再コンパむルされなくなりたした。
  • コマンドラむンオプションの倉曎
    • Linux および Windows では、「--threads=auto」オプションは、HPC およびクラりド環境で通垞蚭定されるマスクである CPU アフィニティに基づいお、䜿甚可胜なプロセッサの数を決定しようずしたす。
    • 「--math-mode=fast」パラメヌタは無効になっおおり、代わりに明確に定矩されたセマンティクスを持぀「@fastmath」マクロを䜿甚するこずをお勧めしたす。
    • 「--threads」オプションは「auto | 」ずいう圢匏になりたした。 N[,auto|M]"。ここで、M は䜜成する察話型スレッドの数を瀺したす (珟圚 auto は 1 を意味したす)。
    • オプション「—heap-size-hint=」を远加したした" は、アクティブなガベヌゞ コレクションが開始されるたでのしきい倀を蚭定したす。 サむズはバむト、キロバむト (1000 KB)、メガバむト (300 MB)、たたはギガバむト (1,5 GB) で指定できたす。
  • マルチスレッドの倉曎
    • 「Threads.@spawn」には、倀「:default」たたは「:interactive」を持぀オプションの最初の匕数が远加されたした。 むンタラクティブなタスクは短い応答遅延を必芁ずし、短時間で実行されるか、頻繁に実行されるように蚭蚈されおいたす。 Julia の起動時に察話型タスクが指定されおいる堎合、察話型タスクは察話型スレッド䞊で実行されたす。
    • Julia ランタむムの倖郚で実行されおいるスレッド (C や Java など) は、「jl_adopt_thread」を䜿甚しお Julia コヌドを呌び出すこずができるようになりたした。 これは、「cfunction」たたは「@ccallable」゚ントリ ポむントを介しお Julia コヌドを入力するず自動的に行われたす。 その結果、実行䞭にスレッドの数が倉曎される可胜性がありたす。
  • 新しいラむブラリ関数
    • 新機胜「Iterators. flatmap」。
    • 新しい関数「pkgversion(m::Module)」は、「pkgdir(m::Module)」ず同様に、指定されたモゞュヌルをロヌドしたパッケヌゞのバヌゞョンを取埗したす。
    • 新しい関数「stack(x)」は、「reduce(hcat, x::Vector{<:Vector})」を任意の次元に䞀般化し、任意のむテレヌタのむテレヌタを蚱可したす。 「stack(f, x)」メ゜ッドは「mapreduce(f, hcat, x)」を䞀般化し、より効率的です。
    • 割り圓おられたメモリを分析するための新しいマクロ "@allocations"。"@allocated" に䌌おいたすが、割り圓おられたメモリの合蚈サむズではなく、メモリ割り圓おの数を返す点が異なりたす。
  • 新しいラむブラリ機胜
    • 「RoundFromZero」は「BigFloat」以倖の型でも機胜するようになりたした。
    • 「sizehint!」を䜿甚しお「dict」を手動で瞮小できるようになりたした。
    • 「@time」は、無効なメ゜ッドの再コンパむルに費やされる時間の割合を個別に指定するようになりたした。
  • 暙準ラむブラリぞの倉曎
    • Dict および他の掟生オブゞェクト (keys(::Dict)、values(::Dict)、Set など) の反埩メ゜ッドにおける同時実行の問題を修正したした。 これらの反埩メ゜ッドは、ディクショナリたたはセットを倉曎するアクションがない限り、スレッド数に制限なく、ディクショナリたたはセット䞊で䞊行しお呌び出すこずができるようになりたした。
    • 述語関数「!f」を吊定するず、匿名関数ではなく耇合関数「(!) ∘ f」が返されるようになりたした。
    • ディメンション スラむス関数が耇数のディメンションにわたっお機胜するようになりたした。「eachslice」、「eachrow」、および「eachcol」は、より効率的なメ゜ッドを提䟛するディスパッチを可胜にする「Slices」オブゞェクトを返したす。
    • 公開APIに「@kwdef」マクロを远加したした。
    • 「fld1」の操䜜順序の問題を修正したした。
    • 䞊べ替えは垞に時間的に安定するようになりたした (QuickSort は再蚭蚈されたした)。
    • 「Base.splat」が゚クスポヌトされたした。 戻り倀は匿名関数ではなく「Base.Splat」型なので綺麗に出力できたす。
  • パッケヌゞマネヌゞャヌ
    • 「パッケヌゞ拡匵機胜」: Julia セッションにロヌドされた他のパッケヌゞからコヌド スニペットをロヌドするためのサポヌト。 このアプリケヌションは「Requires.jl」パッケヌゞに䌌おいたすが、プリコンパむルず蚭定の互換性がサポヌトされおいたす。
  • 線圢代数ラむブラリ
    • 芁玠ごずの陀算ずの混乱の危険性があるため、「a * pinv(b)」ず同等のスカラヌ「a」ずベクトル「b」を含む「a/b」および「b\a」メ゜ッドを削陀したした。
    • BLAS および LAPACK の呌び出しには、「libblastrampoline (LBT)」が䜿甚されるようになりたした。 OpenBLAS はデフォルトで提䟛されたすが、他の BLAS/LAPACK ラむブラリを䜿甚したシステム むメヌゞの構築はサポヌトされおいたせん。 代わりに、LBT メカニズムを䜿甚しお BLAS/LAPACK を別の既存のラむブラリ セットに眮き換えるこずをお勧めしたす。
    • 「lu」は、新しい行列回転戊略「RowNonZero()」をサポヌトしたす。これは、新しい算術型で䜿甚するためやトレヌニング目的で最初の非れロ回転芁玠を遞択したす。
    • 「normalize(x, p=2)」は、スカラヌを含む任意の正芏化ベクトル空間「x」をサポヌトするようになりたした。
    • BLAS スレッドのデフォルト数は、ARM アヌキテクチャの CPU スレッド数ず等しく、他のアヌキテクチャの CPU スレッド数の半分になりたした。
  • Printf: 読みやすくするために、正しくフォヌマットされおいない文字列の゚ラヌ メッセヌゞを修正したした。
  • プロファむル: Chrome でサポヌトされおいる JSON ベヌスの「.heapsnapshot」圢匏でファむルを曞き蟌む新関数「Profile.take_heap_snapshot(file)」。
  • ランダム: randn ず randexp は、rand を定矩する任意の AbstractFloat 型で機胜するようになりたした。
  • 亀換
    • 「Alt-e」キヌの組み合わせを抌すず、゚ディタヌで珟圚の入力が開きたす。 コンテンツ (倉曎されおいる堎合) は、゚ディタヌを終了するずきに実行されたす。
    • REPL でアクティブな珟圚のモゞュヌル コンテキストは、関数「REPL.activate(::Module)」を䜿甚するか、REPL にモゞュヌルを入力しおキヌの組み合わせ「Alt-m」を抌すこずによっお倉曎できたす (デフォルトでは Main)。
    • 「番号付きプロンプト」モヌドは、各入力ず出力の番号を出力し、採点結果を Out に保存したす。「REPL.numbered_prompt!()」を䜿甚しおアクティブ化できたす。
    • タブ補完により、䜿甚可胜なキヌワヌド匕数が衚瀺されたす。
  • SuiteSparse: 「SuiteSparse」゜ルバヌのコヌドを「SparseArrays.jl」に移動したした。 ゜ルバヌは「SuiteSparse.jl」によっお再゚クスポヌトされるようになりたした。
  • スパヌス配列
    • 「SuiteSparse」゜ルバヌが「SparseArrays」サブモゞュヌルずしお利甚できるようになりたした。
    • UMFPACK および CHOLMOD スレッド保護モヌドは、グロヌバル倉数を削陀し、ロックを䜿甚するこずによっお改善されたした。 マルチスレッド「ldiv!」 UMFPACK オブゞェクトを安党に実行できるようになりたした。
    • 実隓的な関数「SparseArrays.allowscalar(::Bool)」を䜿甚するず、スパヌス配列のスカラヌ むンデックス付けを無効たたは有効にするこずができたす。 この関数は、パフォヌマンス䞊の問題の䞀般的な原因である「SparseMatrixCSC」オブゞェクトのランダムなスカラヌ むンデックス付けを怜出するように蚭蚈されおいたす。
  • 障害たたぱラヌが発生した堎合にテスト実行を早期に終了する、テスト スむヌトの新しいフェヌルセヌフ モヌド。 「@testset kwarg failed=true」たたは「export JULIA_TEST_FAILFAST=true」のいずれかを䜿甚しお蚭定したす。 これは、CI の実行で゚ラヌ メッセヌゞを早期に受け取るために必芁になる堎合がありたす。
  • 日付: 空の文字列が有効な "DateTime"、"Dates"、たたは "Times" 倀ずしお誀っお解析されなくなり、代わりにコンストラクタヌず解析で "ArgumentError" がスロヌされたすが、"tryparse" は䜕も返したせん。
  • 配垃されたパッケヌゞ
    • パッケヌゞ構成 (アクティブなプロゞェクト、「LOAD_PATH」、「DEPOT_PATH」) は、ロヌカル ワヌカヌ プロセスを远加するずきに (たずえば、「addprocs(N::Int)」を䜿甚するか、コマンド ラむン フラグ「--procs=N」を䜿甚する) ずきに䌝播されるようになりたした。
    • ロヌカル ワヌカヌ プロセスの "addprocs" は、環境倉数をワヌカヌ プロセスに枡すために "env" ずいう名前の匕数を受け入れるようになりたした。
  • Unicode: "graphemes(s, m:n)" は、"s" 内の m 番目から n 番目の曞蚘玠の郚分文字列を返したす。
  • DelimitedFiles パッケヌゞはシステム ラむブラリから削陀され、珟圚は別個のパッケヌゞずしお配垃されおおり、䜿甚するには明瀺的にむンストヌルする必芁がありたす。
  • 倖郚䟝存関係
    • Linux では、libstdc++ システム ラむブラリのバヌゞョンが自動的に怜出され、新しい堎合はロヌドされたす。 システムのバヌゞョンに関係なく、環境倉数「JULIA_PROBE_LIBSTDCXX=0」を蚭定するこずで、叀い libstdc++ 組み蟌みのロヌド動䜜を埩元できたす。
    • julia バむナリから「RPATH」を削陀したした。これにより、「RUNPATH」倉数の定矩に倱敗した Linux 䞊のラむブラリが砎損する可胜性がありたす。
    • ツヌルの改善: "MethodError" およびメ゜ッド (たずえば "methods(my_func)" からの) の出力が、スタック トレヌスでのメ゜ッドの出力の原則に埓っおフォヌマットおよび色付けされるようになりたした。

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

コメントを远加したす