高性能動態語言 The Julia Language
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++但卻要簡潔得多。然而,規范和編制太過隨意可能會在將來成為一個問題。
Julia代碼示例:
function mandel(z) c = z maxiter = 80 for n = 1:maxiter if abs(z) > 2 return n-1 end zz = z^2 + c end return maxiter end function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i = 1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [a b c d] Q = [a b; c d] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end std(v)/mean(v), std(w)/mean(w) end
為并行處理和云計算而生
Julia為分布式計算提供很多關鍵模塊,使得它可以更加靈活地支持多種并行處理。
雖然還是早期版本,Julia已經支持了云計算。下面是基于交互性的Julia會話截圖:
Julia將提供更加完整的性能支持云計算操作,比如分享和編輯,包括數據管理、數據挖掘和可視化操作等。它還允許用戶操作大數據類型而不用關心數據操作行為。
免費、開源和Library Friendly
TJulia的核心代碼遵循MIT協議,而其他庫各自遵循GPL/LGPL/BSD等協議。用戶還可以方便地將Julia作為核心功能共享庫與C/FORTRAN代碼聯合使用。