Julia v1.5 釋出
目錄
在新的 1.5 版是主要對記憶體的配置方式有改進,有最佳化記憶體布局(memory layout)。
重要功能
不可變型別(包含 tuples)現在可以被放到堆疊(stack)上,而且可以在陣列跟其他型別中被配置成 inline。(#33886)
有興趣的朋友可以查詢 inline allocation 相關關鍵字。如此一來就大幅降低了在堆積(heap)上配置的記憶體數量。
相對,任何需要是穩定定址(stable address)的物件就要必須是 mutable struct
。(#34126)
使用者功能
- 在互動式 REPL 環境提供了「軟性作用域」(soft scope)。像是在
for
loop 的作用域中要指定值給全域變數,是可行的。如同在 IJulia 所提供的 Jupyter 環境一樣,但這只影響 REPL 環境,不影響腳本執行環境。(#28789, #33864) - 如果在 REPL 外,例如腳本,執行以上行為會被視為模糊的(ambiguous),並且會發出 warning。
- 另外,有一個新的命令列選項是
--warn-scope
可以控制這個 warning。(#33864) - 在三個雙引號所形成的字串中,空白移除(whitespace stripping)會優於跳脫字元執行。如此一來,以下例子會有不同的結果:會產生
1
2"""
a\n b""""a\n b"
的字串,而不是" a\nb"
,兩者差別在a
之前有沒有空白。老舊的行為會被視為一種 bug。(#35001)
開發者功能
- 現在可以在每個模組(module)中使用編譯器最佳化等級(compiler optimization level),是使用
Base.Experimental.@optlevel n
來設定。對於並不是那麼效能需求(performance-critical),可以設定成 0 或 1,可以提供相當的延遲改善(latency improvements)。(#34896) @inline
可以被用在短型的匿名函數。(#34953)- 棄用警告(deprecation warnings)不再是預設顯示的,可以使用
--depwarn=no
來開啟。警告在執行測試Pkg.test()
時是會顯示的。(#35362) - 部份的多執行緒(multi-threading)API 被視為穩定。這包含了所有
Base.Threads
中被紀錄的 API,但除了atomic_
操作。 @threads
現在容許可選的排程參數(schedule argument)。用法像是@threads :static ...
。@ccall
現在被加入到 Base 中。這跟ccall
很像,但多了類 Julia 語法。他也包裝了新的foreigncall
API,支援 varargs 中不同的型別,不過他缺乏呼叫指定 LLVM calling convention 的能力。(#32748)@view
及@views
現在支援a[begin]
語法。(#35289)
新功能
⨟
現在是一個二元運算子,他是一個 composition operator,語意為f ⨟ g = g ∘ f
。在 REPL,可以使用\bbsemi
加上 TAB 打出來。(#34722)- 傳遞一個辨識子(identifier)
x
作為關鍵字參數或是 named tuple,會等同於x=x
,會隱含地使用變數名稱本身作為關鍵字參數的名稱或 named tuple 的名稱。同樣地,傳遞a.b
會使用b
作為名稱。(#29333) - 新增
mergewith
及mergewith!
取代merge
、merge!
及參數combine
的組合。(#34296) - 新增
isdisjoint
來指示兩個集合容器是否為互斥。(#34427) - 新增
ismutable
來取代isimmutable
,用來檢查某些東西是否為可變的。(#34652) - 新增
contains(haystack, needle)
行為如同occursin(needle, haystack)
。(#35132)
新支援
- 使用
open
開檔時,多了lock
關鍵字參數來控制檔案操作是否在多執行緒存取的狀況下需要鎖。當只有一個執行緒存取時,設定成false
會有較好的性能。(#35426)