當前位置:
首頁 > 探索 > MIT發布史上最強科學計算編程語言?創始團隊獨家解答11個問題

MIT發布史上最強科學計算編程語言?創始團隊獨家解答11個問題

本月初,隨著的 1.0 版本發布的消息確認,一門名為「Julia」的高性能動態編程語言一夜之間刷爆了朋友圈和 GitHub。

圖 | Julia Logo(來源:Julia 官網)

這個編程語言的新版本之所以受到整個人工智慧界的關注,最主要的原因正是其將 C 語言的速度、Ruby 的靈活、Python 的通用性前所未有地結合在一起,支持並行處理,易於學習和使用,尤其適合科學和工程計算。

更早之前,在今年 TOIBE 8 月份編程語言排行榜上,Julia 已迅速攀升至第 50 名。根據 Julia 開發團隊的說法,在七項基礎演算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。也有越來越多的人相信,Julia 會成為未來的主流編程語言。

圖丨在過去的三個月中,Julia 在 RedMonk 的排名中上升了三位,排名第 36 位(來源:RedMonk)

Julia 的崛起,與目前編程語言發展遭遇的瓶頸息息相關:隨著人工智慧尤其是機器學習的興起,現實世界對計算的速度及性能要求也越來越高,不同的編程語言由於自身的局限性難以兼顧,例如說,在 Julia 誕生之前,很多人不得不把同樣的程序進行多次處理:首先使用 Python 或 R 這樣的語言來開發一種演算法,並通過這些語言製作圖表,然後再用 C++或 Java 改寫程序,以獲得更好的計算機處理性能。

突破這種瓶頸無疑有兩個方向,一是基於現有編程語言進行優化,二是「將革命進行到底」——專門開發一門新語言。後者自然成本更高。

Julia 的開發人員顯然選擇了後者,而且他們的野心不小:Julia 被專門設計為用於快速運行基礎數學,這正是大多數數據科學的基礎,如矩陣表達式和線性代數。

它的誕生可追溯到 2009 年。當時,正是基於對現有編程語言的「不滿」,麻省理工學院啟動了一個新型編程語言開發計劃,到了 2012 年的時候,這個計劃有了初步的成果,也就是如今的 Julia。

圖 | 麻省理工學院 Julia 實驗室(來源:Julia 實驗室官網)

具體而言,Julia 項目由麻省理工學院教授 Alan Edelman 領導,另外幾位關鍵創造者則包括Jeff Bezanson(「Julia」名字來自於 Bezanson 的一個舊項目)、Stefan Karpinski 和 Viral Shah。其大部分關鍵發展成果都來自麻省理工學院的 Julia 實驗室,也有超過 700 名志願者參與了 1.0 版本的製作。

「我們想開發一種開源的編程語言,我們希望這門語言有 C 語言一樣的速度、R 語言一樣的靈活性,有同像性(homoiconicity), 有像 Lisp 語言那樣擁有真正的宏特性,但是也像 Matlab 一樣有易於理解、被人所熟悉的數學標記。我們希望它像 Python 一樣易用,像 R 語言一樣適用於統計,像 Perl 一樣適用於字元串處理,處理線性代數像 Matlab 一樣強大,像 DOS 命令一樣擅長粘合程序。這似乎看起來簡單易學,但是想要讓黑客樂意去迎合它卻不是簡單之事。我們希望它具有互動性且能夠被編譯」,在《Why we created Julia》這篇文章中,Julia 團隊如此解釋他們開發這個語言的初衷。

圖丨Viral Shah(來源:DT 君)

Viral Shah 也曾經表示:「如果你是一名數學家、科學家或者工程師,你可以選擇一種速度快的語言,比如 C++或 Java,又或是任意一種容易學習的語言,比如 Matlab,R,或 Python,所以我們創造了 Julia 這種又快又便捷的語言。」如今,他已經成為 Julia Computing 公司的 CEO,該公司致力於幫助其他公司使用 Julia 語言。

當然,Julia 的問世,除了讓人感慨 IT 行業發展之快、推陳出新之迅猛,另一方面也向所有人提出了一個新的問題:我究竟要不要學習這門新語言。這個問題將非常重要,就像 Y-Combinator 的聯合創始人 Paul Graham 所說的,「當你可以選擇你要用的編程語言時,不使用最強的那一種將是一個錯誤」。

近日,DT 君獨家採訪了上文提到的 Julia 開發團隊的四位創始人員。Julia 能否成為主流編程語言,以及它是否值得學習,許多關於 Julia 的疑問,或許你能從創始團隊的回答中找到答案。

圖丨Alan Edelman(來源:麻省理工學院官網)

一、在團隊看來,Julia 語言的核心創新點是什麼?

開發一種基於多分派(Multiple dispatch)的語言。在最初的一段時間裡,我們並不 100% 清楚怎麼做。多方法和外部調度看起來很酷,但我們不清楚它們有多麼有用和強大。

重視多分派特性改變了我們編程語言的編程方式。這是一件很奇怪的事情,因為當人們問「多重調度有什麼了不起?」時,很難具體回答有什麼特別的地方,但是一旦你習慣了這種特性,就很難回頭了。

除了高性能,Julia 還有一些與眾不同的特性。例如,Julia 能夠訪問異常廣泛的編程堆棧。你可以以良好的性能操作比特和位元組(並查看彙編代碼),同時也可以處理高階函數、設計宏定義、進行面向對象編程,所有這一切都可以很好地融合在一起。剝離這些層也很容易。為完成不同任務,人們經常需要轉換語言。Julia 程序員對不同的任務或許使用的技術和樣式不同,但完全可以使用相同的語言(即 Julia)。

二、在 Julia 的開發過程中,哪一部分投入的精力最多?有什麼遵循的標準嗎?

設計並搞清楚內部的工作原理總是最花時間的。

開發好的編程語言的關鍵是設計一組簡單、強大的原語,能夠很好地執行,然後根據這些原語定義所需的大部分功能。在語言開發的早期,添加許多「內置」結構似乎是個好主意,但在編寫優化編譯器時,這些結構可能會帶來很多麻煩。用一種語言本身編寫該語言的標準庫既有利於性能(從長遠來看),也可以提供寶貴的使用語言的經驗,這些經驗又可以反饋到語言的設計中。當一個函數運行得太慢時,我們會去看檢查一下是否可以改進編譯器讓函數運行得更快。反覆如此,我們不僅可以改善這個函數,還可以解決一系列類似的問題。

三、Julia 具體是如何實現同時具備 Python 的簡單、C 語言的執行速度、R 語言一樣的數據分析庫支持?

正如上一個問題,簡單性來自於有少量精心選擇的原語。自動垃圾收集(一種計算機內存管理手段)對語言的可用性也有很大的貢獻,這一點在編程語言領域已經是很久以來的共識了。

為提高速度,我們研究了所有使大多數動態語言變慢的因素,並仔細考慮了哪些因素可以消除。例如,動態語言通常允許數組元素和對象欄位保存任何類型的值。然而,研究表明,即使在這些語言中,具有常量類型的同構數組和欄位也非常普遍。因此,設計 Julia 利用了這一點,更容易添加類型限制,並在任何可能的情況下默認使用類型統一的集合。

四、Julia 目前宣稱和 C 語言一樣快。但是否在所有情況下都是這麼快?還是只在數據處理的時候和 C 一樣快?和目前主流語言如 Python、C 等的兼容性如何?

是的,對於大多數用例,Julia 可以和 C 一樣快。不過必須注意避免過度的內存分配,並確保代碼是類型穩定的。Julia 提供了各種各樣的工具,編程者無需花費太多精力就可以編寫高性能的像 C 一樣快的代碼。

調用 C 和 Fortran 在 Julia 中是本地的——甚至不需要提供編譯器。可以運行下面的代碼完成調用:

julia> ccall(:clock, Int32, ())

2539697

同樣,Cxx.jl 使得調用 C++庫、模板等變得非常容易。我們可以通過 PyCall.jl 和 RCall.jl 這樣的集成介面調用 Python 和 R。反過來,Python 和 R 通過調用 PyJulia 和 RJulia 包來調用 Julia 語言。JavaCall.jl 可以讓 Julia 調用 Java。我們也有一個乾淨清晰的嵌入編程介面,讓任何其他語言都很容易地調用 Julia。

五、從實際應用來說,Julia 已經用於自動駕駛汽車、機器人和 3D 印表機,此外還廣泛應用於精準醫療、增強現實、基因組學及風險管理。那麼 Julia 語言本身適合什麼應用? 團隊有沒有自己特別看好的一個實際應用方向?為什麼?

我們一直致力於構建一種通用語言,這種語言對於所有形式的數學計算都有很好的抽象。因此,看到各種各樣領域應用的蓬勃發展比看到任何一個特定應用的蓬勃發展更讓我們興奮。

(來源:Julia 官網)

六、目前 Julia 語言主打科學計算,下載者包括谷歌、Facebook 和美國能源部等各個部門的開發者。未來,Julia 是否會擴展其目標人群,用於更多面向對象程序設計?公布了 1.0 以後,有沒有來自一些用戶的收穫或反饋?

Julia 的目標受眾在過去幾年裡每 9 個月就會翻一番。我們認為,多分派、通用函數和專門化的語言特性是為該語言的用戶精心設計的。

Julia 在 GitHub 上已經收到了超過 700 名開發者的貢獻。許多人貢獻超過 2000 個包。我們估計大約有 30 名核心開發人員對 Julia 語言本身貢獻了大量工作。

在用戶方面,Julia 的下載量超過 200 萬次。作為一種開放源碼語言,很難將這個數字轉換為真實用戶數量。此外,在 Julia Computing 方面,我們看到來自 700 所大學和 1000 多家公司的用戶下載或使用了 Julia。Julia1.0 非常受歡迎,語言社區會追求長期穩定,每個人都為此感到興奮。我們也受到非常多的反饋,有中文的也有英文的。對於 1.0,在考慮添加新特性之前,我們將關注長期穩定性。

七、團隊目前對 Julia 在商業項目應用上有何計劃?

所有 Julia 的創建者都聚集在一起,形成了遵循開源商業模式的 Julia Computing 公司。Julia Computing 公司的產品已經被成千上萬的用戶下載,JuliaBox 被廣泛用於 Julia 的教學。

此外,Julia Computing 為許多企業提供開發人員和生產支持,並為全球用戶提供培訓和諮詢。

八、用 Julia 寫的項目中,哪一個讓你們覺得印象最深刻?

最印象深刻的包是以下幾個:

用於數學優化研究的 JuMP:

https://github.com/JuliaOpt/JuMP.jl

用於微分方程相關的 DiffEq:

http://juliadiffeq.org/

用於機器學習的 Flux:

http://fluxml.ai/

另一個用於機器學習(深度學習)的 Knet:

https://github.com/denizyuret/Knet.jl

除此之外,這些包也都非常有用:

Revise 包,真的太棒了,Tim Holy 是個天才!:

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

BenchmarkTools,一個測試性能相關的包:https://github.com/JuliaCI/BenchmarkTools.jl

StaticArrays 包,這個包很可能作為標準庫:https://github.com/JuliaArrays/StaticArrays.jl

UnicodePlots 包,唯一一個到處都能可靠安裝使用的畫圖的包:https://github.com/Evizero/UnicodePlots.jl

圖丨Julia 團隊(來源:vccircle)

九、Julia 在中國的開發者中引起了很大的討論,但有人認為 Julia 本身又沒有很強的推廣力度,可能很難有公司會將 Julia 使用在商業項目上,對於這種說法團隊怎麼看?

Julia 是一種「草根」語言,是由真正喜歡開發和使用它的人開發出來的。也許將來一些更大的公司會採用它——但我們認為這不是成功的必要條件。Python、PHP、Perl、Ruby、Lua 等語言都不是由任何組織推動的。至少從目前來說,它是由社區開發的,這也是它能吸引用戶的原因。

十、Julia 的野心很大,想要集成多種語言的優點,規避掉這些語言不足的地方。不過一個語言是否值得我們學習,還要看它的學習氛圍、市場環境以及具體適用的場景,目前團隊認為 Julia 在這些方面還存在哪些不足?現階段最大的挑戰是什麼?下一個版本計劃將優先解決哪些問題?

近期我們一直在努力的方向是提升編譯器的效率。

開發一種具有高度抽象並且能夠在各種硬體上工作的快速語言的時機已經成熟。我們將關注當前特性的穩定性,但也會添加新特性。

一個主要考慮的特性是多線程。雖然我們今天已經有了多線程功能,但它還不能以一種每一個庫和用戶代碼都可以並行的方式進行組合(很少有語言有這種情況)。英特爾的 Kiran Pamnany 已經發出了拉取請求(pull request),要求實現這一目標。我們還將關注我們的 GPU 支持、谷歌的 TPU 和各種新硬體。此外,將來還會有相當多的人關注開發工具。

十一、團隊心目中最理想的科學計算語言是什麼樣的?

我們還有很多事情還需要去做。在硬體方面,在最大的超級計算機上工作、在 GPU 上工作對於大型科學應用是必不可少的。機器學習應用程序正在驅動硬體的發展,這將給軟體開發人員帶來許多挑戰。在 ARM 處理器和嵌入式硬體上運行 Julia 對於設備部署也是至關重要的,因為機器學習演算法在物聯網應用程序上也越來越常見了。

多線程目前也是一個尚未解決的問題,對科學用例的可組合性還未能讓人滿意。這是我們希望在不久的將來解決的問題,設計基於 Cilk 編譯器。

Julia 創建者將來華,出席 EmTech China

人們總是希望使用更簡單的工具實現越來越複雜的任務,而現在,我們在編程語言方面有了更多的選擇,那麼要使用哪一種語言處理任務,就交給了各位使用者。但是在此之前,你或許有興趣親身聆聽 Julia 創建者之一兼 Julia Computing 的 CEO Viral Shah 博士更多的分享,他確定出席由《麻省理工科技評論》和DT君共同主辦的、在明年1月份舉辦的EmTech中國區大會。

Viral Shah 博士畢業於加州大學聖塔芭芭拉分校的計算機科學專業,是 Julia 項目的共同創建者之一,也是 Julia Computing 的聯合創始人兼 CEO。

他在構建開源軟體方面經驗頗豐。除了 Julia,他還是 Circuitscape 的作者之一。Circuitscape 是一個開源程序,借用了電子電路理論中的一些演算法。

他也曾是印度國家身份證項目 Aadhaar 的早期成員之一,他重新架構了印度的國家社保系統,其所覆蓋的社會群體,及其相應的待遇得到明顯提高,同時避免了大量的財政流失。

想要了解 Julia 語言的現狀、應用前景及未來幾位創建者的努力的方向,Viral Shah 博士會在 EmTech China 2019 現場呈獻給各位。

圖 | EmTech China 2018 會議現場

從籌備進度來看,EmTech China 2019 不論從嘉賓量級、會議規模、內容豐富程度上看,都將大幅提升!目前已確認出席的 10 位科技領袖包括:

今天,我們向您發出這封邀請函,邀您進入我們的世界,與全球最強的大腦們思想碰撞—— EmTech China 2019 全球新興科技峰會。

EmTech China 2019 全球新興科技峰會商務合作、媒體合作現已全面啟動,如果您想與我們在新興科技的舞台上產生碰撞,請在對話框回復「合作」與我們溝通。

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

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


請您繼續閱讀更多來自 DeepTech深科技 的精彩文章:

馬斯克突然來華,終於簽下特斯拉上海建廠協議,為特斯拉困局求解
AI 專家告訴你,目睹IBM 辯論機器人打敗人類是一種什麼樣的體驗

TAG:DeepTech深科技 |