有一門語言,它看起來像 Python ,感受起來像 Lisp ,運行起來又像 C 同樣快速,他就是Julia。linux
近年來,Julia 語言已然成爲編程界的新寵,尤爲在科學計算和人工智能領域煊赫一時。算法
據 Julia Computing 的宣傳,在七項基礎算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。shell
爲何 Julia 能作到這些,看一下它的開發者的初衷:數據庫
「咱們想要的是一種自由開源的語言,它同時擁有 C 的速度和 Ruby 的動態性;咱們想要一個能夠像 Python 同樣做爲通用編程語言的工具, 像 R 那樣適用於統計分析,像 Perl 那樣天然地處理字符串,像 MATLAB 那樣給力地處理矩陣運算,它還要能像 Shell 同樣做爲膠水將各類程序粘合在一塊兒……」編程
Julia 在開發之初就將這些理念歸入其中,纔有了今天的成績。編程語言
實驗樓上線了一門免費的 Julia 入門課程 ---《Julia簡明教程》,包含 6 個實驗和一個挑戰。你將學習到 Julia 的基礎語法,並親手用 Julia 開發出一個小項目。分佈式
建議點擊課程連接,直接使用實驗樓的在線虛擬機學習這門課,效果會更好。函數
如下爲課程第一節內容:工具
本課程做爲 Julia 這門編程語言的入門教程,旨在介紹其基礎語法,但願你們可以經過本課程的學習,熟練掌握 Julia 的語法風格和編程習慣。性能
根據維基百科中的描述,大約在 2009 年,一羣擁有各類語言豐富編程經驗的 Matlab 高級用戶,對現有的科學計算編程工具感到不滿 —— 這些軟件對本身專長的領域表現得很是棒,但在其它領域卻很是糟糕。
他們想要的是一個開源的軟件,它要像 C 語言通常快速而又擁有如同 Ruby 的動態性;要具備 Lisp 般真正的同向性而又有 Matlab 般熟悉的數學記號;要像 Python 般通用、像 R 通常在統計分析上駕輕就熟、像 Perl 般天然地處理字符串、像 Matlab 般具備強大的線性代數運算能力、像 shell 通常擁有膠水語言的能力,易於學習而又不讓真正的黑客感到無聊;還有,它應該是交互式的,同時又是編譯型的。
最後 Julia 出現以後,你們評價它看起來像 Python ,感受起來像 Lisp ,運行起來像 C 。
如下描述來自官方文檔:
Julia 與傳統動態語言最大的區別是:
1. 核心語言很小;標準庫是用 Julia 自己寫的,如整數運算在內的基礎運算
2. 完善的類型,方便構造對象和作類型聲明
3. 基於參數類型進行函數 重載
4. 參數類型不一樣,自動生成高效、專用的代碼
5. 高性能,接近靜態編譯語言,如 C 語言
Julia 想要變成一個史無前例的集易用、強大、高效於一體的語言。除此以外,Julia 的優點還在於:
1. 免費開源( MIT 協議 )
2. 自定義類型與內置類型一樣高效、緊湊
3. 不須要把代碼向量化;非向量化的代碼跑得也很快
4. 爲並行和分佈式計算而設計
5. 輕量級 「綠色」 線程( 協程 )
6. 低調又牛逼的類型系統
7. 優雅、可擴展的類型轉換
8. 高效支持 Unicode, 包括且不僅 UTF-8
9. 直接調用 C 函數(不需封裝或 API)
10. 像 Shell 同樣強大的管理其餘進程的能力
11. 像 Lisp 同樣的宏和其餘元編程工具
打開實驗環境,咱們要安裝目前最新的 Julia1.3 版本(截止 2020 年 1 月)。
首先,在終端執行 wget-c https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.1-linux-x86_64.tar.gz 命令下載安裝包,這是官方提供的下載地址。由於此安裝包比較大,90 多 M ,因此建議你們執行以下命令下載它:
wget https://labfile.oss.aliyuncs.com/courses/1485/julia-1.3.1-linux-x86_64.tar.gz
首先在終端命令行執行 cd 命令切換到用戶家目錄 /home/shiyanlou ,而後再執行上述命令:
下載完成以後,會在當前目錄下出現 Julia 的安裝包 julia-1.3.1-linux-x86_64.tar.gz ;執行 tar xzvf julia-1.3.1-linux-x86_64.tar.gz 命令,便可完成解包;而後將 Julia 的可執行文件建立一個軟鏈接到 /usr/bin 目錄下便可完成所有安裝工做:
cd /usr/bin sudo ln -s ~/julia-1.3.1/bin/julia julia cd julia
如上圖所示,終端執行 julia 命令便可進入命令行交互解釋器,也叫 REPL 。這個是否是有些熟悉呢?各個數據庫以及 Python 都有這個交互工具。輸入 exit() 或按下快捷鍵 Ctrl + D 便可退出,終端執行 julia-version 命令能夠查看版本:
啓動 Julia 命令行交互解釋器的時候,會打印一張橫幅,如上圖所示。咱們能夠建立一個文件,使其在打印橫幅以前,打印一些別的:
mkdir .julia/config echo 'println("Hello Shiyanlou")' > .julia/config/startup.jl julia
如上圖所示,在啓動 REPL 時,先打印了一行字:Hello Shiyanlou 。熟悉 Python 的同窗都知道打印信息到屏幕上使用的是 print 方法,在 Julia 中是 println 方法,並且須要切記的是,在 Julia 中單引號和雙引號不可混用,只有雙引號才能描述字符串。
進入 REPL 以後,會有 julia> 字樣的提示符,這是常規模式,咱們能夠在其中執行一些代碼:
julia> println("hello kitty") hello kitty julia> 2 + 3 5 julia> ans 5 julia> x = 5 5 julia> x -= 1 4 julia> x 4 julia> x *= 2 8 julia> x 8 julia>
如上所示,ans 這個變量會保存上一次命令的執行結果,它僅在命令行交互解釋器中適用,不可寫到 jl 文件裏,Julia 的文件後綴爲 jl ,如同 Python 文件的後綴爲 py 。
除了常規模式,REPL 還有 help 模式、shell 模式和 package 模式。
在常規模式下輸入問號便可進入 help 模式,此模式的提示符是 help?> ,輸入一個方法,便可顯示此方法的幫助信息,而後自動回到常規模式:
這等同於在常規模式下使用 @doc 這個宏來查看幫助信息:
在常規模式下輸入分號 ; 進入 shell 模式,提示符爲 shell> ,這等同於環境終端,能夠執行 zsh 命令,一樣是執行完一個命令後自動退回到常規模式:
常規模式下輸入中括號 ] 進入 pkg 模式,提示符爲 (v1.3)pgk> ,括號裏面是版本號,這是包管理模式。
該模式下輸入 status 命令能夠查看包狀態, add 命令添加工具包, rm 命令刪除工具包:
安裝這個包須要較長時間,執行 rm 命令刪除它:
按退格鍵 Backspace 回到常規模式。
本節實驗主要介紹了 Julia 語言的來源,它與不少其它語言很像,這是由於做者是集各家之長創造的 Julia 。在實驗環境中的安裝方法十分簡單,下載安裝包,解包,設置軟鏈接。
此外還介紹了命令行交互解釋器的四種模式,在後面的課程中,咱們會用到它們。
下一節實驗將會學習 Julia 的變量。
想要學習下面的內容,你們能夠點擊《Julia簡明教程》,免費在線學習所有章節內容。