當前位置:
首頁 > 新聞 > Python、C+、R 三位一體!Julia 1.0 重磅發布

Python、C+、R 三位一體!Julia 1.0 重磅發布

新智元推薦

來源:AI前線(ID:ai-front)

編譯: Debra 編輯: Vincent

【新智元導讀】近年來,Julia 語言已然成為編程界的新寵。這門由 MIT CSAIL 實驗室開發的編程語言結合了 C 語言的速度、Ruby 的靈活、Python 的通用性,以及其他各種語言的優勢於一身,並且具有開源、簡單易掌握的特點,大有潛力成為取代 Python 的下一個語言。

8 日,Julia 正式發布 1.0 版本。Julia 團隊表示:「Julia 1.0 版本是我們為如饑似渴的程序員構建一種全新語言數十年來工作成果的巔峰。」 那麼問題來了,Julia 真有這麼神?你做好學習一門新編程語言的準備了嗎?

為什麼你應該學習 Julia?

從 2012 年到現在,Julia 1.0 在編程界已經打出了自己的一片 「小天地」。截至發稿前,Julia 在 Github 上已經獲得了 12293 顆星星,TOIBE8 月份編程語言排行榜上已迅速攀升至第 50 名。

Julia 之所以這麼受歡迎,這與它解決了工程師們一個 「坑爹」 問題有關:工程師們為了在數據分析中獲得速度和易用性,不得不首先用一種語言編碼,然後用另一種語言重寫,即很多人口中的「雙語言問題」。

與其他語言相比,Julia 易於使用,大幅減少了需要寫的代碼行數;並且能夠很容易地部署於雲容器,有更多的工具包和庫,並且結合了多種語言的優勢。據 Julia Computing 的宣傳,在七項基礎演算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍

目前 Julia 的應用範圍已經非常廣泛了,可以用於天文圖像分析、自動駕駛汽車、機器人和 3D 印表機、精準醫療、增強現實、基因組學和風險管理等領域。

兩年前,諾貝爾經濟學獎得主 Thomas Sargent 和澳大利亞國立大學的經濟學教授 John Stachurski,共同建議紐約聯邦儲備銀行把其用於市場走勢預測和政策分析的 「動態隨機一般均衡模型(DSGE)」 轉到 Julia 語言平台。在項目第一階段後,他們發現,Julia 把模型運行時間縮短至原先 Matlab 代碼的十分之一到四分之三。

除了語言本身的優點,Julia 還擁有非常強大的生態系統,主要應用於數據可視化、通用計算、數據科學、機器學習、科學領域、並行計算六大領域。

Julia 在規模化機器學習領域為深度學習、機器學習和 AI 提供了強大的工具(Flux 和 Knet)。Julia 的數學語法使其成為表達演算法的理想方式,支持構建具有自動差異的可訓練模型,支持 GPU 加速和處理數 TB 的數據。Julia 豐富的機器學習生態系統還提供監督學習演算法(如回歸、決策樹)、無監督學習演算法(如聚類)、貝葉斯網路和馬爾可夫鏈蒙特卡羅包等。

Julia 目前下載量已經達到了200 萬次,Julia 社區開發了超過1900 多個擴展包。這些擴展包包含各種各樣的數學庫、數學運算工具和用於通用計算的庫。除此之外,Julia 語言還可以輕鬆使用 Python、R、C/C++ 和 Java 中的庫,這極大地擴展了 Julia 語言的使用範圍。

所以說,Julia 火起來不是沒有原因的,而最新發布的 1.0 版本又添加了很多新功能。

按例,先貼上新版本相關鏈接:

Julia 1.0 試用版鏈接:

https://julialang.org/downloads/

GitHub 地址:https://github.com/JuliaLang/julia

目前支持 Julia 的平台:

Julia 到底是怎樣一門語言?

Julia 首次公開面世時便體現出該社區對語言的一些強烈要求:

我們想要一種擁有自由許可的開源語言。我們想要它擁有 C 的速度與 Ruby 的靈活。它要容易理解,像 Lisp 一樣真正地支持宏,但也要有像 Matlab 一樣的明顯、熟悉的數學符號。它還要像 Python 一樣可用於通用編程,像 R 一樣易於統計,像 Perl 一樣可自然地用於字元串處理,像 Matlab 一樣擅長線性代數,像 shell 一樣擅長將程序粘合在一起。總之,它既要簡單易學,但也要讓最嚴肅的黑客開心。我們既希望它是互動式,也希望它是可編譯的。

現在,一個充滿活力和蓬勃發展的社區圍繞著這種語言成長起來,來自世界各地的人們在追求這一目標的過程中不斷地精鍊並重塑著 Julia。超過 700 人為 Julia 做出了貢獻,還有很多人製作了數以千計的令人驚嘆的開源 Julia 軟體包。

總而言之,我們建立的語言:

快速:Julia 就是為高性能而設計的。Julia 程序通過 LLVM 編譯為多個平台的高效本機代碼。

通用:它使用多個調度作為範例,使得它很容易表達眾多面向對象和函數編程的模式。它的標準庫提供非同步 I / O、進程式控制制、日誌記錄、概要分析、軟體包管理器等。

動態:Julia 是動態類型的,就像一種腳本語言,並且很好地支持互動式使用。

技術:它擅長於數值計算,其語法非常適合數學,支持的數字數據類型眾多,並具有開箱即用並行性。Julia 的多次調度非常適合定義數字和數組類型的數據類型。

(可選)鍵入:Julia 具有豐富的描述性數據類型語言,類型聲明可用於闡明和鞏固程序。

可組合:Julia 的軟體包可以很好地協同工作。單位數量矩陣,貨幣和顏色數據表都可以進行,並且性能良好。

如果你要從 Julia 0.6 或更早版本升級代碼,我們建議首先使用過渡版 0.7,其中包括棄用警告幫助指導完成升級。如果你的代碼沒有警告,則可以更改為 1.0 而無需任何功能更改。已註冊的軟體包正在使用該過渡版本發布 1.0 兼容的更新。

1.0 更新了哪些功能?

當然,Julia 1.0 中最重要的一個新功能是對語言 API 穩定性的承諾:你為 Julia 1.0 編寫的代碼可以繼續在 Julia 1.1、1.2 等版本中運行。該語言是 「已完善」 的,核心語言開發人員和社區都可以放心使用基於此版本的軟體包、工具和新功能。

但 Julia 1.0 更新的不僅是穩定性,它還引入了一些強大、創新的語言功能。自 0.6 版以來,新發布的一些功能包括:

全新的內置軟體包管理器性能得以大幅改進,使安裝包及其 dependencies 項變得前所未有的簡單。它還支持每個項目的包環境,並記錄工作應用程序的確切狀態,以便與他人和你自己進行共享。最後,新的設計還引入了對私有包和包存儲庫的無縫支持。你可以使用與開源軟體包生態系統相同的工具來安裝和管理私有軟體包。JuliaCon 上展示了新功能設計的詳細情況:

https://www.youtube.com/watch?v=GBi__3nF-rM

Julia 有了一個新的規範表示缺失值(https://julialang.org/blog/2018/06/missing)。能夠表示和處理缺失的數據是統計和數據科學的基礎。與 Julian 的一貫風格相符,這個新的解決方案具有通用性、可組合性和高性能。任何泛型集合類型都可以通過讓元素包含 missing 的預定義值來有效地支持缺失值。在以前的 Julia 版本中,這種 「聯合類型」 集合的性能會太慢,但編譯器的改進現在使得 Julia 可以跟上其他系統中自定義 C 或 C ++ 缺失數據表示的速度,同時也更加通用和靈活。

內置的 String 類型現在可以安全地保存任意數據。你的程序數小時甚至數天的工作不再會因為一些無效 Unicode 雜亂位元組而失敗。保留所有字元串數據,同時標記哪些字元有效或無效,可以使你的應用程序安全方便地處理不可避免具有缺陷的真實數據。

語法簡單的廣播(Broadcasting)已經成為核心語言功能,現在它比以往任何時候功能都更強大。在 Julia 1.0 中,將廣播擴展到自定義類型並在 GPU 和其他矢量化硬體上實現高效優化計算變得更簡單,為將來提高性能提升鋪平了道路。

命名元組是一種新的語言特性,它使得通過名稱表示和訪問數據變得高效快捷。例如,你可以將一行數據表示為 row =(name =「Julia」,version = v「1.0.0」,releases = 8),並將版本列作為 row.version 訪問,其性能與不甚快捷的 row [2] 相同。

點運算符現在可以重載,讓類型使用 obj.property 語法來獲取和設置結構欄位之外的含義。這對於使用 Python 和 Java 等基於類的語言更順暢地進行互操作是個福音。屬性訪問器重載還允許獲取一列數據以匹配命名元組語法的語法:你可以編寫 table.version 來訪問表的 version 列,就像 row.version 訪問單行的 version 欄位一樣。

Julia 的優化器在很多方面變得比我們在這裡提到的更聰明,但有一些亮點值得一提。優化器現在可以通過函數調用傳播常量,可以更好地做到死碼消除和靜態評估。另外,編譯器在避免在長生命周期對象周圍分配短期包裝器方面也要好得多,這使得程序員可以使用便利的高級抽象而無需降低性能成本。

現在使用聲明相同的語法調用參數類型構造函數。這消除了語言語法的模糊和令人困惑的地方。

迭代協議已經完全重新設計,以便更容易實現多種迭代。現在是一對一定義一個或兩個參數方法,而不是定義三個不同泛型函數的方法——start,next,和 done。這通常使得使用具有開始狀態的默認值的單個定義可以更方便地定義迭代。更重要的是,一旦發現無法生成值就可以部署迭代器。這些迭代器在 I / O、網路和生產者 / 消費者模式中無處不在;Julia 現在可以用簡單直接的方式表達這些迭代器。

範圍規則簡化。無論名稱的全局綁定是否已存在,引入本地範圍的構造現在都是一致的。這消除了先前存在的 「軟 / 硬範圍」 區別,並且意味著現在 Julia 可以始終靜態地確定變數是本地的還是全局的。

語言本身非常精簡,許多組件被拆分為 「標準庫」 軟體包,這些軟體包隨 Julia 一起提供但不屬於 「基礎」 語言。如果你需要它們,它可以給你方便(不需要安裝),但不會被強加給你。在未來,這也將允許標準庫獨立於 Julia 本身進行版本控制和升級,從而允許它們以更快的速度發展和改進。

我們對 Julia 的所有 API 進行了徹底的審查,以提高一致性和可用性。許多模糊的遺留名稱和低效的編程模式已被重命名或重構,以更優雅地匹配 Julia 的功能。這促使使用集合更加一致和連貫,以確保參數排序遵循整個語言的一致標準,並在適當的時候將(現在更快)關鍵字參數合併到 API 中。

圍繞 Julia 1.0 新功能的新外部包正在構建中。例如:

正在改進數據處理和操縱生態系統,以利用新的缺失支持

Cassette.jl(https://github.com/jrevels/Cassette.jl)提供了一種強大的機制,可以將代碼轉換傳遞注入 Julia 的編譯器,從而實現事後分析和現有代碼的擴展。除了用於分析和調試等程序員的工具之外,甚至可以實現機器學習任務的自動區分。

異構體系結構支持得到了極大的改進,並且與 Julia 編譯器的內部結構進一步分離。英特爾 KNL 只能用 Julia 工作。Nvidia GPU 使用 CUDANative.jl(https://github.com/JuliaGPU/CUDAnative.jl)軟體包進行編程,Google TPU 的埠正在開發中。

另外,Julia 1.0 還有無數其他大大小小的改進。有關更改的完整列表,請參閱文件:https://docs.julialang.org/en/release-0.7/NEWS/。

在 2012 年的文章《為什麼我們創造 Julia》這篇博客文章中(https://julialang.org/blog/2012/02/why-we-created-julia),我們寫道:

它不完整,但現在是 1.0 發布的時候——我們創建的語言叫做 Julia。

現在,我們提前叩響了 1.0 版本發布的扳機,但它發布的時刻已然到來。真誠地為這些年來為這門現代化編程語言做出貢獻的人們感到驕傲。

https://julialang.org/blog/2018/08/one-point-zero


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 新智元 的精彩文章:

美國超算將重奪全球第一,性能超神威·太湖之光2倍
谷歌AI風投也用紅綠燈,機器有權推翻人類決定

TAG:新智元 |