Julia第一次釋出時,就宣告了該程式語言宏大的目標,除了要有C一樣的執行速度外,還要如同Python成為一個具一般可用性的語言,也想要如同Matlab支援線性代數演算法,字串處理能力要能與Perl匹敵等各式需求,而官方在Julia 1.0釋出文章中,有自信的列出了Julia數個特點。

Julia一開始設計就以高效能運算為目標,Julia的程式可以用LLVM編譯成多平臺的高效能原生執行碼。Julia也兼具一般性,能使用多重調度作為範式,讓該語言容易表達多物件導向與函式程式設計模式,其標準函式庫提供了非同步I/O、程序控制、日誌紀錄、概要分析以及套件管理器等。

作為Julia的目標之一,是能具備如同Ruby一樣的動態特性,因此官方讓Julia成為動態型別的語言,就像是腳本語言一樣,在互動使用上有很好的支援。而在專業運算支援方面,官方也在Julia下足了功夫,因此Julia也適合用於數學的數值運算,支援多種數值資料型態,而其多重調度的特性,更加適合用於定義數字與陣列的資料型態。

Julia是具有豐富的描述性資料型態的語言,型態宣告可以讓程式更加清楚與強健。而Julia套件間也可以進行良好的協同工作,無論是單位數量的矩陣,或是顏色和貨幣的資料表格欄位,都能高效能的運作。

官方提到,Julia並非半生不熟的程式語言,因此1.0最重要的更新,也就是API的穩定性。開發者使用Julia 1.0開發的程式,也能在1.1、1.2版本中運作,這也能幫助語言開發團隊或是社群可以放心開發套件、工具與新功能。而跟著1.0發布的是全新的套件管理器,簡化了安裝套件以及管理相依性的工作,同時也支援個別專案的套件環境,能與他人分享工作應用程式狀態,而且還能無縫支援私有套件與套件儲存庫,因此開發者可把用於開源套件生態系的工具,使用在安裝與管理私有套件。

Julia 1.0為了可以良好支援統計與資料科學應用,引入了新的規範以表示缺失值,官方強調,能夠表示和處理缺失的資料,是統計和資料科學應用的基本。Julia 1.0中,任何泛型集合型態都能透過讓元素包含預定義的缺失值,來有效率的處理缺失值。過去Julia處理這種聯合型態的集合效率極差,但在改進編譯器後,這個問題獲得改善。

另外,迭代協定也重新設計,開發者能更容易實現多種迭代,有別過去定義三個不同泛型函式的方法,現在只要定義一個迭代函式以及兩個參數方法。而內建的字串型態現在已經可以安全的保存任意資料,程式不再會因為字串中放入了一個無效的Unicode雜散位元組而崩潰。

Julia的最佳化器(Optimizer)也是這次更新的一大亮點,現在最佳化器可以透過呼叫函數傳播常量,進而做到更好的死碼刪除(Dead Code Elimination)和靜態評估。而編譯器也更善於避免在長效物件旁分配短效包裝器(Wrapper),這讓開發者可以在不損失效能的情況下,容易的使用高階抽象。

Julia是一個非常精簡的語言,許多功能組件被拆分成標準函式庫套件,雖然這些套件隨附在Julia中,但不屬於語言基礎的一部分,這些標準函式庫將獨立於Julia,進行本身的版本控制與升級。官方在發布Julia 1.0時,對API做了徹底的檢視,過去模糊的命名以及低效能的程式編寫模式,都被重新命名與重構,以維持語言的一致性與可用性。

想要從0.6或是更早版本的Julia升級成1.0的開發者,官方建議,可以先升級到0.7版本。由於0.7版本是一個過渡版本,會發出棄用警告,協助指引開發者升級程序,在程式碼沒有警告後,就可以無痛的升級至Julia 1.0版本。既存的套件也使用這個過渡方式,發布與1.0相容的更新。


Advertisement

更多 iThome相關內容