近年來,Julia 語言已然成為編程界的新寵。這門由 MIT CSAIL 實驗室開發(fā)的編程語言結(jié)合了 C 語言的速度、Ruby 的靈活、Python 的通用性,以及其他各種語言的優(yōu)勢于一身,并且具有開源、簡單易掌握的特點(diǎn),大有潛力成為取代 Python 的下一個語言。
8 日,Julia 正式發(fā)布 1.0 版本。Julia 團(tuán)隊表示:“Julia 1.0 版本是我們?yōu)槿琊囁瓶实?a target="_blank">程序員構(gòu)建一種全新語言數(shù)十年來工作成果的巔峰?!?那么問題來了,Julia 真有這么神?你做好學(xué)習(xí)一門新編程語言的準(zhǔn)備了嗎?
為什么你應(yīng)該學(xué)習(xí) Julia?
從 2012 年到現(xiàn)在,Julia 1.0 在編程界已經(jīng)打出了自己的一片 “小天地”。截至發(fā)稿前,Julia 在 Github 上已經(jīng)獲得了 12293 顆星星,TOIBE8 月份編程語言排行榜上已迅速攀升至第 50 名。
Julia 之所以這么受歡迎,這與它解決了工程師們一個 “坑爹” 問題有關(guān):工程師們?yōu)榱嗽跀?shù)據(jù)分析中獲得速度和易用性,不得不首先用一種語言編碼,然后用另一種語言重寫,即很多人口中的“雙語言問題”。
與其他語言相比,Julia 易于使用,大幅減少了需要寫的代碼行數(shù);并且能夠很容易地部署于云容器,有更多的工具包和庫,并且結(jié)合了多種語言的優(yōu)勢。據(jù) Julia Computing 的宣傳,在七項基礎(chǔ)算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。
目前 Julia 的應(yīng)用范圍已經(jīng)非常廣泛了,可以用于天文圖像分析、自動駕駛汽車、機(jī)器人和 3D 打印機(jī)、精準(zhǔn)醫(yī)療、增強(qiáng)現(xiàn)實、基因組學(xué)和風(fēng)險管理等領(lǐng)域。
兩年前,諾貝爾經(jīng)濟(jì)學(xué)獎得主 Thomas Sargent 和澳大利亞國立大學(xué)的經(jīng)濟(jì)學(xué)教授 John Stachurski,共同建議紐約聯(lián)邦儲備銀行把其用于市場走勢預(yù)測和政策分析的 “動態(tài)隨機(jī)一般均衡模型(DSGE)” 轉(zhuǎn)到 Julia 語言平臺。在項目第一階段后,他們發(fā)現(xiàn),Julia 把模型運(yùn)行時間縮短至原先 Matlab 代碼的十分之一到四分之三。
除了語言本身的優(yōu)點(diǎn),Julia 還擁有非常強(qiáng)大的生態(tài)系統(tǒng),主要應(yīng)用于數(shù)據(jù)可視化、通用計算、數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、科學(xué)領(lǐng)域、并行計算六大領(lǐng)域。
Julia 在規(guī)?;瘷C(jī)器學(xué)習(xí)領(lǐng)域為深度學(xué)習(xí)、機(jī)器學(xué)習(xí)和 AI 提供了強(qiáng)大的工具(Flux 和 Knet)。Julia 的數(shù)學(xué)語法使其成為表達(dá)算法的理想方式,支持構(gòu)建具有自動差異的可訓(xùn)練模型,支持 GPU 加速和處理數(shù) TB 的數(shù)據(jù)。Julia 豐富的機(jī)器學(xué)習(xí)生態(tài)系統(tǒng)還提供監(jiān)督學(xué)習(xí)算法(如回歸、決策樹)、無監(jiān)督學(xué)習(xí)算法(如聚類)、貝葉斯網(wǎng)絡(luò)和馬爾可夫鏈蒙特卡羅包等。
Julia 目前下載量已經(jīng)達(dá)到了200 萬次,Julia 社區(qū)開發(fā)了超過1900 多個擴(kuò)展包。這些擴(kuò)展包包含各種各樣的數(shù)學(xué)庫、數(shù)學(xué)運(yùn)算工具和用于通用計算的庫。除此之外,Julia 語言還可以輕松使用 Python、R、C/C++ 和 Java 中的庫,這極大地擴(kuò)展了 Julia 語言的使用范圍。
所以說,Julia 火起來不是沒有原因的,而最新發(fā)布的 1.0 版本又添加了很多新功能。
按例,先貼上新版本相關(guān)鏈接:
Julia 1.0 試用版鏈接:
https://julialang.org/downloads/
GitHub 地址:https://github.com/JuliaLang/julia
目前支持 Julia 的平臺:
Julia 到底是怎樣一門語言?
Julia 首次公開面世時便體現(xiàn)出該社區(qū)對語言的一些強(qiáng)烈要求:
我們想要一種擁有自由許可的開源語言。我們想要它擁有 C 的速度與 Ruby 的靈活。它要容易理解,像 Lisp 一樣真正地支持宏,但也要有像 Matlab 一樣的明顯、熟悉的數(shù)學(xué)符號。它還要像 Python 一樣可用于通用編程,像 R 一樣易于統(tǒng)計,像 Perl 一樣可自然地用于字符串處理,像 Matlab 一樣擅長線性代數(shù),像 shell 一樣擅長將程序粘合在一起。總之,它既要簡單易學(xué),但也要讓最嚴(yán)肅的黑客開心。我們既希望它是交互式,也希望它是可編譯的。
現(xiàn)在,一個充滿活力和蓬勃發(fā)展的社區(qū)圍繞著這種語言成長起來,來自世界各地的人們在追求這一目標(biāo)的過程中不斷地精煉并重塑著 Julia。超過 700 人為 Julia 做出了貢獻(xiàn),還有很多人制作了數(shù)以千計的令人驚嘆的開源 Julia 軟件包。
總而言之,我們建立的語言:
快速:Julia 就是為高性能而設(shè)計的。Julia 程序通過 LLVM 編譯為多個平臺的高效本機(jī)代碼。
通用:它使用多個調(diào)度作為范例,使得它很容易表達(dá)眾多面向?qū)ο蠛秃瘮?shù)編程的模式。它的標(biāo)準(zhǔn)庫提供異步 I / O、進(jìn)程控制、日志記錄、概要分析、軟件包管理器等。
動態(tài):Julia 是動態(tài)類型的,就像一種腳本語言,并且很好地支持交互式使用。
技術(shù):它擅長于數(shù)值計算,其語法非常適合數(shù)學(xué),支持的數(shù)字?jǐn)?shù)據(jù)類型眾多,并具有開箱即用并行性。Julia 的多次調(diào)度非常適合定義數(shù)字和數(shù)組類型的數(shù)據(jù)類型。
(可選)鍵入:Julia 具有豐富的描述性數(shù)據(jù)類型語言,類型聲明可用于闡明和鞏固程序。
可組合:Julia 的軟件包可以很好地協(xié)同工作。單位數(shù)量矩陣,貨幣和顏色數(shù)據(jù)表都可以進(jìn)行,并且性能良好。
如果你要從 Julia 0.6 或更早版本升級代碼,我們建議首先使用過渡版 0.7,其中包括棄用警告幫助指導(dǎo)完成升級。如果你的代碼沒有警告,則可以更改為 1.0 而無需任何功能更改。已注冊的軟件包正在使用該過渡版本發(fā)布 1.0 兼容的更新。
1.0 更新了哪些功能?
當(dāng)然,Julia 1.0 中最重要的一個新功能是對語言 API 穩(wěn)定性的承諾:你為 Julia 1.0 編寫的代碼可以繼續(xù)在 Julia 1.1、1.2 等版本中運(yùn)行。該語言是 “已完善” 的,核心語言開發(fā)人員和社區(qū)都可以放心使用基于此版本的軟件包、工具和新功能。
但 Julia 1.0 更新的不僅是穩(wěn)定性,它還引入了一些強(qiáng)大、創(chuàng)新的語言功能。自 0.6 版以來,新發(fā)布的一些功能包括:
全新的內(nèi)置軟件包管理器性能得以大幅改進(jìn),使安裝包及其 dependencies 項變得前所未有的簡單。它還支持每個項目的包環(huán)境,并記錄工作應(yīng)用程序的確切狀態(tài),以便與他人和你自己進(jìn)行共享。最后,新的設(shè)計還引入了對私有包和包存儲庫的無縫支持。你可以使用與開源軟件包生態(tài)系統(tǒng)相同的工具來安裝和管理私有軟件包。JuliaCon 上展示了新功能設(shè)計的詳細(xì)情況:
https://www.youtube.com/watch?v=GBi__3nF-rM
Julia 有了一個新的規(guī)范表示缺失值(https://julialang.org/blog/2018/06/missing)。能夠表示和處理缺失的數(shù)據(jù)是統(tǒng)計和數(shù)據(jù)科學(xué)的基礎(chǔ)。與 Julian 的一貫風(fēng)格相符,這個新的解決方案具有通用性、可組合性和高性能。任何泛型集合類型都可以通過讓元素包含 missing 的預(yù)定義值來有效地支持缺失值。在以前的 Julia 版本中,這種 “聯(lián)合類型” 集合的性能會太慢,但編譯器的改進(jìn)現(xiàn)在使得 Julia 可以跟上其他系統(tǒng)中自定義 C 或 C ++ 缺失數(shù)據(jù)表示的速度,同時也更加通用和靈活。
內(nèi)置的 String 類型現(xiàn)在可以安全地保存任意數(shù)據(jù)。你的程序數(shù)小時甚至數(shù)天的工作不再會因為一些無效 Unicode 雜亂字節(jié)而失敗。保留所有字符串?dāng)?shù)據(jù),同時標(biāo)記哪些字符有效或無效,可以使你的應(yīng)用程序安全方便地處理不可避免具有缺陷的真實數(shù)據(jù)。
語法簡單的廣播(Broadcasting)已經(jīng)成為核心語言功能,現(xiàn)在它比以往任何時候功能都更強(qiáng)大。在 Julia 1.0 中,將廣播擴(kuò)展到自定義類型并在 GPU 和其他矢量化硬件上實現(xiàn)高效優(yōu)化計算變得更簡單,為將來提高性能提升鋪平了道路。
命名元組是一種新的語言特性,它使得通過名稱表示和訪問數(shù)據(jù)變得高效快捷。例如,你可以將一行數(shù)據(jù)表示為 row =(name =“Julia”,version = v“1.0.0”,releases = 8),并將版本列作為 row.version 訪問,其性能與不甚快捷的 row [2] 相同。
點(diǎn)運(yùn)算符現(xiàn)在可以重載,讓類型使用 obj.property 語法來獲取和設(shè)置結(jié)構(gòu)字段之外的含義。這對于使用 Python 和 Java 等基于類的語言更順暢地進(jìn)行互操作是個福音。屬性訪問器重載還允許獲取一列數(shù)據(jù)以匹配命名元組語法的語法:你可以編寫 table.version 來訪問表的 version 列,就像 row.version 訪問單行的 version 字段一樣。
Julia 的優(yōu)化器在很多方面變得比我們在這里提到的更聰明,但有一些亮點(diǎn)值得一提。優(yōu)化器現(xiàn)在可以通過函數(shù)調(diào)用傳播常量,可以更好地做到死碼消除和靜態(tài)評估。另外,編譯器在避免在長生命周期對象周圍分配短期包裝器方面也要好得多,這使得程序員可以使用便利的高級抽象而無需降低性能成本。
現(xiàn)在使用聲明相同的語法調(diào)用參數(shù)類型構(gòu)造函數(shù)。這消除了語言語法的模糊和令人困惑的地方。
迭代協(xié)議已經(jīng)完全重新設(shè)計,以便更容易實現(xiàn)多種迭代?,F(xiàn)在是一對一定義一個或兩個參數(shù)方法,而不是定義三個不同泛型函數(shù)的方法——start,next,和 done。這通常使得使用具有開始狀態(tài)的默認(rèn)值的單個定義可以更方便地定義迭代。更重要的是,一旦發(fā)現(xiàn)無法生成值就可以部署迭代器。這些迭代器在 I / O、網(wǎng)絡(luò)和生產(chǎn)者 / 消費(fèi)者模式中無處不在;Julia 現(xiàn)在可以用簡單直接的方式表達(dá)這些迭代器。
范圍規(guī)則簡化。無論名稱的全局綁定是否已存在,引入本地范圍的構(gòu)造現(xiàn)在都是一致的。這消除了先前存在的 “軟 / 硬范圍” 區(qū)別,并且意味著現(xiàn)在 Julia 可以始終靜態(tài)地確定變量是本地的還是全局的。
語言本身非常精簡,許多組件被拆分為 “標(biāo)準(zhǔn)庫” 軟件包,這些軟件包隨 Julia 一起提供但不屬于 “基礎(chǔ)” 語言。如果你需要它們,它可以給你方便(不需要安裝),但不會被強(qiáng)加給你。在未來,這也將允許標(biāo)準(zhǔn)庫獨(dú)立于 Julia 本身進(jìn)行版本控制和升級,從而允許它們以更快的速度發(fā)展和改進(jìn)。
我們對 Julia 的所有 API 進(jìn)行了徹底的審查,以提高一致性和可用性。許多模糊的遺留名稱和低效的編程模式已被重命名或重構(gòu),以更優(yōu)雅地匹配 Julia 的功能。這促使使用集合更加一致和連貫,以確保參數(shù)排序遵循整個語言的一致標(biāo)準(zhǔn),并在適當(dāng)?shù)臅r候?qū)ⅲìF(xiàn)在更快)關(guān)鍵字參數(shù)合并到 API 中。
圍繞 Julia 1.0 新功能的新外部包正在構(gòu)建中。例如:
正在改進(jìn)數(shù)據(jù)處理和操縱生態(tài)系統(tǒng),以利用新的缺失支持
Cassette.jl(https://github.com/jrevels/Cassette.jl)提供了一種強(qiáng)大的機(jī)制,可以將代碼轉(zhuǎn)換傳遞注入 Julia 的編譯器,從而實現(xiàn)事后分析和現(xiàn)有代碼的擴(kuò)展。除了用于分析和調(diào)試等程序員的工具之外,甚至可以實現(xiàn)機(jī)器學(xué)習(xí)任務(wù)的自動區(qū)分。
異構(gòu)體系結(jié)構(gòu)支持得到了極大的改進(jìn),并且與 Julia 編譯器的內(nèi)部結(jié)構(gòu)進(jìn)一步分離。英特爾 KNL 只能用 Julia 工作。Nvidia GPU 使用 CUDANative.jl(https://github.com/JuliaGPU/CUDAnative.jl)軟件包進(jìn)行編程,Google TPU 的端口正在開發(fā)中。
另外,Julia 1.0 還有無數(shù)其他大大小小的改進(jìn)。有關(guān)更改的完整列表,請參閱文件:https://docs.julialang.org/en/release-0.7/NEWS/。
在 2012 年的文章《為什么我們創(chuàng)造 Julia》這篇博客文章中(https://julialang.org/blog/2012/02/why-we-created-julia),我們寫道:
它不完整,但現(xiàn)在是 1.0 發(fā)布的時候——我們創(chuàng)建的語言叫做 Julia。
現(xiàn)在,我們提前叩響了 1.0 版本發(fā)布的扳機(jī),但它發(fā)布的時刻已然到來。真誠地為這些年來為這門現(xiàn)代化編程語言做出貢獻(xiàn)的人們感到驕傲。
-
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141772 -
編程語言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36659 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134625
原文標(biāo)題:Python、C++、R 三位一體!Julia 1.0 重磅發(fā)布
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論