MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

高層速讀

關(guān)鍵信息:備受期待的 Julia1.0 累積了開(kāi)發(fā)者近十年的努力。JuliaCon2018 舉行了發(fā)布會(huì),該社區(qū)正式將該版本設(shè)置為 1.0.0.。

關(guān)鍵數(shù)據(jù):研究者利用 Julia 在一臺(tái)超級(jí)計(jì)算機(jī)上分析天文圖像,速度提升了 1000 倍,在 15 分鐘內(nèi)將接近 2 億個(gè)天體進(jìn)行分類(lèi)。

關(guān)鍵意義:隨著人工智能的興起,現(xiàn)實(shí)世界對(duì)計(jì)算的速度及性能要求也越來(lái)越高,不同的編程語(yǔ)言由于自身的局限性難以兼顧,Julia打破了傳統(tǒng)編程語(yǔ)言的局限性

本月初,隨著的 1.0 版本發(fā)布的消息確認(rèn),一門(mén)名為“Julia”的高性能動(dòng)態(tài)編程語(yǔ)言一夜之間刷爆了朋友圈和 GitHub。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

首先科普一下什么是“Julia”的高性能動(dòng)態(tài)編程語(yǔ)言” ,Julia是一個(gè)新的高性能動(dòng)態(tài)高級(jí)編程語(yǔ)言。語(yǔ)法和其他編程語(yǔ)言類(lèi)似,易于其他語(yǔ)言用戶(hù)學(xué)習(xí)。Julia擁有豐富的函數(shù)庫(kù),提供了數(shù)字精度、精致的增幅 器(sophisticated amplifier)和分布式并行運(yùn)行方式。核心函數(shù)庫(kù)等大多數(shù)庫(kù)是由Julia編寫(xiě),但也用成熟的C和FORTRAN庫(kù)來(lái)處理線(xiàn)性代數(shù)、隨機(jī)數(shù)產(chǎn)生和字 符串處理等問(wèn)題。Julia語(yǔ)言可定義函數(shù)并且根據(jù)用戶(hù)自定義的參數(shù)類(lèi)型組合再進(jìn)行重載。

這個(gè)編程語(yǔ)言的新版本之所以受到整個(gè)人工智能界的關(guān)注,最主要的原因正是其將 C 語(yǔ)言的速度、Ruby 的靈活、Python 的通用性前所未有地結(jié)合在一起,支持并行處理,易于學(xué)習(xí)和使用,尤其適合科學(xué)和工程計(jì)算。

更早之前,在今年 TOIBE 8 月份編程語(yǔ)言排行榜上,Julia 已迅速攀升至第 50 名。根據(jù) Julia 開(kāi)發(fā)團(tuán)隊(duì)的說(shuō)法,在七項(xiàng)基礎(chǔ)算法的測(cè)試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。也有越來(lái)越多的人相信,Julia 會(huì)成為未來(lái)的主流編程語(yǔ)言。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

圖丨在過(guò)去的三個(gè)月中,Julia 在 RedMonk 的排名中上升了三位,排名第 36 位(來(lái)源:RedMonk)

Julia 的崛起,與目前編程語(yǔ)言發(fā)展遭遇的瓶頸息息相關(guān):隨著人工智能尤其是機(jī)器學(xué)習(xí)的興起,現(xiàn)實(shí)世界對(duì)計(jì)算的速度及性能要求也越來(lái)越高,不同的編程語(yǔ)言由于自身的局限性難以兼顧,例如說(shuō),在 Julia 誕生之前,很多人不得不把同樣的程序進(jìn)行多次處理:首先使用 Python 或 R 這樣的語(yǔ)言來(lái)開(kāi)發(fā)一種算法,并通過(guò)這些語(yǔ)言制作圖表,然后再用 C++或 Java 改寫(xiě)程序,以獲得更好的計(jì)算機(jī)處理性能。

突破這種瓶頸無(wú)疑有兩個(gè)方向,一是基于現(xiàn)有編程語(yǔ)言進(jìn)行優(yōu)化,二是“將革命進(jìn)行到底”——專(zhuān)門(mén)開(kāi)發(fā)一門(mén)新語(yǔ)言。后者自然成本更高。

Julia 的開(kāi)發(fā)人員顯然選擇了后者,而且他們的野心不小:Julia 被專(zhuān)門(mén)設(shè)計(jì)為用于快速運(yùn)行基礎(chǔ)數(shù)學(xué),這正是大多數(shù)數(shù)據(jù)科學(xué)的基礎(chǔ),如矩陣表達(dá)式和線(xiàn)性代數(shù)。

它的誕生可追溯到 2009 年。當(dāng)時(shí),正是基于對(duì)現(xiàn)有編程語(yǔ)言的“不滿(mǎn)”,麻省理工學(xué)院?jiǎn)?dòng)了一個(gè)新型編程語(yǔ)言開(kāi)發(fā)計(jì)劃,到了 2012 年的時(shí)候,這個(gè)計(jì)劃有了初步的成果,也就是如今的 Julia。

具體而言,Julia 項(xiàng)目由麻省理工學(xué)院教授 Alan Edelman 領(lǐng)導(dǎo),另外幾位關(guān)鍵創(chuàng)造者則包括Jeff Bezanson(“Julia”名字來(lái)自于 Bezanson 的一個(gè)舊項(xiàng)目)、Stefan Karpinski 和 Viral Shah。其大部分關(guān)鍵發(fā)展成果都來(lái)自麻省理工學(xué)院的 Julia 實(shí)驗(yàn)室,也有超過(guò) 700 名志愿者參與了 1.0 版本的制作。

“我們想開(kāi)發(fā)一種開(kāi)源的編程語(yǔ)言,我們希望這門(mén)語(yǔ)言有 C 語(yǔ)言一樣的速度、R 語(yǔ)言一樣的靈活性,有同像性(homoiconicity), 有像 Lisp 語(yǔ)言那樣擁有真正的宏特性,但是也像 Matlab 一樣有易于理解、被人所熟悉的數(shù)學(xué)標(biāo)記。我們希望它像 Python 一樣易用,像 R 語(yǔ)言一樣適用于統(tǒng)計(jì),像 Perl 一樣適用于字符串處理,處理線(xiàn)性代數(shù)像 Matlab 一樣強(qiáng)大,像 DOS 命令一樣擅長(zhǎng)粘合程序。這似乎看起來(lái)簡(jiǎn)單易學(xué),但是想要讓黑客樂(lè)意去迎合它卻不是簡(jiǎn)單之事。我們希望它具有互動(dòng)性且能夠被編譯”,在《Why we created Julia》這篇文章中,Julia 團(tuán)隊(duì)如此解釋他們開(kāi)發(fā)這個(gè)語(yǔ)言的初衷。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

圖丨Viral Shah(來(lái)源:DT 君)

Viral Shah 也曾經(jīng)表示:“如果你是一名數(shù)學(xué)家、科學(xué)家或者工程師,你可以選擇一種速度快的語(yǔ)言,比如 C++或 Java,又或是任意一種容易學(xué)習(xí)的語(yǔ)言,比如 Matlab,R,或 Python,所以我們創(chuàng)造了 Julia 這種又快又便捷的語(yǔ)言?!比缃?,他已經(jīng)成為 Julia Computing 公司的 CEO,該公司致力于幫助其他公司使用 Julia 語(yǔ)言。

當(dāng)然,Julia 的問(wèn)世,除了讓人感慨 IT 行業(yè)發(fā)展之快、推陳出新之迅猛,另一方面也向所有人提出了一個(gè)新的問(wèn)題:我究竟要不要學(xué)習(xí)這門(mén)新語(yǔ)言。這個(gè)問(wèn)題將非常重要,就像 Y-Combinator 的聯(lián)合創(chuàng)始人 Paul Graham 所說(shuō)的,“當(dāng)你可以選擇你要用的編程語(yǔ)言時(shí),不使用最強(qiáng)的那一種將是一個(gè)錯(cuò)誤”。

在過(guò)去一年中,研究者利用 Julia 在一臺(tái)超級(jí)計(jì)算機(jī)上分析天文圖像,速度提升了 1000 倍,在 15 分鐘內(nèi)將接近 2 億個(gè)天體進(jìn)行分類(lèi)。從技術(shù)上來(lái)看,這種語(yǔ)言還會(huì)長(zhǎng)期發(fā)展下去。然而,現(xiàn)在是一個(gè)里程碑的時(shí)刻:在本周于倫敦舉辦的 Julia 語(yǔ)言年會(huì)上,Julia 1.0 正式發(fā)布!一起發(fā)布的還有 JuliaCon。

Julia 的開(kāi)發(fā)者之一、就職于 MIT 計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室(CSAIL)的教授 Alan Edelman 表示:Julia 1.0 的發(fā)布證明,該語(yǔ)言已經(jīng)做好準(zhǔn)備,將 Python 和 R 的高效性和易用性與 C++的閃電速度結(jié)合在一起,改變技術(shù)世界。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

圖丨Alan Edelman(來(lái)源:麻省理工學(xué)院官網(wǎng))

從實(shí)際應(yīng)用來(lái)說(shuō),Julia 已經(jīng)用于自動(dòng)駕駛汽車(chē)、機(jī)器人和 3D 打印機(jī),此外還廣泛應(yīng)用于精準(zhǔn)醫(yī)療、增強(qiáng)現(xiàn)實(shí)、基因組學(xué)及風(fēng)險(xiǎn)管理。從 Julia 的生態(tài)系統(tǒng)來(lái)說(shuō),目前它主要的特征或應(yīng)用領(lǐng)域?yàn)閿?shù)據(jù)可視化、一般性的 UI 與網(wǎng)站、數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、科學(xué)計(jì)算與平行計(jì)算等。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

Julia 目前下載量已經(jīng)達(dá)到了 200 萬(wàn)次,且 Julia 社區(qū)開(kāi)發(fā)了超過(guò) 1900 多個(gè)擴(kuò)展包。這些擴(kuò)展包包含各種各樣的數(shù)學(xué)庫(kù)、數(shù)學(xué)運(yùn)算工具和用于通用計(jì)算的庫(kù)。除此之外,Julia 語(yǔ)言還可以輕松使用 Python、R、C/C++ 和 Java 中的庫(kù),這極大地?cái)U(kuò)展了 Julia 語(yǔ)言的使用范圍。

MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?

Julia 團(tuán)隊(duì)

Julia 開(kāi)發(fā)者對(duì)該語(yǔ)言提出了很多需求:

我們想要一種十分自由的開(kāi)源語(yǔ)言,同時(shí)兼具 C 語(yǔ)言的速度和 Ruby 語(yǔ)言的靈活度。我們想要一種同像性語(yǔ)言,具有像 Lisp 一樣真正的宏,也有像 Maltlab 一樣淺顯易懂的數(shù)學(xué)符號(hào)。它是像 Python 一樣有用的通用編程語(yǔ)言,像 R 語(yǔ)言一樣便于統(tǒng)計(jì)的語(yǔ)言,像 Perl 一樣自然的字符串處理語(yǔ)言,像 Matlab 一樣強(qiáng)大的線(xiàn)性代數(shù)語(yǔ)言,也是像 shell 一樣的「膠水語(yǔ)言」。它簡(jiǎn)單易學(xué),卻能讓嚴(yán)苛的黑客們?yōu)橹畠A心。我們希望它兼具交互性和可編譯性。

圍繞這一語(yǔ)言,一個(gè)欣欣向榮的社區(qū)已經(jīng)蓬勃發(fā)展起來(lái),為了同一目標(biāo),世界各地的人們不斷地重塑并改進(jìn)著 Julia。超過(guò) 700 人對(duì) Julia 做出了實(shí)質(zhì)性貢獻(xiàn),更有不計(jì)其數(shù)的人制造了數(shù)千個(gè)驚人的 Julia 開(kāi)源包??傊?,我們構(gòu)建了一種這樣的語(yǔ)言:

快速:Julia 為高性能而生。Julia 程序通過(guò) LLVM 為多個(gè)平臺(tái)編譯高效的本地代碼。

通用:它使用多分派作為范例,使得表達(dá)許多面向?qū)ο蠛秃瘮?shù)式的編程模式變得容易。標(biāo)準(zhǔn)庫(kù)提供異步 I/O、進(jìn)程控制、日志記錄、性能分析、包管理器等。

動(dòng)態(tài):Julia 是動(dòng)態(tài)型語(yǔ)言,與腳本語(yǔ)言類(lèi)似,并且支持交互式使用。

專(zhuān)業(yè):它擅長(zhǎng)數(shù)值計(jì)算,其語(yǔ)法適用于數(shù)學(xué),支持多種數(shù)值數(shù)據(jù)類(lèi)型,并具有良好

并行性:Julia 的多分派天生適合定義數(shù)字和類(lèi)數(shù)組的數(shù)據(jù)類(lèi)型。

多樣:Julia 擁有豐富的描述性數(shù)據(jù)類(lèi)型,類(lèi)型聲明使程序條理清晰且穩(wěn)定。

可組合:Julia 的包可以很好地組合在一起。單位數(shù)量的矩陣,或者貨幣和顏色的數(shù)據(jù)列表,都可以組合——而且性能很好。

當(dāng)然,Julia 1.0 中最重要的一個(gè)新特征是對(duì)語(yǔ)言 API 穩(wěn)定性的承諾:為 Julia 1.0 編寫(xiě)的代碼可以繼續(xù)在 Julia 1.1、1.2 等版本上使用。該語(yǔ)言是「完全成熟的」,核心語(yǔ)言開(kāi)發(fā)者和社區(qū)都可以基于這個(gè)堅(jiān)實(shí)的基礎(chǔ)構(gòu)建新的包、工具和特征。

Julia 1.0 不僅涉及穩(wěn)定性,還引入了多種新的強(qiáng)大、創(chuàng)新性語(yǔ)言功能。自 0.6 版本以來(lái)的新功能如下,更多詳細(xì)與準(zhǔn)確的內(nèi)容請(qǐng)查看更新文檔原文:

一種全新的內(nèi)置程序包管理器給 Julia 1.0 帶來(lái)巨大的性能提升,并令其相比以往更容易進(jìn)行程序包和依賴(lài)庫(kù)安裝。它還支持每項(xiàng)目(per-project)的包環(huán)境,并記錄工作應(yīng)用的明確狀態(tài)來(lái)和其他人(以及你的未來(lái)項(xiàng)目)共享。最后,該新設(shè)計(jì)還完全支持私人包和軟件包存儲(chǔ)庫(kù)。你可以使用相同的工具安裝和管理你用于開(kāi)源包生態(tài)系統(tǒng)的私人包。JuliaCon 的展示視頻對(duì)新設(shè)計(jì)和行為提供了很好的概述。

Julia 擁有對(duì)缺失值的新的標(biāo)準(zhǔn)表示。允許表示和處理缺失數(shù)據(jù)對(duì)于統(tǒng)計(jì)和數(shù)據(jù)科學(xué)來(lái)說(shuō)是很基礎(chǔ)的。在典型的 Julia 編程形式中,新的解決方案是通用的、可組合的和高性能的。任何泛用群集類(lèi)型可以高效地支持缺失值,僅需要允許元素包含預(yù)定義值 missing。這種「統(tǒng)一類(lèi)型化」的群集的性能在過(guò)去版本中可能會(huì)非常慢,但如今的編譯器改進(jìn)已經(jīng)允許 Julia 在其它系統(tǒng)中匹配自定義 C 或 C++的缺失值表示的速度,同時(shí)在通用性和靈活性上也遠(yuǎn)遠(yuǎn)超越過(guò)去的版本。

內(nèi)置的 String 類(lèi)型現(xiàn)在可以安全地支持任意數(shù)據(jù)。你的程序不會(huì)在一項(xiàng)工作中因?yàn)闊o(wú)效 Unicode 的單個(gè)丟失字節(jié)就浪費(fèi)數(shù)小時(shí)或數(shù)天的時(shí)間。所有的字符串?dāng)?shù)據(jù)在指示哪些字符是有效或無(wú)效的同時(shí)就已經(jīng)被保存,允許你的應(yīng)用安全、方便地處理包含所有不可避免瑕疵的真實(shí)世界數(shù)據(jù)。

廣播(broadcasting)由于方便的語(yǔ)法特性已經(jīng)成為了一種核心的語(yǔ)言功能,并且已經(jīng)比過(guò)去更加強(qiáng)大。在 Julia 1.0 中,可以很簡(jiǎn)單地將廣播擴(kuò)展到自定義類(lèi)型,并在 GPU 和其它向量化硬件上實(shí)現(xiàn)高效的優(yōu)化計(jì)算,為未來(lái)更高的性能效益奠定了基礎(chǔ)。

命名元數(shù)組是一種新的語(yǔ)言功能,可以通過(guò)命名使數(shù)據(jù)表示和訪(fǎng)問(wèn)更加高效和方便。例如,你可以將一行數(shù)據(jù)表示為 row = (name="Julia", version=v"1.0.0", releases=8),并使用 row.version 來(lái)訪(fǎng)問(wèn) version 列,它與不那么便利的 row [2] 有相同的性能。

點(diǎn)運(yùn)算符現(xiàn)在可以重載,并允許類(lèi)型使用 obj.property 句法獲取除 getting 和 setting 結(jié)構(gòu)域外的含義。這對(duì)于使用 Python 和 Java 等面向?qū)ο笳Z(yǔ)言之間更加平滑的交互操作非常有用。屬性訪(fǎng)問(wèn)器重載還允許獲取一列數(shù)據(jù)的語(yǔ)法匹配命名元組的語(yǔ)法:你可以編寫(xiě) table.version 以訪(fǎng)問(wèn)表中的 version 列,這就和使用 row.version 訪(fǎng)問(wèn)行的 version 字段一樣。

Julia 優(yōu)化器在很多方面比我們列出來(lái)的特征還要優(yōu)秀,但這里只會(huì)提一些亮點(diǎn)。優(yōu)化器現(xiàn)在可以通過(guò)函數(shù)調(diào)用傳播常數(shù),因此比以前能更好地消除無(wú)用代碼和實(shí)現(xiàn)靜態(tài)評(píng)估。編譯器在避免為長(zhǎng)期目標(biāo)分配短期包裝器方面也做得更好,這使得開(kāi)發(fā)者能使用便捷的高級(jí)抽象并且不會(huì)產(chǎn)生性能損失。

現(xiàn)在可以用聲明參數(shù)類(lèi)型的構(gòu)造函數(shù)的方式調(diào)用它們自己,這消除了語(yǔ)言句法中令人困惑且模糊的地方。

完全重新設(shè)計(jì)迭代協(xié)議,使之更易實(shí)現(xiàn)多種可迭代量。Julia 1.0 沒(méi)有設(shè)計(jì)三種不同泛型函數(shù)(start、next、done)的方法,而是設(shè)計(jì) iterate 函數(shù)的一參數(shù)和二參數(shù)方法。這通常允許在開(kāi)始狀態(tài)使用包含默認(rèn)值的單一定義來(lái)便捷地定義迭代。更重要的是,這使得實(shí)現(xiàn)只在嘗試并無(wú)法生成值后才知道它們已經(jīng)被實(shí)施過(guò)的迭代器成為可能。這些迭代器在輸入/輸出(I/O)、網(wǎng)絡(luò)和生產(chǎn)者/消費(fèi)者模式中是非常普遍的,Julia 可以用一種直接、準(zhǔn)確的方式表達(dá)這些迭代器。

作用域規(guī)則(scope rule)被簡(jiǎn)化。局部作用域的結(jié)構(gòu)現(xiàn)在可以一致地進(jìn)行使用,不用管某命名的全局約束是否已經(jīng)存在。

Julia 語(yǔ)言本身是非常好的學(xué)習(xí)器,很多組件被分割封裝進(jìn) Julia 的標(biāo)準(zhǔn)庫(kù)包,而不是作為基礎(chǔ)語(yǔ)言的一部分。如果你需要它們,可以導(dǎo)入它們(無(wú)需安裝)。未來(lái),標(biāo)準(zhǔn)庫(kù)還將出現(xiàn)多種版本,并獨(dú)立于 Julia 更新,這使得它們可以更快地迭代。

欲獲取更多人工智能最新行業(yè)資訊及深度報(bào)告:AIBizHerald

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2018-08-27
MIT發(fā)布史上最強(qiáng)科學(xué)計(jì)算編程語(yǔ)言?
研究者利用Julia在一臺(tái)超級(jí)計(jì)算機(jī)上分析天文圖像,速度提升了1000倍,在15分鐘內(nèi)將接近2億個(gè)天體進(jìn)行分類(lèi)。

長(zhǎng)按掃碼 閱讀全文