Julia1.0正式發布:我究竟要不要學 Julia?

8月8日,於倫敦舉辦的 Julia 語言年會上,Julia 1.0版本正式發佈,一起發佈的還有 JuliaCon產品。不得不說,近年來,Julia 語言已然成為編程界的新寵。這門由 MIT CSAIL 實驗室開發的編程語言結合了 C 語言的速度、Ruby 的靈活、Python 的通用性,以及其他各種語言的優勢於一身,並且具有開源、簡單易掌握的特點,大有潛力成為取代 Python 的下一個語言。如果Julia真的 如此神奇,你做好學習一門新編程語言的準備了嗎?

Julia1.0正式發佈:我究竟要不要學 Julia?

Julia發展史:

  • 2012年,在宣佈Julia首次發佈的博客文章中,Jeff Bezanson,Stefan Karpinski,Viral Shah和Alan Edelman這三個作者便表示,3個人共花了三年時間創建Julia,他們非常“貪婪”。這幫人厭倦了要在Matlab,Lisp,Python,Ruby,Perl,Mathematica,R和C之間的權衡,想要一種有益於科學計算,機器學習,數據挖掘,大規模線性代數、並行計算和分佈式計算的單一語言。
Julia1.0正式發佈:我究竟要不要學 Julia?

  • 2015年7月,該語言的設計者創立了Julia Computing公司,該公司以“開發Julia,它是易於使用,易於部署且易於擴展的產品。”為目標,在截至撰寫本文時,該公司有28名員工,客戶從國家實驗室到銀行,從經濟學家到自動駕駛汽車研究人員均包括。除了在GitHub開源存儲庫上維護Julia之外,Julia Computing還提供商業產品,包括JuliaPro,有免費和付費兩個版本之區分。
  • 2018年8月,Julia 1.0版本正式發佈, 在1.0的版本中,使用它編寫的代碼可以在後續的 Julia 1.1、1.2 等版本上使用,是一個完全成熟的版本。Julia 團隊表示:“Julia 1.0 版本是我們為如飢似渴的程序員構建一種全新語言數十年來工作成果的巔峰。”

1.0 更新的功能:

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

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

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

Julia1.0正式發佈:我究竟要不要學 Julia?

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

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

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

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

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

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

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

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

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

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

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

12、圍繞 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 的端口正在開發中。

Julia1.0正式發佈:我究竟要不要學 Julia?

Julia的特點:

快速:Julia 為高性能而生。Julia 程序通過 LLVM 為多個平臺編譯高效的本地代碼。

通用:它使用多分派作為範例,使得表達許多面向對象和函數式的編程模式變得容易。標準庫提供異步 I/O、進程控制、日誌記錄、性能分析、包管理器等。

動態:Julia 是動態型語言,與腳本語言類似,並且支持交互式使用。

專業:它擅長數值計算,其語法適用於數學,支持多種數值數據類型,並具有良好並行性。Julia 的多分派天生適合定義數字和類數組的數據類型。

多樣:Julia 擁有豐富的描述性數據類型,類型聲明使程序條理清晰且穩定。

可組合:Julia 的包可以很好地組合在一起。單位數量的矩陣,或者貨幣和顏色的數據列表,都可以組合——而且性能很好。

學習 Julia的原因:

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

Julia1.0正式發佈:我究竟要不要學 Julia?

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

與其他語言相比,Julia 易於使用,大幅減少了需要寫的代碼行數;並且能夠很容易地部署於雲容器,有更多的工具包和庫,並且結合了多種語言的優勢。據 Julia Computing 的宣傳,

在七項基礎算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍

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

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

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

Julia1.0正式發佈:我究竟要不要學 Julia?

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

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

哪些人建議學習:

1、之前使用Python但是因為性能問題,經常需要使用numba/Cython/C API/ctypes/etc.等方式進行優化的人。Julia或許能夠幫助你解決兩語言問題,並且獲得可讀性更好,更容易維護的代碼。

2、

之前使用MATLAB,但是被一些付費功能困擾的用戶(MATLAB 2018也是不錯的,但是要支持正版哈)

3、之前使用Fortran和R的用戶,強烈建議使用Julia(可以結合著用也,FFI是很不錯的)

4、之前使用Sage/Octave的用戶,不妨嘗試一下這個新玩意兒

5、之前使用Mathematica但是想開始做一些數值的用戶,Mathematica不是不能做數值,也可以調用C/C++但是Julia不妨是相比其它工具更平滑的選擇。

下載與安裝:

目前支持 Julia 的平臺:

Julia1.0正式發佈:我究竟要不要學 Julia?

由於Julia目前官網的服務器只有AWS s3(他們也很窮)。所以國內的一些地區下載速度很慢:

https://julialang.org/downloads/

Julia1.0正式發佈:我究竟要不要學 Julia?

大家可以試一試,然後也可以去Julia Computing公司提供的Julia全家桶(你可以把它理解為Julia版本的Anaconda),最左邊的JuliaPro是免費的:

https://juliacomputing.com/

之前浙大的LUG搭建了一個鏡像,但是維護的同學最近有一些忙,所以目前還沒有更新到1.0。但是其實你如果無法從以上途徑下載,那麼從境內的源裡下載Julia 0.6也其實並不影響你先熟悉一些基本語法,境內的源的下載地址在這裡:

http://juliacn.com/downloads/

更多編程資訊、乾貨持續更新中~


分享到:


相關文章: