Julia v1.4 已經釋出啦!這邊來跟大家介紹一些新功能。
底下新功能後面會有括弧,附註相關的實作程式碼。

重要功能

使用者功能

  • import 允許符號,例如 import Base.:+。(#33158)
  • 允許使用 a[begin] 來存取 a 的首位元素。首位元素的索引是由 firstindex(a) 計算得出。(#33946)
1
2
3
4
5
6
7
8
julia> x = [1,2,3]
3-element Array{Int64,1}:
1
2
3

julia> x[begin]
1
  • 值可以藉由 $ 內插到 @async@spawn 中,它會將值直接複製一份到閉包(closure)中。(#33119)

開發者功能

  • 結構 struct 當中,所有位元(isbits)或是位元聯集(isbitsunion)的欄位(fields)都會儲存為陣列的元素。(#32448)

以前在 Julia 的結構當中,只有所有欄位都有相同的型別,而且型別都是原始型別時,Julia 底層會將他們封裝到一個陣列中,如此可以加速。在 v1.4 版後放寬了這樣的限制,讓有所有位元欄位都儲存為陣列。

新功能

  • Iterators 模組中有 accumulate 實作。(#34033)

Jeff 頗驚訝,之前怎麼沒有這個功能XD

1
2
3
4
5
6
7
8
9
10
11
12
13
julia> x = [1,2,3]
3-element Array{Int64,1}:
1
2
3

julia> iter = Iterators.accumulate(+, x)
Base.Iterators.Accumulate{typeof(+),Array{Int64,1}}(+, [1, 2, 3])

julia> foreach(println, iter)
1
3
6

功能與 Base.accumulate 雷同,但是屬於 lazy evaluation。

  • evalpoly 可以用來計算多項式函數,例如 evalpoly(x, (p1, p2, p3))。(#32753)
1
2
julia> evalpoly(5, (10, 3, 1))
50

相當於計算 $p(5) = 10 + 3\times5 + 1\times5^2$。

  • 允許複合函數(function composition)∘(f, g, h) = f ∘ g ∘ h,以及解開 ∘(fs...),當中 fs 可以是 Iterable 的函數集合。(#33568)
1
2
3
4
5
6
7
8
9
10
11
julia> f(x) = x + 1
f (generic function with 1 method)

julia> g(x) = 2x
g (generic function with 1 method)

julia> F = f∘g
#64 (generic function with 1 method)

julia> F(5)
11

新支援

  • gcdlcmgcdx 支援 Rational 型別的參數。(#33910)
  • splitpath 支援任何 AbstractString 型別,然而以前只支援 String 的路徑。(#33012)
  • filter 可以作用在 Tuple 上。(#32968)