Julia v1.10 發行說明
新語言功能
- JuliaSyntax.jl 現在用作預設的剖析器,提供更好的診斷和更快的剖析。如有需要,設定環境變數
JULIA_USE_FLISP_PARSER
為1
以切換回舊的剖析器(如果您發現有此需要,請提交問題) (#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
物件的伴隨和轉置不再分別包裝在Adjoint
和Transpose
包裝器中。相反,它們包裝在AdjointFactorization
和TranposeFactorization
類型中,它們本身是Factorization
的子類型 (#46874)。- 用於提取矩陣的 Hermitian(實對稱)部分的新函數
hermitianpart
和hermitianpart!
(#31836)。 AbstractMatrix
的伴隨或轉置的norm
現在預設傳回父矩陣的範數,這與目前AbstractVector
的行為相符 (#49020)。eigen(A, B)
和eigvals(A, B)
,其中A
或B
之一是對稱或 Hermitian,現在獲得完全支援 (#49533)。eigvals/eigen(A, cholesky(B))
現在會透過正定B
的 Cholesky 分解來計算A
和B
的廣義特徵值(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).