Julia v1.10 發行說明

新語言功能

  • JuliaSyntax.jl 現在用作預設的剖析器,提供更好的診斷和更快的剖析。如有需要,設定環境變數 JULIA_USE_FLISP_PARSER1 以切換回舊的剖析器(如果您發現有此需要,請提交問題) (#46372).
  • (U+297A, \leftarrowsubset) 和 (U+2977, \leftarrowless) 現在可用作具有箭頭優先順序的二元運算子 (#45962).

語言變更

  • 當任務分叉子任務時,父任務的任務局部 RNG(亂數產生器)不再受到影響。基於父任務對子任務的播種也採用更嚴謹的防衝突方法,使用基於 SplitMix 和 DotMix 可分割 RNG 架構的設計 (#49110).
  • 方法的新更具體規則解決包含 Union{} 的歧義,優先採用明確定義為處理 Union{} 參數的方法。這使得可以定義方法來明確處理 Union{},而不會出現以前常見的歧義。這也讓執行時間可以優化某些方法查詢,大幅縮短在類型上進行調度的重載方法(例如特質和建構函式)的載入和推論時間。(#49349)
  • 「h 橫線」 (\hslash U+210F) 字元現在被視為等同於 ħ (\hbar U+0127)。
  • @simd 巨集現在有更受限且更清晰的語意:它僅啟用浮點運算的重新排序和收縮,而不是開啟所有「fastmath」最佳化。如果您觀察到此變更導致效能下降,您可以使用 @fastmath @simd 來恢復先前的行為,如果您接受 @fastmath 巨集啟用的所有最佳化 (#49405)。
  • 當堆疊追蹤檢視中顯示具有關鍵字引數的方法時,關鍵字引數類型的文字表示法會使用新的 @Kwargs{key1::Type1, ...} 巨集語法進行簡化 (#49959)。

編譯器/執行時間改善

  • 垃圾收集器的標記階段現在是多執行緒的 (#48600)。
  • JITLink 在 Linux aarch64 上預設啟用,當 Julia 連結到 LLVM 15 或更新版本時 (#49745)。這應該可以解決在此平台上先前觀察到的許多區段錯誤。
  • 預編譯程序現在使用 pidfile 鎖定並協調多個 julia 程序,以僅讓一個程序花費精力進行預編譯,而其他程序則等待。以前所有程序都會執行工作並競相覆寫快取檔案。(#49052

命令列選項變更

  • 新的選項 --gcthreads 用於設定垃圾收集器將使用多少個執行緒 (#48600)。預設值為 N/2,其中 N 是 Julia 使用的工作執行緒數目(--threads)。

建置系統變更

  • SparseArrays 和 SuiteSparse 不再包含在預設系統映像中,因此核心語言不再包含 GPL 函式庫。但是,這些函式庫仍與語言一起包含在標準二進位發行版中 (#44247#48979#49266)。

新的函式庫函式

  • 現在已定義 `tanpi`。它比 `tan(pi*x)` 更準確地計算 tan(πx) (#48575)。
  • 現在已在 `Base.Math` 中定義 `fourthroot(x)`,可用於計算 `x` 的四次方根。也可以使用 Unicode 字元 `∜` 來存取,可透過 `\fourthroot` 輸入 (#48899)。
  • 現在已定義 `Libc.memmove`、`Libc.memset` 和 `Libc.memcpy`,其功能與其各自的 C 呼叫相符。
  • 已新增 `Base.isprecompiled(pkg::PkgId)`,用於識別套件是否已預先編譯 (#50218)。

新的函式庫功能

  • 現在 `binomial(x, k)` 支援非整數 `x` (#48124)。
  • 現在將 `CartesianIndex` 視為廣播的「純量」(#47044)。
  • 現在 `printstyled` 支援斜體輸出 (#45164)。
  • 現在 `parent` 和 `parentindices` 支援 `SubString`。
  • 現在 `replace(string, pattern...)` 支援一個選用的 `IO` 參數,用於將輸出寫入串流,而不是傳回字串 (#48625)。
  • 現在 `startswith` 支援可尋址的 `IO` 串流 (#43055)。

標準函式庫變更

  • initialized=true 關鍵字指定現在對 sortperm!partialsortperm! 來說為無操作 (#47979)。它先前會公開不安全的行為 (#47977)。
  • 列印整數 Rational 會在 Rational 型別的 IO 背景中跳過分母 (例如在陣列中) (#45396)。

套件管理員

  • Pkg.precompile 現在接受 timing 作為關鍵字引數,它會顯示各套件的預編譯計時資訊 (例如 Pkg.precompile(timing=true))。

線性代數

  • AbstractQ 不再是 AbstractMatrix 的子型別。此外,adjoint(Q::AbstractQ) 不再將 Q 包裝在 Adjoint 型別中,而是包裝在 AdjointQ 中,它本身是 AbstractQ 的子型別。這個變更考量到通常 AbstractQ 執行個體會像基於函式的、以矩陣為後盾的線性算子那樣運作,因此不允許有效率的索引。此外,許多 AbstractQ 型別可以作用於不同大小的向量/矩陣,就像作用於具有與背景相關大小的矩陣一樣。有了這個變更,AbstractQ 就有明確定義的 API,並在 Julia 文件 中詳細說明 (#46196)。
  • Factorization 物件的伴隨和轉置不再分別包裝在 AdjointTranspose 包裝器中。相反,它們包裝在 AdjointFactorizationTranposeFactorization 類型中,它們本身是 Factorization 的子類型 (#46874)。
  • 用於提取矩陣的 Hermitian(實對稱)部分的新函數 hermitianparthermitianpart! (#31836)。
  • AbstractMatrix 的伴隨或轉置的 norm 現在預設傳回父矩陣的範數,這與目前 AbstractVector 的行為相符 (#49020)。
  • eigen(A, B)eigvals(A, B),其中 AB 之一是對稱或 Hermitian,現在獲得完全支援 (#49533)。
  • eigvals/eigen(A, cholesky(B)) 現在會透過正定 B 的 Cholesky 分解來計算 AB 的廣義特徵值(eigen:和特徵向量)。注意:第二個引數是 cholesky 的輸出。

Printf

  • 格式規範器現在支援動態寬度和精度,例如 %*s%*.*g (#40105)。

REPL

  • 當列印堆疊追蹤時,函數簽章中類型的列印深度將受到限制,以避免過於冗長的輸出 (#49795)。

Test

  • @test_broken 巨集(或 @test 搭配 broken=true)現在會抱怨測試表達式回傳非布林值,就像非中斷測試一樣 (#47804).
  • 當呼叫 @test 在函式內失敗或發生錯誤時,現在會印出較大的堆疊追蹤,以便擷取 @testset 中測試的位置 (#49451).

InteractiveUtils

  • code_native@code_native 現在預設為 Intel 語法,而非 AT&T。
  • @time_imports 現在會顯示執行任何模組 __init__()s 的計時 (#49529).

已棄用或移除

  • @pure 巨集現在已棄用。請改用 Base.@assume_effects :foldable (#48682).