未來明星語言Julia 或成Python勁敵

去年今日,MIT Julia Lab 推出了Julia 1.0版。一年來,它的表現如何?

據MIT報道,截至2018年底,Julia的下載量超過300萬,並在超過1500所大學中用於科學和數值計算。根據2019年8月TIOBE編程語言指數,Julia從7月的第50名升至第39名,在衆多語言中上升幅度顯著。今年7月,在將Python解釋器移植到Firefox之後,Mozilla出資將Julia引入Firefox和一般瀏覽器……

最近,Julia開發團隊對來自90多個國家的1844名Julia用戶和開發人員進行了調查,結果顯示,93%的受訪者喜愛Julia,Python、C排名第二、三位,分別獲得61%和27%的投票率。這份完整的調查報告在今年7月底的JuliaCon上發佈。在此次會議上,開發者還宣佈將發佈一個全新的Julia線程接口—— 受到CilkIntel Threading Building Blocks (TBB) 以及Go等啓發的通用任務並行機制。看起來,Julia的進化正在穩步有序地進行着。

Julia會是編程語言中的“黑馬”嗎?你是否已經準備好學習這門崛起中的新語言了呢?

Julia是什麼?

Julia 誕生於 MIT 計算機科學與人工智能實驗室(CSAIL)和數學系,由 Jeff Bezanson 博士、前麻省理工學院 Julia Lab 研究員 Stefan Karpinski、Viral B. Shah 和數學教授 Alan Edelman 於2009年創建,並於2012年公開發布。開發者在2012年2月的博客中寫道,

“我們想要的是一種自由開源的語言,它同時擁有C的速度和Ruby的動態性;我們想要一個具有同像性(可以將語言的腳本本身當作數據進行處理)的語言, 它有着真正的和lisp一樣的宏,但卻像Matlab一樣有着顯著的,類似於數學表達式的標記;我們想要一個可以像Python一樣作爲通用編程語言的工具, 像R那樣適用於統計分析,像Perl那樣自然地處理字符串,像Matlab那樣給力地處理矩陣運算,它還要能像shell一樣作爲膠水將各種程序粘合在一起;我們想要一個簡單易學的語言,同時還能讓最苛刻的黑客們開心。我們希望它是交互式的,但我們也希望它能被編譯。”

Julia是一門靈活的動態語言,適用於科學計算和數值計算,其性能可與傳統的靜態類型語言媲美。它具有如下特點:

  • 快速:Julia一開始就是爲高性能而設計的。Julia可以通過LLVM而跨平臺被編譯成高效的本地代碼。
  • 通用:Julia使用多重派發作爲編程範式,使其更容易表達面向對象和函數式編程範式。標準庫提供了異步I/O,進程控制,日誌記錄,性能分析,包管理器等等。
  • 動態:Julia是動態類型的,與腳本語言類似,並且對交互式使用具有很好的支持。
  • 數值計算:Julia擅長於數值計算,它的語法適用於數學計算,支持多種數值類型,並且支持並行計算。Julia的多分派自然適合於定義數值和類數組的數據類型。
  • 可選的類型標註:Julia擁有豐富的數據類型描述,類型聲明可以使得程序更加可讀和健壯。
  • 可組合:Julia的包可以很自然的組合運行。單位數量的矩陣或數據表一列中的貨幣和顏色可以一起組合使用並且擁有良好的性能。

2018年12月,Julia 的三位聯合開發者Bezanson、Karpinski和Shah獲得2019年James H.Wilkinson數字軟件獎。根據選拔委員會的一份聲明,“Julia允許研究人員以直觀的語法編寫高級代碼,並以生產編程語言的速度生成代碼。它已被科學計算界廣泛採用,包括天文學、經濟學、深度學習、能源優化和醫學等應用領域。尤爲特別的是,美國聯邦航空管理局選擇Julia作爲下一代機載防撞系統的語言。

在GitHub上有Julia應用於計算生物學統計學機器學習圖像處理微分方程物理學等領域的小組。根據最新調查報告,目前的主要應用領域包括統計學與數據科學、工程學、機器學習、計算機科學、物理學、數學、人工智能、信號與圖像處理等。73%的用戶使用Julia從事科研工作,54%的用戶將其用於個人工作,16%的用戶將其用於教學。

與Python的區別

  • Julia 需要用 end 來結束代碼塊。與 Python 不同,Julia 沒有 pass 關鍵字。
  • 在 Julia 中,數組、字符串等的索引從 1 開始,而不是從 0 開始。
  • Julia 的切片索引包含最後一個元素,這與 Python 不同。Julia 中的 a[2:3] 就是 Python 中的 a[1:3]。
  • Julia 不支持負數索引。特別地,列表或數組的最後一個元素在 Julia 中使用 end 索引,而不像在 Python 中使用 -1。
  • Julia 的 for、if、while等代碼塊由end關鍵字終止。縮進級別並不像在 Python 中那麼重要。
  • Julia 沒有用來續行的語法:如果在行的末尾,到目前爲止的輸入是一個完整的表達式,則認爲已經結束;否則,認爲輸入繼續。強制表達式繼續的一種方式是將其包含在括號中。
  • 默認情況下,Julia 數組是列優先的(Fortran 順序),而 NumPy 數組是行優先(C 順序)。爲了在循環數組時獲得最佳性能,循環順序應該在 Julia 中相對於 NumPy 反轉(請參閱 Performance Tips 中的對應章節)。
  • Julia 的更新運算符(例如 +=,-=,···)是 not in-place,而 Numpy 的是。這意味着 A = [1, 1]; B = A; B += [3, 3] 不會改變 A 中的值,而將名稱 B 重新綁定到右側表達式 B = B + 3 的結果,這是一個新的數組。對於 in-place 操作,使用 B .+= 3(另請參閱 dot operators)、顯式的循環或者 InplaceOps.jl。
  • 每次調用方法時,Julia 都會計算函數參數的默認值,不像在 Python 中,默認值只會在函數定義時被計算一次。例如,每次無輸入參數調用時,函數f(x=rand()) = x都返回一個新的隨機數在另一方面,函數 g(x=[1,2]) = push!(x,3) 在每次以 g() 調用時返回 [1,2,3]。
  • 在 Julia 中,% 是餘數運算符,而在 Python 中是模運算符。

與MATLAB、R、C/C++的區別詳見文檔

爲什麼用Julia?

Julia最受歡迎的技術特徵包括快速和高性能、易於使用、開源、多重派發以及解決了兩種語言問題;最受歡迎的非技術特徵包括自由、社區開發者富有才華且活躍、易於創建包以及採用MIT許可證。

Julia最大的技術問題在於包並不像所需的那樣成熟或維護良好、生成第一個圖需要很長時間;最大的非技術問題在於同事、公司或合作者使用其他語言,在用戶所在的領域/行業中,沒有足夠的Julia用戶。

據外媒ZDNet此前發佈的數據,Julia的GitHub Star數在過去一年翻了一番,該語言還被1000多種學術出版物引用。

關於”爲什麼你會使用Julia“的問題,52%的受訪者表示,Julia似乎是未來的語言,43%的人認爲,它能使工作速度更快。

你是否已經準備好學習這門新語言了呢?

相關文章:
Julia: The programming language of the future?
Julia programming language: Users reveal what they love and hate the most about it
視頻:JuliaCon 2019 | Julia User and Developer Survey (2019)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章