全能語言Julia,從Covid-19建模到太空規(guī)劃,科研人員偏愛Ta
2012年, Julia語言橫空出世,從此科學(xué)計算領(lǐng)域又多了一個強大的工具。
如今,Julia已經(jīng)走過了十個年頭,擁有數(shù)十萬用戶,在數(shù)百所大學(xué)和公司內(nèi)開始建立Julia軟件技術(shù)棧,從個性化藥物、氣候建模、新材料研發(fā),甚至太空任務(wù)規(guī)劃都有Julia的身影。
最近,Julia的開發(fā)者們又發(fā)布了一篇博客,收集了過去十年的一些Julia故事,希望共同反思和進步,讓Julia在十年后變得更好。
Julia的十年征途
Julia的開發(fā)始于2009年,Viral Shah給他的兩個朋友Jeff Bezanson和Stefan Karpinski發(fā)了一封郵件,發(fā)起了一場科學(xué)計算語言的新革命。
2012年Julia正式發(fā)布,在《我們?yōu)槭裁匆獎?chuàng)建Julia》博客中,開發(fā)人員說:因為我們很貪婪,想讓Julia擁有得更多。
Julia結(jié)合了流行語言中所有最理想的特性,他們希望創(chuàng)造出的Julia要像C語言一般快速而又擁有如同Ruby的動態(tài)性;要具有Lisp般真正的同像性而又有Matlab般熟悉的數(shù)學(xué)記號;要像Python般通用、像R般在統(tǒng)計分析上得心應(yīng)手、像Perl般自然地處理字符串、像Matlab般具有強大的線性代數(shù)運算能力、像shell般膠水語言的能力,易于學(xué)習(xí)而又不讓真正的黑客感到無聊;并且它應(yīng)該是交互式的,同時又是編譯型的。
初始版本的Julia具有可選類型、多重派發(fā),以及通過類型推理和即時編譯(JIT)實現(xiàn)的良好性能,使用LLVM。
2014年,第一屆Julia年度會議在芝加哥舉行。此后,JuliaCon有近3萬名與會者,演講者包括Soumith Chintala、Katherine A. Yelick和Linda Petzold。
2015年,Julia計算公司由開發(fā)團隊和Keno Fischer和Deepak Vinchhi成立,旨在開發(fā)一些基于Julia的客戶產(chǎn)品。他們的旗艦產(chǎn)品JuliaHub是一個開發(fā)Julia程序的SaaS平臺,并部署到上千個節(jié)點上。
2017年6月,團隊從General Catalyst和Founder Collective籌集了460萬美元的種子資金。
2018年,Julia 1.0版本正式發(fā)布,團隊表示Julia已經(jīng)「完全出爐」了。該版本引入了API的穩(wěn)定性、內(nèi)置的包管理器、缺失值的規(guī)范表示和內(nèi)置的String類型,能夠安全地創(chuàng)建任意數(shù)據(jù)。這個版本的意義重大,也意味著Julia不再處于「開發(fā)者階段」。
2019年,Julia從美國政府籌集了110萬美元的資金。
在2019-2020年間,又陸續(xù)發(fā)布了v1.1、v1.2、v1.3和v1.4版本,對bug進行了修復(fù),并增加了異常堆棧、對網(wǎng)絡(luò)瀏覽器的內(nèi)置支持、可組合的多線程并行和Julia包的二進制工件系統(tǒng)。
2020年的Julia v1.5是一個大版本,博文宣稱這個版本帶來了一個主要的優(yōu)化,能夠顯著減少一些工作負(fù)載中的堆分配。此外,這些功能還包括對Mozilla的RR工具的記錄和重放調(diào)試支持,結(jié)構(gòu)布局和分配優(yōu)化,多線程API的穩(wěn)定和改進,延遲改進,以及對一些流行情況的算法改進,如生成正常分布的雙精度浮點數(shù)。
2021年,接受了由Dorilton Ventures領(lǐng)導(dǎo)的2400萬美元的A輪融資。
同年發(fā)布的Julia 1.6通過并行預(yù)編譯和更快的軟件包加載改善了性能,v1.7引入了更快的隨機數(shù)生成器,并使用Xoshiro256系列RNG中更小的狀態(tài),在每個任務(wù)中都放一個狀態(tài),并在每個任務(wù)創(chuàng)建時分叉它。這使得隨機數(shù)只依賴于任務(wù)的生成結(jié)構(gòu),而不依賴于并行執(zhí)行計劃。
2022年2月,Julia走過十年,版本號也將發(fā)布1.8版本。
Julia背后的用戶故事
截至2020年,Julia的下載量累計3500萬次,擁有6800個Julia包,超過1180萬行代碼,有超過一萬家公司,1500家大學(xué)都在使用。
Julia以它的開放、熱情,成功在社會公益方面創(chuàng)建了無數(shù)應(yīng)用:紐約聯(lián)邦儲備銀行利用Julia對美國經(jīng)濟進行建模,主要原因就是Julia比Matlab速度快10倍;研究人員還用Julia來估計2021年的COVID-19誘發(fā)的經(jīng)濟沖擊。
2019年,Julia是氣候建模聯(lián)盟創(chuàng)建的價值數(shù)百萬美元的下一代全球氣候模型的唯一實施語言。聯(lián)邦航空管理局使用Julia來開發(fā)下一代機載防撞系統(tǒng)。它還被用于Celeste項目,在Cori II超級計算機上達到了1.54 petaflops的峰值性能。Aviva和BlackRock使用Julia來計算風(fēng)險和執(zhí)行時間序列分析。Julia也是美國宇航局用于模擬航天器分離動力學(xué)的標(biāo)準(zhǔn)語言。巴西的INPE也用Julia來計劃太空任務(wù)。
使用Julia的大公司包括英偉達、阿斯利康、谷歌、英特爾、微軟、亞馬遜、蘋果、迪士尼、Facebook、福特、Grindr、IBM、微軟、Oracle和Uber、Moderna和輝瑞。
十年歷程,也有很多用戶分享他們使用Julia的故事。
網(wǎng)友@keno 分享:十年前,我剛剛高中畢業(yè),作為交換生在馬里蘭州東海岸的一所小學(xué)校學(xué)習(xí)。當(dāng)時手握大學(xué)錄取通知書,并沒有什么其他事情可做,我對計算科學(xué)中需要更好的工具產(chǎn)生了強烈的共鳴,并在那一天開始著手開發(fā)Julia。在過去的十年里,我?guī)缀趺刻於荚谑褂肑ulia。在這段時間里,我從事過各種工作,從天文學(xué),到同態(tài)加密,再到模擬半導(dǎo)體,以及中間的許多工作。一路走來,有許多令人難忘的事件。5年前,我們在世界最大的一臺計算機上同時運行了超過一百萬個Julia線程,這對動態(tài)語言來說是一個創(chuàng)舉,同時把Julia推到了Petaflop的大關(guān),雖然現(xiàn)在已經(jīng)很容易實現(xiàn)了。每年,我都期待著參加JuliaCon,與我一路走來結(jié)識的朋友們聚在一起,欣賞我們從當(dāng)初在麻省理工學(xué)院的一個會議室里的一小撮人走到現(xiàn)在。這是一個瘋狂的10年,而且事情只會變得更加令人興奮。
網(wǎng)友@aviks 分享:十年前,我在Hacker News上看到這篇博客時的第一反應(yīng)是「我們真的需要另一種編程語言嗎」。那天工作很忙,所以我下載了源代碼,并驚訝地看到它第一次就成功構(gòu)建了。兩周后,我提交了第一個PR。在增加了一個新的數(shù)值類型后,Julia向我證明了簡單和高性能的數(shù)值計算是肯定可行的。在此后的幾年里,我很榮幸地成為了這個神奇社區(qū)的一部分,并且能夠在工作中每天編寫 Julia。毫無疑問,Julia 已經(jīng)改變了我的生活,而且我認(rèn)為它已經(jīng)以一種小小的方式改變了世界。
網(wǎng)友@collinwarner分享:我在2019年春季第一次接觸到Julia,當(dāng)時是在Alan Edelman擔(dān)任教授的線性代數(shù)課。課程結(jié)束后,我主動聯(lián)系導(dǎo)師,他把我介紹給了Chris Rackauckus,在接下來的一年里,我致力于創(chuàng)建一個神經(jīng)微分方程?,F(xiàn)在我已經(jīng)大四了,我又回到了實驗室。并在秋季選修了軟件性能工程,想讓代碼更快,并對編譯器有更多了解。我認(rèn)為Julia實驗室是一個完美的地方,和他們一起工作時的體驗特別棒。我計劃明年繼續(xù)與他們實驗室合作。
網(wǎng)友@emmettgb 分享:我第一次接觸Julia語言是在2014年的秋天。當(dāng)時我還很年輕,但對計算科學(xué)很著迷,我主要使用Python和R來完成這兩項任務(wù)。我曾在幾個項目中與同行合作,我們會遇到「兩種語言問題」,這讓我非常沮喪。我是團隊中唯一會寫C語言的成員,而Cython對我們的問題并沒有想象中的那么大幫助。那時,像Numba和遠程Python解釋這樣的工具甚至還沒有達到現(xiàn)在的水平,我正在尋找更多關(guān)于讓Python運行得更快的信息,偶然發(fā)現(xiàn)了Julia論壇的帖子。我被它的語法所吸引,自從那天開始學(xué)習(xí) Julia 后,它就成了我最喜歡的編程語言。我能夠用Julia而非C語言來解決我們的問題,而且我能夠在需要時通過PyCall.jl來調(diào)用Python代碼。Julia最終完美地完成了工作,所以每次遇到這類問題的項目,我都會用它來解決。Julia語言一直做得很好,然后所有不斷出現(xiàn)在這門語言上的變化都是如此之大。現(xiàn)在Julia語言有一個更棒的生態(tài)系統(tǒng),所以一切只會變得更好。