1. 程式人生 > >Julia 1.0 正式發布,這是新出爐的一份簡單中文教程

Julia 1.0 正式發布,這是新出爐的一份簡單中文教程

除了 進行 也有 cython rust eth 在線的 打開 以及

兩天前,機器之心報道 MIT 正式發布 Julia 1.0 的文章引發了極大的關註(20 多萬的閱讀量),對此編程語言既有批判者也有推崇者。如機器之心了解到 Julia 在科學計算、數據處理行業很受歡迎。為了方便大家更了解這一新正式發布的編程語言,我們推薦 Julia 中文社區(中文社區介紹見文後)組織者之一羅秀哲

這兩天的媒體報道可能讓一些人有了恐慌,但是我現在有一個誠懇的建議就是如果你完全沒有編程基礎,時間也不多的話(時間多了不是想學啥學啥),我建議你先學一下 Python,這並不沖突,因為 Julia 的語法本身和 Python 很像,1.0 之後也專門增加了一些 feature 幫助你更好地從 Python 轉向 Julia。Julia 剛剛有了第一個長期支持版本,這還不意味著這個語言已經完全成熟,我想此時的 Julia 更像是彼時的 Python 2.0,還有很長一段路要走,但是已經非常的有前景。

技術分享圖片

那麽什麽人我會建議學習 Julia 呢?或者 Julia 在什麽場景下也許能夠有優勢呢?我個人的體驗是以下這裏一類:

之前使用 Python 但是因為性能問題,經常需要使用 numba/Cython/C API/ctypes/etc. 等方式進行優化的人。Julia 或許能夠幫助你解決兩語言問題,並且獲得可讀性更好,更容易維護的代碼。之前使用 MATLAB,但是被一些付費功能困擾的用戶(MATLAB 2018 也是不錯的,但是要支持正版哈)之前使用 Fortran 和 R 的用戶,強烈建議使用 Julia(可以結合著用也,FFI 是很不錯的)之前使用 Sage/Octave 的用戶,不妨嘗試一下這個新玩意兒

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

如果你之前的工作僅僅使用 Python 就足以勝任,那麽不必著急,也不必恐慌,不妨在感興趣的時候試試這個新東西,但是也完全可以等到 Julia 被大規模使用的時候再跟進。實際上從一開始像 MXNet 這樣的深度學習框架就官方支持了 Julia,這些框架的 Python 用戶轉移過來也並不是什麽難事,但是如果你本來就不擔心自己程序的性能(很多時候這並不是一個大問題),那麽其實不會體會到什麽明顯的不同和優勢。但是這樣說也並不完全正確,Julia 語言的優勢不僅僅在其性能,也在其語言本身的設計。

此外,也要再三聲明,雖然 Julia 可以寫出高性能的代碼,但是寫出高性能的代碼這件事情本身就很困難。雖然寫起來像 Python,運行速度像 C 是我們的夢想,但是在現在這個階段,並不是隨便寫一段 Julia 代碼就真的能達到 C 的。Julia 只是給你提供了充分優化的空間,和(達到高性能代碼的)相對容易的編程體驗。

下載和安裝 Julia

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

鏈接:https://julialang.org/downloads/

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

鏈接:https://juliacomputing.com/

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

鏈接:http://juliacn.com/downloads/

我們也會盡快更新。

然後還有一個叫做 Julia Box 的雲服務很方便可以使用,裏面有很多教程,都是 jupyter notebook,打開即用,全部都是在線的不用安裝。但是唯一的缺點就是國內可能不一定能夠正常訪問到。

鏈接:http://suo.im/4S7gbT

使用什麽編輯器

Julia 語言的社區不夠大,此外由於不是像 rust 這樣的靜態編譯語言,也不是像 CPython 這樣的解釋型編譯器,在啟動的時候有比較明顯的 overhead,這個問題一直在優化(REPL 的啟動時間已經從曾經的 1.0s 到了現在的 0.2s,依然和 IPython 這樣的有明顯差距),有 PL 的朋友私下和我說是 LLVM 的 JIT 不是那麽好(像 nodejs 的 V8 這個問題就不是很明顯)

所以在這個階段選擇一個合適的開發工具是非常必要的。目前支持最好,bug 最少的是 Atom 上的 Juno 插件,如果你下載 Julia Pro 那麽會自帶這個編輯器。如果你想選擇手動安裝,那麽可以在這裏下載 Atom:

鏈接:https://atom.io/

然後安裝方法在這裏有介紹:

鏈接:http://docs.junolab.org/latest/man/installation.html

或者我也推薦你安裝 IJulia 之後,使用 jupyter notebook 和 jupyter lab 進行開發。

其它的平臺也有支持,例如 Jetbrain 的各個 IDE 都可以使用由 @ 考古學家千裏冰封等開發的插件。VS code 也有 Julia 插件,以及 Vim 也是有支持的。但是他們都還沒有支持逐行執行和單獨執行某一塊代碼的功能,這對於本身被設計得很像 Mathematica 的 Julia 來說沒有執行一個 cell 的支持開發起來會時常被 JIT 的預熱時間所困擾。

然後為了克服 JIT 的預熱,避免重復啟動編譯器。如果你不重新定義(re-define)類型的話,可以試試 Revise.jl :

鏈接:https://github.com/timholy/Revise.jl

這是一個用於熱加載 Julia 代碼的工具,1.0 已經支持方法(method)的刪除了。所以也能夠方便你的開發。

其實和 Python 一樣,在我日常使用中,作為動態語言,以及因為語法本身適合分塊執行,我其實很少會用到斷點和專門的 debugger,此外雖然有相關的包,在 1.0 的編譯器裏也為未來加入 debugger 提供了相關功能,但是目前還沒有完善,你也許可以試試(但是我暫時不推薦):

鏈接:https://github.com/Keno/Gallium.jl

鏈接:https://github.com/timholy/Rebugger.jl

我怎麽知道我要用什麽包

Julia 有一個由社區維護的網站用來幫助你從 1900 多個包裏找出符合你需求的 Julia 包:

鏈接:https://juliaobserver.com/

一般來說用比較新的,star 比較多的包會好一些。然後如果你覺得某個包不錯,也請在 GitHub 上給一個 star。

基本操作

當你下載好了 Julia 之後,不論是 Julia Pro 還是單獨的 Julia 編譯器,你都可以先打開一個 REPL(交互式編程環境),類似於 IPython 之於 Python,Julia 的 REPL 支持了基本的代碼高亮,文檔查看等功能。但是 Julia 的 REPL 更強大(這件事稍後再說)。

Windows/Mac 用戶:

雙擊 Julia 的三×××標,就能打開 REPL。在 Atom 裏面的話在左上角有 Julia 一欄,點擊裏面的 open terminal 即可。

Linux 用戶:

下載好以後去找到 bin 文件夾,然後把它加入你的 PATH 環境變量裏去,以後就可以在命令行裏直接通過 `julia` 命令啟動 REPL。



Julia 1.0 正式發布,這是新出爐的一份簡單中文教程