天天看點

python julia_如果你喜歡python,那你遲早會喜歡上julia的!

你可曾想過有那麼一門語言:

這門語言能夠有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++。

下面通過标準測試程式來測試下它的效率,你可以自己比較下各語言的運作效率。

python julia_如果你喜歡python,那你遲早會喜歡上julia的!

注:運作環境是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/