蘋果發佈 Swift 的數學計算項目:Swift Numerics

Swift 標準函數庫團隊成員 Steve Canon 宣佈 Swift 開源生態又添一員 —— Swift Numerics。這是用於 Swift 的 Numerical API,源碼託管在 GitHub 上,旨在迅速填補標準庫現有 API 中的一些重要空白,併為 Swift 編程開拓新領域。


蘋果發佈 Swift 的數學計算項目:Swift Numerics

據介紹,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 的支持。


分享到:


相關文章: