蘋果發布Swift 的數學計算項目:Swift Numerics
Swift標準函數庫團隊成員Steve Canon 宣布 Swift開源生態又添一員—— Swift Numerics。這是用於Swift的Numerical API,源碼託管在GitHub上,旨在迅速填補標準庫現有API中的一些重要空白,並為Swift編程開拓新領域。
據介紹,Swift Numerics 可為Swift 開發者提供構建數值運算的基礎,相關的數值運算模塊都會捆綁在一起,並以獨立的 Swift 組件發布。
Steve Canon 已在 Swift Numerics 的GitHub 倉庫中內置了兩個呼聲甚高的數學計算模塊,分別是實數模塊(Real Number)和提供複數運算的複數(Complex Number)模塊。SE-0246 提案建議在Swift 中加入基礎數學函數API,提供諸如三角函數與對數等通用運算。這項提案已經被接受,但由於編譯器的限制,該API 還不能被加到標準函數庫中,因此實數模塊將以獨立的模塊提供API,開發者現在可在項目中使用這些功能。
實數模塊定義了三個協議。最通用的是ElementaryFunctions
,它提供以下函數:
- 指數函數:
exp
,expMinusOne
- 對數函數:
log
,log(onePlus:)
- 三角函數:
cos
,sin
,tan
- 反三角函數:
acos
,asin
,atan
- 雙曲線函數:
cosh
,sinh
,tanh
- 反雙曲線函數:
acosh
,asinh
,atanh
- 冪函數和根函數:
pow
,sqrt
,root
複數模塊則是創建於基礎實數類型之上(官方說法是複數模塊基於實數模塊構建)。我們都知道複數在數學計算中經常會用到,尤其是在進行傅立葉轉換的時候,處理音頻或是電路仿真時都會用到復數。Steve Canon 提到,在開發者日常使用時,函數庫通常會自動隱藏這些複數消息,但是當要開發相關函數庫時,複數模塊會是很重要的工具。
Steve Canon 還解釋了不在標準函數庫中提供Swift Numerics 功能,而要利用組件的形式發布的原因。他表示這其中存在許多考量,但最主要的原因是,他認為並非所有內容都應該放進標準函數庫中。隨著時間變遷,Swift Numerics 中的部分功能可能會被放進標準函數庫中,但在默認情況下,某些模塊不應默認加入到每一個項目裡,它們應有一個自己專屬的地方,而Swift Numerics 就是這類數學計算模塊的集合,就像SwiftNIO 組件是專門提供網絡相關功能一樣。
另外,以組件打包的好處還包括Swift Numerics 的更新將不受Swift 版本發布的時間限制,開發者可以在進入穩定版之前,先發布測試模塊進行試驗。
Steve Canon 還提到,接下來他們還會為Swift Numerics 加入重要的ShapedArray 協議以及支持的類型,讓開發者能方便地表達多維度的同質數據,此外還會增加對Float16 的支持。