Concurnas:JVM上用於併發和GPU計算的新語言

Concurnas是一種新的開源JVM編程語言,旨在用於構建併發和分佈式系統。Concurnas是一種靜態類型的語言,具有面向對象,功能和反應式編程構造。

憑藉隱藏多線程複雜性的簡潔語法以及對GPU計算,向量化和矩陣等數據結構的本機支持,Concurnas可以構建機器學習應用程序和高性能並行應用程序。此外,Concurnas還提供了與其他JVM語言(如Java和Scala)的互操作性。Concurnas支持Oracle JDK和OpenJDK版本1.8到最新的GA版本14。

以下是與Concurnas的創始人兼Concurnas Ltd.的創始人Jason Tatton的交談,討論了該語言,其某些設計決策和功能。

是什麼促使您創建一種新的編程語言?

賈森·塔頓(Jason Tatton):在我職業生涯的第一階段,我曾在投資銀行業務團隊工作,併爲高頻交易建立交易模型和系統。我看到我們每天要解決的工程問題主要集中在構建可靠的可擴展高性能分佈式併發系統上。

我發現在大多數流行的編程語言(例如Java和C ++)中公開的,具有共享的可變可變狀態併發狀態模型的當前線程和鎖對於即使是非常有才華的世界一流的工程師來說也太難了。我對自己說:“必須有一種更好的方法來解決這類併發的問題”。因此,我於2017年辭職並着手解決這個問題,Concurnas 作爲一種使併發編程變得更容易的編程語言誕生了。

是什麼促使您選擇JVM而不是說LLVM?

Tatton:在運行時/虛擬機(例如LLVM或JVM)和宿主語言方面都需要進行很多創新。構建新的語言或虛擬機是一項艱鉅的任務,而實際上,尤其是在與小型團隊合作且期限緊迫的情況下,必須選擇專注於某個領域或另一領域。

使用Concurnas時,我選擇專注於語言,因此這決定了要使用哪個運行時。在性能方面,LLVM和JVM類似。最後,選擇JVM的原因有兩個:

(1)JVM是地球上最流行且分佈最廣泛的虛擬機-大多數企業使用Java,因此已經建立了JVM用例

(2)現有大量使用JVM語言(例如Java,Scala和Kotlin)編寫的企業級代碼,它們在一種可以提供易於理解和使用的併發模型的語言中尋求利用。

通過在JVM上實現Concurnas,可以爲用戶提供利用其所有現有JVM語言代碼的功能。我們還可以訪問Java標準庫,因此不必從頭開始創建一個支持該語言的庫。

您是怎麼想到“ Concurnas”這個名字的?

Tatton:由於Concurnas主要是一種語言,旨在使每個人都可以更輕鬆地進行併發編程,因此我們開始將其稱爲“ Concur”,即“ Concur-rent”。後來,對“ -nas”進行了標記,使“ Concurnas”聽起來更好。

總體趨勢是主要在系統編程中使用C,Rust和Go,而Java,Python和C#等語言則主要用於應用程序編程。Concurnas在哪裏?

Tatton:Concurnas專爲解決併發,並行和分佈式計算問題而設計。在很大程度上,Concurnas擅長解決編程的系統和應用程序領域中存在的各種問題。我們現在正在研究的一件事是採用一種更類似於Rust的內存管理模型,以便爲需要執行更多低級內存管理的用戶提供機會,同時在Concurnas中擁有自動內存管理和垃圾回收的現有功能。如果他們願意的話,就退縮。

您會推薦Concurnas來編寫機器學習算法嗎?

Tatton:儘管JVM和Java語言提供了卓越的性能,但尚未被ML應用廣泛採用。這是不幸的。我相信這可能是由於Java語言的冗長。Concurnas解決了許多此類問題,因此在此基礎上,我要說它是出色的候選人,這要歸功於其併發模型和對GPU計算的一流公民支持-這對ML應用程序非常有益。

此外,我們正在尋找增加對語言自動區分的一流公民支持。這樣,除了Apple Swift之外,Concurnas將成爲第二種支持該語言功能的語言。這對於實施ML算法以及從事金融衍生工具計算的用戶將帶來巨大的好處。

您構建的Concurnas的哪個功能最令您滿意?

Tatton:現代圖形卡中存在的GPU可以用於通用目的的大規模並行計算。與傳統的基於單核CPU的算法相比,利用GPU的算法將計算速度提高多達100倍是很常見的。此外,與基於CPU的實現相比,對於每個FLOP,此計算的功耗和硬件成本大大降低。

傳統上,用戶必須學習C / C ++才能利用GPU進行通用計算,這對於許多人來說是一個很大的入門障礙。Concurnas內置了對GPU計算的一流公民支持。用戶可以編寫慣用的,外觀正常的Concurnas代碼,並使該代碼直接在GPU上運行,而無需首先學習C / C ++。

提供此功能非常令人滿意,原因有兩個:

(1)就減少計算的環境成本而言,GPU計算可以真正發揮作用。爲此提供語言級別的支持爲開發人員打開了閘門,使他們可以開始利用GPU硬件並從中受益

(2)從技術上講,Concurnas的GPU計算組件主要是用Concurnas語言代碼本身編寫的!

這帶來了一些有關引導Concurnas語言編譯器的編譯的有趣技術挑戰,但是必須遵循“喫自己的狗糧”的原則來進行此操作,這一點很重要。

Concurnas如何提供併發計算?它在後臺使用同步原語和線程嗎?

Tatton:Concurnas中公開的核心併發原語是隔離。隔離是輕量級線程,可以同時執行計算。Concurnas中的所有代碼都在隔離中執行。隔離不能直接在彼此之間共享內存,從屬數據在創建時就被複制到隔離中-防止狀態的意外共享,否則狀態共享可能導致無法擴展的,不確定的程序行爲。分離物之間狀態的受控通信是通過使用稱爲refs的特殊對象來實現的,Concurnas自身的類型系統爲其提供了支持。

在使用原始線程的情況下,我們受JVM的限制(可能產生的數量)限制,而在隔離線程中,我們的限制僅受機器可訪問的內存量限制。這樣,隔離器的規模要比原始線程好得多。在執行方面,隔離多路複用,並以協作方式作爲延續運行。當隔離由於遇到等待來自另一個隔離的數據(通過ref通信)而無法繼續計算的點時,它將執行其底層原始線程的執行,以便該線程可以執行不同的隔離。無論我們是在單核還是多核機器上執行,並行執行的基本模型都保持不變。

該模型的副作用是我們能夠使用ref支持反應式編程範例。我們可以創建特殊的隔離(通過everyonchange關鍵字或相關的緊湊型Concurnas語法),這些隔離對一個或多個輸入ref所做的更改做出反應並觸發,並可以選擇自己返回ref-從而爲自己創建反應式計算圖。這是解決併發問題的自然方法。

Concurnas的生產準備好了嗎?

Tatton:Concurnas的構建始於2017年,並於2019年12月在MIT許可下作爲開源正式發佈了第一個生產版本。Concurnas現在已經可以生產了,在Concurnas Ltd.,我們能夠爲各種規模的組織提供商業支持包需要它。關於互聯網上可用語言的免費社區資源也越來越多。

在未來五年中,您會在哪裏看到Concurnas?

塔頓(Tatton):自三年前Concurnas成立以來,已經取得了很多成就。想象一下,隨着社區在未來五年,十年或三十年中的不斷髮展,我們將能夠實現的成就令人非常興奮!如前所述,在不久的將來,我們正在考慮爲語言增加自動區分功能。除此之外,我們正在尋求對用於處理大型數據集的堆外內存管理的改進支持以及改進的GPU計算接口。最後,我們正在考慮以對Jupyter筆記本,VS Code,IntelliJ和Eclipse的IDE支持的形式提供開發人員工具支持。

我們非常注重社區,歡迎反饋,並致力於滿足積極使用該語言的客戶的需求。爲此,我們希望聽到任何讀者對他們希望在Concurnas編程語言中看到的內容的看法;請隨時通過Concurnas網站上列出的一種方法與我們聯繫

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