基于 WebAssembly 的十個熱門語言項目

從瞬時運行的Web應(yīng)用程序到瀏覽器中的Python語言来破,一些熱門的編程語言和編譯器項目為WebAssembly的承諾提供多種選擇碳竟。

如今的Web應(yīng)用程序的運行速度和響應(yīng)速度遠不及桌面應(yīng)用程序磷雇,但如果能做到呢?這就是WebAssembly做出的承諾。

WebAssembly是一種低級的類匯編(assembly-like)語言,具有緊湊的二進制格式陕贮,可以在Web瀏覽器中以接近桌面設(shè)備的性能運行。與此同時潘飘,WebBaseMulk為C/C++飘蚯、C馍迄、RISE、GO局骤、Kotlin攀圈、SWIFT等編程語言提供了一個可移植的編譯目標。

WebAssembly被譽為一種既可以提高Web應(yīng)用程序性能峦甩,又允許在瀏覽器應(yīng)用程序開發(fā)中使用JavaScript以外的語言的方式赘来,它得到Google、Mozilla凯傲、Apple和Microsoft瀏覽器的支持犬辰,所有這些瀏覽器都在其引擎中支持該技術(shù)。

WebAssembly促進了一系列新技術(shù)的開發(fā)冰单,其中包括利用其強大功能的全新編程語言幌缝。以下是致力為WebAssembly支持的10個語言項目。

1.Binaryen

Binaryen是一個用于WebAssembly的編譯器工具鏈基礎(chǔ)設(shè)施庫诫欠。Binaryen采用C++編寫涵卵,旨在使編譯到WebAssembly變得更加容易、高效和快速荒叼。它在單個標頭中有一個C API轿偎,并且可以從JavaScript中使用。輸入以類似 WebAssembly的形式被接受被廓,但一般控制圖也被一些編譯器接受坏晦。

Binaryen的內(nèi)部IR使用緊湊的數(shù)據(jù)結(jié)構(gòu),并利用所有 CPU 內(nèi)核進行并行代碼生成和優(yōu)化嫁乘。IR也很容易編譯到WebAssembly昆婿,因為它本質(zhì)上是WebAssembly的一個子集。特定于 WebAssembly的優(yōu)化提高了代碼大小和速度蜓斧,使Binaryen可以單獨用作編譯器后端仓蛆。

2.Blazor WebAssembly

Blazor WebAssembly是一個框架,用于使用.NET構(gòu)建交互式法精、客戶端的單頁Web應(yīng)用程序多律,并將這些應(yīng)用程序托管在基于WebAssembly的.NET 運行時的瀏覽器中(包括移動設(shè)備瀏覽器)。不需要插件或?qū)⒋a重新編譯成其他語言搂蜓。在運行時使.NET代碼能夠通過 WebAssembly的JavaScript API訪問瀏覽器功能狼荞。

當(dāng)Blazor WebAssembly應(yīng)用程序在瀏覽器中運行時,C#代碼文件和Razor文件將編譯為.NET程序集帮碰,這些程序集將隨著.NET運行時一起下載到瀏覽器相味。而且,由于.NET代碼是在瀏覽器的JavaScript沙盒中的WebAssembly上執(zhí)行的殉挽,所以它會受到保護丰涉,因此可以防止客戶端計算機上的惡意操作拓巧。Blazor WebAssembly應(yīng)用程序可以獨立部署,也可以在服務(wù)器端支持下部署一死。

3.Cheerp

Leaning科技公司開發(fā)的Cheerp被定位為用于Web的企業(yè)級C/C++ 編譯器肛度,將C、C++投慈、甚至C++ 17編譯成 WebAssembly承耿、JavaScript 或兩者的組合。Cheerp可以集成到 LLVM/Clang基礎(chǔ)設(shè)施中伪煤,通過自定義優(yōu)化來提高性能并最小化編譯輸出的大小加袋。Cheerp主要用于將現(xiàn)有的C/C++庫和應(yīng)用程序移植到HTML5,也可用于編寫Web應(yīng)用程序和WebAssembly組件抱既。Cheerp是在開源和商業(yè)許可下提供的职烧。

4.CheerpJ

這款基于LLVM的編譯器被譽為“Web的Java編譯器”,可將任何Java客戶端應(yīng)用程序轉(zhuǎn)換為WebAssembly防泵、JavaScript和HTML蚀之,從而使Java客戶端應(yīng)用程序能夠在各個瀏覽器中運行。CheerpJ利用三個組件:AOT(提前)編譯器择克、WebAssembly和JavaScript DOM互操作性API恬总,以從Java訪問DOM前普。使用CheerpJ肚邢,可以使用AOT 編譯器編譯JAR檔案。CheerpJ 不需要任何服務(wù)器端支持拭卿。

和Cheerp一樣骡湖,CheerpJ也是Leaning科技公司開發(fā)的。

5.Emscripten

Emscripten這個開源編譯器工具鏈將C和C++或任何其他使用LLVM編譯器技術(shù)的語言編譯成WebAssembly峻厚,以便部署在Web响蕴、Node.js或Wasm上。Emscripten 編譯器emcc也通過JavaScript為編譯后的代碼提供API支持惠桃。Emscripten已被用于將現(xiàn)實世界的代碼庫列表轉(zhuǎn)換為WebAssembly浦夷,其中包括商業(yè)代碼庫,例如Unreal Engine 4游戲引擎和Unity 3D 平臺辜王。Emscripten支持C和C++標準庫劈狐、C++和OpenGL/WebGL圖形命令荠商,用于安裝Emscripten 工具鏈(emcc讳苦、LLVM 等)的Emscripten SDK可以在Linux澎埠、MacOS和Windows等操作系統(tǒng)上使用承璃。

6.Forest

Forest 是一種可編譯為 WebAssembly的函數(shù)式編程語言妄壶。開發(fā)人員Nick Johnstone表示,F(xiàn)orest背后的目標是提供一種語言题山,使創(chuàng)建復(fù)雜胖替、交互式和功能性的Web應(yīng)用程序變得更容易,并且沒有這種方法的傳統(tǒng)開銷坟岔。

目前被描述為“pre-alpha谒兄、實驗性、概念研究軟件”社付,F(xiàn)orest具有靜態(tài)類型舵变、模式匹配、不可變數(shù)據(jù)結(jié)構(gòu)瘦穆、多種語法和自動代碼格式纪隙。開發(fā)中的第一個語法受到Elm和Haskell的啟發(fā)。

Forest語言的設(shè)計原則包括易于協(xié)作扛或、盡可能無痛的測試以及在結(jié)構(gòu)和語義上達成一致绵咱,同時在語法上達成一致。Johnstone 努力讓Forest足夠快來構(gòu)建復(fù)雜的游戲熙兔,這樣使用網(wǎng)絡(luò)應(yīng)用程序運行得非潮妫快。

7.Grain

開發(fā)該項目的網(wǎng)站聲稱住涉,Grain語言具有學(xué)術(shù)語言和功能語言的特性麸锉。通過Binaryen工具鏈和編譯器基礎(chǔ)設(shè)施編譯為WebAssembly,Grain可以在瀏覽器舆声、服務(wù)器和任何地方運行花沉。沒有運行時類型錯誤,也不需要類型注釋媳握。Grain工具鏈具有CLI碱屁、編譯器、標準庫蛾找,并作為單個二進制文件提供娩脾。開發(fā)人員將需要Node.js和Yarn從源代碼構(gòu)建Grain,并且二進制文件可用于Linux打毛、MacOS和Windows柿赊。

8.JWebAssembly

JWebAssembly由I-Net Software公司開發(fā),是一個 Java字節(jié)碼到WebAssembly編譯器幻枉,它以Java類文件為輸入碰声,生成WebAssembly二進制格式(.wasm文件)或文本格式(.wat文件)作為輸出。目標是使用WebAssembly在瀏覽器中本地運行展辞。在理論上奥邮,JWebAssembly可以編譯那些能夠編譯Java ava字節(jié)碼的語言,例如Clojure、Groovy洽腺、JRuby脚粟、Kotlin和Scala,這些語言都有待測試蘸朋。

JWebAssembly尚未準備好生產(chǎn)核无。盡管JWebAssembly 1.0版本所需的一切都已實現(xiàn),但測試仍有待完成藕坯。1.0版路線圖需要Java字節(jié)碼解析器团南、測試框架和Gradle插件等功能。 I-Net Software公司預(yù)計今年將發(fā)布JWebAssembly 1.0炼彪。

9.Pyodide

Pyodide項目最近從Mozilla遷移出來之后成為一個獨立項目吐根,將Python和Python科學(xué)堆棧編譯到WebAssembly,將Python 3.8辐马、NumPy拷橘、SciPy、Matplotlib喜爷、Scikit-learn 和其他數(shù)十個包引入瀏覽器冗疮。Pyodide提供JavaScript和Python之間對象的透明轉(zhuǎn)換,并允許Python 訪問Web API檩帐。Pyodide始于2018年术幔,是Iodide項目的一部分,用于在瀏覽器中進行數(shù)據(jù)科學(xué)湃密。用戶可以從瀏覽器中的REPL嘗試采用Pyodide诅挑。

10.TeaVM

作為Java字節(jié)碼的提前編譯器,TeaVM通過WebAssembly和JavaScript在瀏覽器中運行勾缭。但是揍障,需要注意 WebAssembly 支持目前處于試驗階段目养。與其近親GWT(Google Web Toolkit)一樣俩由,TeaVM允許開發(fā)人員采用Java編寫應(yīng)用程序,并將它們部署為JavaScript癌蚁。與GWT不同幻梯,TeaVM使用編譯后的類文件,而不是源代碼努释。此外碘梢,TeaVM依賴于現(xiàn)有的編譯器,例如javac伐蒂、kotlinc和scalac煞躬,因此可以編譯Kotlin和Scala代碼以及Java。TeaVM主要是一個Web開發(fā)工具,但它不是為在Java或Kotlin中使用大型代碼庫并生成JavaScript而設(shè)計的恩沛。TeaVM子項目Flavour可以作為編寫單頁Web應(yīng)用程序的框架在扰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷客,隨后出現(xiàn)的幾起案子芒珠,更是在濱河造成了極大的恐慌,老刑警劉巖搅裙,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皱卓,死亡現(xiàn)場離奇詭異,居然都是意外死亡部逮,警方通過查閱死者的電腦和手機娜汁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兄朋,“玉大人存炮,你說我怎么就攤上這事◎诶欤” “怎么了穆桂?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長融虽。 經(jīng)常有香客問我享完,道長,這世上最難降的妖魔是什么有额? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任般又,我火速辦了婚禮,結(jié)果婚禮上巍佑,老公的妹妹穿的比我還像新娘茴迁。我一直安慰自己,他們只是感情好萤衰,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布堕义。 她就那樣靜靜地躺著,像睡著了一般脆栋。 火紅的嫁衣襯著肌膚如雪倦卖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天椿争,我揣著相機與錄音怕膛,去河邊找鬼。 笑死秦踪,一個胖子當(dāng)著我的面吹牛褐捻,可吹牛的內(nèi)容都是我干的掸茅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柠逞,長吁一口氣:“原來是場噩夢啊……” “哼倦蚪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起边苹,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陵且,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后个束,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慕购,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年茬底,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪悲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡阱表,死狀恐怖殿如,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情最爬,我是刑警寧澤涉馁,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站爱致,受9級特大地震影響烤送,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糠悯,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一帮坚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧互艾,春花似錦试和、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至局嘁,卻和暖如春溉箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悦昵。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晌畅,地道東北人但指。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棋凳。 傳聞我的和親對象是個殘疾皇子拦坠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容