李雨蒙
近日,Julia編程語言的1.0新版本一經推出就受到整個人工智能界的關注,其中最主要的原因就是它史無前例地結合了C 語言的速度、Ruby 的靈活、Python 的通用性,支持并行處理,易于學習與使用,尤其適合科學和工程的計算。正如Julia的創(chuàng)始人之一,Viral Shah所說:“如果你是數學家、科學家或是工程師,那么從前當你選擇一門編程語言時,會從它的速度角度去考慮,比C++或Java,又或是從語言的易學程度出發(fā),就像Matlab、R或者是Python。而我們創(chuàng)造了一種兩者兼?zhèn)涞恼Z言,就是Julia?!?h3>研發(fā)的初衷
隨著人工智能中機器學習的發(fā)展,科學界對于計算的速度和性能的要求越來越高,而目前許多編程語言都存在各自的局限性。Julia的研究團隊野心勃勃,希望能夠博采眾長,吸取各家編程語言的特點,正如 Julia 團隊發(fā)表的講話中所言:“我們想要一種擁有自由許可,開放源碼的語言,我們希望它擁有C語言的速度,R語言的動態(tài);易于理解,帶有真實口語指令,同時擁有Matlab一樣清晰的數學符號,如Python一樣的通用,R簡捷的統(tǒng)計功能,Perl自然的字串,并且是交互式和可編譯的。”
為提高速度,Julia團隊研究了所有導致大多數動態(tài)語言變慢的因素,并仔細研究可以消除哪些因素。比如,動態(tài)語言通常允許數組元素和對象字段保存任何類型的值。然而,研究表明,即使在這些語言中,具有常量類型的同構數組和字段也非常普遍。所以,他們在設計 Julia 時利用了這一點,更容易添加類型限制,并在任何可能的情況下默認使用類型統(tǒng)一的集合。
一個充滿活力,欣欣向榮的地區(qū)往往是圍繞著一種語言而生的,世界各地的人們在不斷地精煉和塑造Julia,最終達到研究人員所期望的目標。Julia 項目由麻省理工學院教授 Alan Edelman 領導,其大部分關鍵發(fā)展成果都來自麻省理工學院的 Julia 實驗室,也有超過 700 名志愿者參與了 1.0 版本的制作。經過大量的修正完善,目前的1.0版本具有以下的特點:
快速:Julia自設計之初就施行最高標準操作, 通過LLVM 為多平臺編譯有效本地代碼。
通用性:運用多種調配手段,Julia可以更加簡單地表達多種以目標為導向、功能性的編程模式,比如提供異步I/O 、過程控制、登錄、性能分析、程序安裝管理等等。
動態(tài): Julia 是被動態(tài)輸入的, 就像是一種腳本語言,對于互動作用有很強的支撐作用。
科技:Julia擅長帶有語法的數字運算,適用于數學領域,包含多種數值數據類型。Julia的多種調配是定義數字和類數組數據的一個自然適應過程。
可選擇性: Julia擁有豐富的描述性數據,選擇范圍多樣,可用于闡明和鞏固程序。
可組合:Julia的數據包可以自然地組合在一起工作。
圍繞著Julia 1.0 的新功能,研究人員有針對性地建立了一些新的外部程序包,比如數據處理,以及修補后的操作系統(tǒng)。利用新的缺損支持技術,Julia 1.0最重要的新功能就是承諾語言API(應用程序接口)的穩(wěn)定性:在1.0系統(tǒng)中書寫的編碼在未來的1.1、1.2 系統(tǒng)中仍然可以繼續(xù)使用,語言可以被完全拷貝。
另外,異類結構支撐也得到大幅度的提升,Julia編譯器從內部構件被進一步的解耦。Intel KNL系列硬件可直接使用Julia,Nvidia的GPU 也可以通過CUDAnative.jl來直接編程(無須編寫CUDA代碼),而 支持Google TPU的接口也在進一步的研發(fā)中。
不過,Julia 1.0的新特點不僅僅體現在穩(wěn)定性方面,同時還推出了多種新型、強大的創(chuàng)新語言功能。比如:
全新的嵌入程序包極大地提升了性能,相比過去安裝程序和其他操作更加便捷。同時,支持單項程序的環(huán)境,記錄正在工作程序的精準狀態(tài),可能是與他人共享的程序,亦或是與未來的工作有關。最后,重新設計的部分包括對私人程序包和程序儲藏進行無縫技術支持。用戶可以使用常用的開源程序體系中的工具安裝和管理私人程序包。
Julia 對于缺失值擁有全新的規(guī)范表示。能夠代表和處理缺失數據對于統(tǒng)計和數據科學是至關重要的部分。在過去版本的Julia中,聯合體的性能較慢,1.0版本中的速度已經可以匹敵C或C++系統(tǒng)中缺失數據表示的速度,同時更加通用和靈活。
帶有適當語法的傳播是語言的核心特點之一。Julia1.0很容易擴展傳播范圍,在GPUs(圖形處理器)和其他向量化硬件上定制類別,完善最有效的技術指令,為未來進一步的性能升級奠定基礎。
除了高性能,Julia 還有一些與眾不同的特性。比如,Julia 能夠訪問異常廣泛的編程堆棧。你可以利用良好的性能操作比特和字節(jié)(并查看匯編代碼),同時也可以處理高階函數、設計宏定義、進行面向對象編程,所有這一切都可以很好地融合在一起。
除了上述特點, 研究人員為Julia的代碼轉換注入重要機制,可以使Julia進行事后分析(post-hoc analysis)并且實現原有代碼的擴展。越過程序員的指令,如分析、調試,最終可以完成機器學習中的自動微分(Automatic Differentiation),對于機器學習而言,Julia還可以對硬件加速器上的原生代碼生成,提供很好的支持。無論是深度學習、機器學習還是 AI 方面,Julia 的數學語法使其成為理想的表達算法,支持 GPU 加速和處理數 TB 的數據。同時,豐富的機器學習生態(tài)系統(tǒng)還提供監(jiān)督學習算法(如回歸、決策樹)、無監(jiān)督學習算法(如聚類)、貝葉斯網絡和馬爾可夫鏈蒙特卡羅包等。
從實際應用來說,Julia 已經用于自動駕駛汽車、機器人和 3D 打印機,還廣泛應用于精準醫(yī)療、增強現實、基因組學及風險管理。在用戶方面,Julia 的下載量已經超過 200 萬次。作為一種開放源碼語言,很難將這個數字轉換為真實用戶數量。此外,在 Julia Computing 方面,已經有來自 700 所大學和 1000 多家公司的用戶下載或使用了 Julia。
根據 Julia 研究人員所說,在7項基礎算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍?,F在,Julia 語言主要應用在科學領域,下載對象包括谷歌、臉書和美國能源部等機構。未來,Julia 很可能擴展其目標人群,應用于更多領域,成為世界主流的編程語言。
編譯自Julialang官網
(責任編輯 姜懿翀)