你可曾想過有那么一門語言:
這門語言能夠有C語言一樣的速度,Ruby一樣得活力(dynamism)。像homoiconic一樣的語言,它像Lisp一樣有宏,但是也像Matlab一樣有顯而易見、熟悉的數學標記。
像Python一樣適用,像R語言一樣適用於統計,像Perl一樣適用於字符串處理,像線性代數Matlab一樣強大,像shell一樣擅長粘合程序。 它還具有互動性且能夠被編譯。
她的名字叫: Julia
Julia是一個新的高性能動態高級編程語言。語法和其他編程語言類似,易於其他語言用戶學習。Julia擁有豐富的函數庫,提供了數字精度、精致的增幅器(sophisticated amplifier)和分布式並行運行方式。核心函數庫等大多數庫是由Julia編寫,但也用成熟的C和FORTRAN庫來處理線性代數、隨機數產生和字符串處理等問題。Julia語言可定義函數並且根據用戶自定義的參數類型組合再進行重載。
JIT高性能編譯器
Julia使用的JIT(Just-in-Time)實時編譯器很有效地提高了它的運行效率,在某些地方甚至能比得上C和C++。
下面通過標准測試程序來測試下它的效率,你可以自己比較下各語言的運行效率。
注:運行環境是MacBook Pro,2.53GHz,Intel Core2 Duo CPU和8G 1066MHz,DDR3內存。
上表中只有C++運行時間是絕對時間,其它都是相對於C++的相對時間,數值越小代表用時越少。除少數幾項測試Julia惜敗於Matlab和JavaScript外,Julia完勝其他高級語言,甚至在pi summation上,成功以25%的優勢擊敗C++。通過使用Intel核心數學庫(MKL),MatLabs在矩陣乘法運算中稍占便宜,但是擁有MKL授權的Julia同樣可以使用Intel MKL庫,不過默認的開源BLAS庫性能也不錯。
這個測試表是通過編譯器性能對一系列常用代碼模式進行分析而得出的。比如:字符串解析、函數調用/回調、排序和數值循環、生成隨機數和數組運算等。
Julia克服了高級語言一直難以逾越的難關:標量算數循環(在pi summation上就能體現出來。)。Matlab的浮點運算JIT和 V8 JS引擎對此也處理得很好。但JS不支持LAPACK等線性代數庫導致了在矩陣運算中的低性能,而Julia有比較多的方法消除負載(overhead),使得它可以輕松支持任何函數庫。
矩陣統計的Julia代碼雖然性能上比不上C++但卻要簡潔得多。然而,規范和編制太過隨意可能會在將來成為一個問題。
參考:
1. http://julialang.org/