Julia:集Python、C+、R等語言為一體的全新語言
21CTO導讀:Julia是數據科學家的一個「零妥協」的編程語言,它將動態語言的易用性與編譯語言的速度相結合的開發語言,目前它的1.0版本剛剛正式發布。
Julia語言的Logo
Julia是一款免費的開源,高級,高性能,動態編程語言,適用於數值計算。它兼具動態語言的開發便利性和編譯的靜態類型語言的性能,部分歸功於基於LLVM的JIT編譯器生成本機機器代碼,部分是通過多個專業化實現類型穩定性的設計,這使得代碼編譯更高效。
Julia 語言的官網:https://julialang.org/
Julia 語言項目地址:https://github.com/JuliaLang
在2012年宣布Julia首次發布的博客文章中,Jeff Bezanson,Stefan Karpinski,Viral Shah和Alan Edelman這三個作者表示,3個人花了三年時間創建Julia,他們非常「貪婪」。這幫人厭倦了要在Matlab,Lisp,Python,Ruby,Perl,Mathematica,R和C之間的權衡,想要一種有益於科學計算,機器學習,數據挖掘,大規模線性代數、並行計算和分散式計算的單一語言。
Julia除了對研究科學家和軟體工程師具有吸引力之外,Julia還對數據科學家以及金融分析師和量子計算也具有吸引力。
2015年7月,該語言的設計者創立了Julia Computing公司,以「開發Julia,它是易於使用,易於部署且易於擴展的產品。」為目標。截至撰寫本文時,該公司有28名員工,客戶從國家實驗室到銀行,從經濟學家到自動駕駛汽車研究人員均包括。除了在GitHub開源存儲庫上維護Julia之外,Julia Computing還提供商業產品,包括JuliaPro,有免費和付費兩個版本之區分。
從技術上來看,這種語言會長期發展下去。如今是一個里程碑的時刻。本周於倫敦舉辦的 Julia 語言年會上,Julia 1.0 正式發布,一起發布的還有 JuliaCon產品。
什麼是Julia?
Julia旨在以單一語言創建前所未有的易用性,功能和效率組合。對於它效率問題,請看以下圖片:
上圖顯示了Julia和其他10種語言相對於C語言的表現,越低越好。該圖執行的基準是非常低級的任務,是使用Jupyter中的Gadfly繪圖和數據可視化系統創建的。 Julia右邊的語言按幾何平均值排序,LuaJIT最快,GNU Octave的速度最慢。
對於幾種數據操作,Julia代碼比C語言更快,其它的操作會比C慢幾倍。相比之下,比如R語言,某些操作比C慢近1000倍。
Julia 1.0
如今Julia 在開發語言排行榜中已經開創了自己的一席之地。在GitHub上Julia 已經獲得了 12293 顆星。
此外,在TOIBE 8 月份編程語言排行榜(https://www.tiobe.com/tiobe-index/)上已攀升至第 50 名:
這一切,緣於Julia 開發者對該語言提出了很多「貪婪」的需求:
我們想要一種十分自由的開源語言,同時兼具 C 語言的速度和 Ruby 語言的靈活度。我們想要一種同像性語言,具有像 Lisp 一樣真正的宏,也有像 Maltlab 一樣淺顯易懂的數學符號。它是像 Python 一樣有用的通用編程語言,像 R 語言一樣便於統計的語言,像 Perl 一樣自然的字元串處理語言,像 Matlab 一樣強大的線性代數語言,也是像 shell 一樣的「膠水語言」。它簡單易學,卻能讓嚴苛的黑客們為之傾心。我們希望它兼具交互性和可編譯性。
為了這樣一個目標,世界各地的人們不斷地重塑並改進著 Julia。超過 700 人對 Julia 做出了實質性貢獻,更有不計其數的人製造了數千個驚人的 Julia 開源軟體包。社區構建了一種這樣的語言:
高速:Julia 為高性能而生。Julia 程序通過 LLVM 為多個平台編譯高效的本地代碼。
通用:它使用多分派作為範例,使得表達許多面向對象和函數式的編程模式變得容易。標準庫提供非同步 I/O、進程式控制制、日誌記錄、性能分析、包管理器等。
動態:Julia 是動態型語言,與腳本語言類似,並且支持互動式使用。
專業:它擅長數值計算,其語法適用於數學,支持多種數值數據類型,並具有良好並行性。Julia 的多分派天生適合定義數字和類數組的數據類型。
多樣:Julia 擁有豐富的描述性數據類型,類型聲明使程序條理清晰且穩定。
可組合:Julia 的包可以很好地組合在一起。單位數量的矩陣,或者貨幣和顏色的數據列表,都可以組合——而且性能很好。
現在, Julia語言 1.0 版本已經可以下載。1.0 不僅涉及穩定性,還引入了多種新的強大、創新性語言功能。Julia 1.0 的新功能專門構建了許多新的外部軟體包,如數據處理和操作生態系統的改進和異構架構支持的改進等。
對於1.0 這樣一個版本號,意味著語言做了大量的改進,如果你想查看完整的列表,可以訪問其官網:https://docs.julialang.org/en/release-0.7/NEWS/
Julia 的JIT編譯器
與純解釋器相比,JIT(即時)編譯器在代碼運行之前必須解析源代碼然後生成本地機器代碼,這與Java的VM很像,這樣也就意味著Julia程序在每個函數和宏第一次會話運行時會有一些啟動時間。可以在下面的屏幕截圖中,看到第二次生成一百萬個隨機浮點數時,所花費的時間比第一次執行時少一個數量級。 @time宏和rand()函數都需要在代碼中首次編譯,因為Julia庫是用Julia編寫的。
來看如下命令行代碼:
julia>@timerand(10^6);
0.62081seconds(14.44k allocations:8.415MiB)
julia>@timerand(10^6);
0.004881seconds(7allocations:7.630MiB)
Julia粉絲聲稱它比Python更易於使用,包括R甚至Matlab。 這些數據比較值得開發者仔細研究。Julia語言被設計的優雅,功能強大,並且面向科學計算,而且庫提供了廣泛的高級編程功能。
Julia的代碼實例
以下是一段Julia語言示例,是類似Mandelbrot的基準代碼:
可以看到,Julia中內置了複數運算,測試和計時的宏也是如此。Julia沒有那些C語言系的尾隨分號,以及Lisp語言困擾程序員的嵌套括弧。請注意,mandelperf()在第61行和第62行中被調用兩次。第一次調用測試結果的正確性並執行JIT編譯;第二次則直接出結果。
JuliaPro和Juno IDE
你可以從Julia語言官網(https://julialang.org/)下載適用於Windows,MacOS,通用的Linux或FreeBSD的免費開源Julia命令行。 然後從GitHub克隆Julia源代碼存儲庫。
除了編譯器之外,JuliaPro還提供了基於Atom的Juno IDE(如下所示)和160多個軟體包,包括可視化和繪圖相關功能。
除了免費的JuliaPro之外,還可以添加企業支持訂閱,量化財務功能,資料庫支持和時間序列分析等。 JuliaRun是集群或可擴展的雲伺服器。
Juno是一個基於Atom文本編輯器的免費Julia IDE
Jupyter NotePad和IJulia
除了使用Juno作為Julia IDE之外,還可以使用帶有Julia擴展的Visual Studio Code(如下所示)和帶有IJulia內核的Jupyter NotePad(如下面的第二和第三個屏幕截圖所示)。
使用Visual Studio Code 之 Julia 擴展
啟動Julia內核從Jupyter notebook
科學家與研究人員的價值
科學家或研究人員在Julia上會發現更多感興趣的包,我們可以從上面右欄中的類別名稱中看到。 此外Julia的許多語言特徵都面向科學計算,工程和分析。 比如,在下面的截圖中,矩陣和線性代數都是在複雜的層次上構建到語言中的。
Julia為多維數組和線性代數運算提供了複雜的支持
開始學習Julia
開發者可以免費使用Julia和眾多開源軟體包,也可以在需要時購買企業支持和高級功能。
首先,使用全局變數會讓Julia變慢。這是因為全局範圍內的變數沒有固定類型,除非聲明類型,這反過來意味著使用全局變數的函數和表達式必須處理任意種類型。在函數範圍內聲明變數會更有效,因此可以確定它們的類型,並且可以生成使用它們的簡單代碼。
其次,我們需要了解,在Julia命令行中在頂層聲明的變數就是全局變數。如果你不能避免這樣做,可以通過聲明const常量來使性能更好或更安全一些。這並不意味著變數的值不能改變,只是變數的類型不能更改。
我們可以閱讀Julia手冊和Julia學習資源的網站,如http://julia-cn.readthedocs.io/zh_CN/latest/。除了閱讀這個手冊,還可能觀看Jane Herriman的入門視頻教程。
如果你更喜歡在自己的機器而不是JuliaBox上進行操作,可以從GitHub克隆JuliaBoxTutorials repo並從Jupyter運行Local_installations安裝所需的所有軟體包,這樣就可以愉快地在本地調試Julia了。
編譯:洛逸
來源:21CTO社區
讚賞作者,加個雞腿吧~


※如果你正在對Python爬蟲蠢蠢欲動?那麼我現在帶你徹底了解它!
※屌炸天,Oracle 發布了一個全棧虛擬機 GraalVM,支持 Python!
TAG:Python |