目錄

  1. 重要功能
    1. 使用者功能
    2. 開發者功能
  2. 新功能
  3. 新支援

在新的 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)
  • 新增 mergewithmergewith! 取代 mergemerge! 及參數 combine 的組合。(#34296)
  • 新增 isdisjoint 來指示兩個集合容器是否為互斥。(#34427)
  • 新增 ismutable 來取代 isimmutable,用來檢查某些東西是否為可變的。(#34652)
  • 新增 contains(haystack, needle) 行為如同 occursin(needle, haystack)。(#35132)

新支援

  • 使用 open 開檔時,多了 lock 關鍵字參數來控制檔案操作是否在多執行緒存取的狀況下需要鎖。當只有一個執行緒存取時,設定成 false 會有較好的性能。(#35426)