2023 年 WebAssembly 現(xiàn)狀:第四種 Web 語(yǔ)言
2023 年度 WebAssembly 現(xiàn)狀調(diào)查結(jié)果出爐,下面就來(lái)看看 2023 年的 WebAssembly 發(fā)展的怎么樣了!
WebAssembly 是一種可移植、低級(jí)別的字節(jié)碼語(yǔ)言,旨在提供一種通用的編譯目標(biāo),以允許在 Web 上執(zhí)行高性能計(jì)算密集型應(yīng)用程序。它是一種新型的虛擬機(jī)技術(shù),可以在所有主要的 Web 瀏覽器中運(yùn)行,并且還可以在其他環(huán)境中使用。
WebAssembly 通過(guò)在 Web 瀏覽器中嵌入本地代碼模塊,能夠直接訪問(wèn)底層系統(tǒng)硬件,實(shí)現(xiàn)了快速加載和執(zhí)行的特性,因此被廣泛認(rèn)為是未來(lái) Web 應(yīng)用的基礎(chǔ)技術(shù)之一。WebAssembly 可以與 JavaScript 和其他 Web 技術(shù)協(xié)同工作,使開(kāi)發(fā)人員能夠使用多種編程語(yǔ)言來(lái)構(gòu)建在線應(yīng)用,并且具備高效、跨平臺(tái)的特點(diǎn)。
WebAssembly 于 2019 年 12 月 5 日成為萬(wàn)維網(wǎng)聯(lián)盟(W3C)的推薦標(biāo)準(zhǔn),與 HTML,CSS 和 JavaScript 一起成為 Web 的第四種語(yǔ)言。
下面是本次調(diào)查結(jié)果概覽:
- Rust 和 JavaScript 的使用量持續(xù)增加,但一些更顯著的變化:Swift 和 Zig 的采用率都顯著增加。
- 當(dāng)談到開(kāi)發(fā)者所“渴望使用”的編程語(yǔ)言時(shí),Zig、Kotlin和C#等語(yǔ)言的受歡迎程度超過(guò)了它們目前的實(shí)際使用率。
- WebAssembly 仍然最常用于 Web 應(yīng)用開(kāi)發(fā),但 Serverless 正在持續(xù)興起,使用 WebAssembly 作為插件環(huán)境的使用也在增加。
- 線程、垃圾回收和相對(duì)較新的組件模型提案是人們最感興趣的 WebAssembly 發(fā)展方向。
- 對(duì)于 WASI(WebAssembly 系統(tǒng)接口),最受關(guān)注的是 I/O 提案(如 HTTP、文件系統(tǒng))。
- 開(kāi)發(fā)者對(duì) WAI 發(fā)展的滿意度明顯低于對(duì) WebAssembly 發(fā)展的滿意度。
- 開(kāi)發(fā)者希望 WebAssembly 能夠兌現(xiàn) Java 最初做出的“一次編寫(xiě),到處運(yùn)行”的承諾。
語(yǔ)言
在開(kāi)發(fā)時(shí)利用 WebAssembly 的應(yīng)用時(shí)使用或嘗試過(guò)使用的語(yǔ)言統(tǒng)計(jì)如下:
Rust 連續(xù)第三年成為 WebAssembly 最常用的語(yǔ)言。Rust 一直非常適合 WebAssembly;它是一種廣泛流行的現(xiàn)代系統(tǒng)級(jí)語(yǔ)言(Stack Overflow 連續(xù)七年顯示它是最受歡迎的語(yǔ)言),它也恰好是一種用于編寫(xiě) WebAssembly 運(yùn)行時(shí)和平臺(tái)的流行語(yǔ)言。
JavaScript 是第二廣泛使用的編程語(yǔ)言。盡管無(wú)法直接將 JavaScript 編譯為 WebAssembly,但可以通過(guò)將 JavaScript 代碼運(yùn)行時(shí)編譯為 WebAssembly 來(lái)實(shí)現(xiàn)在 WebAssembly 中執(zhí)行 JavaScript 代碼的方式。在這種方法中,代碼將在 WebAssembly 托管的解釋器中運(yùn)行。盡管可能會(huì)犧牲一些性能,但出人意料地實(shí)用,并且越來(lái)越受歡迎。雖然可能無(wú)法從速度上獲得優(yōu)勢(shì),但確實(shí)可以受益于 WebAssembly 的安全性和隔離性。
下圖顯示了長(zhǎng)期趨勢(shì),將最近三次調(diào)查的結(jié)果進(jìn)行比較,列出了每種語(yǔ)言的使用百分比(經(jīng)常或偶爾使用),排除使用率低于10%的語(yǔ)言。
Rust 和 JavaScript 的使用率正在增加,但還有一些更顯著的變化:Swift 和 Zig 的采用率均顯著增加。
Swift 是 WebAssembly 生態(tài)系統(tǒng)中相對(duì)較新的成員,始于幾年前對(duì) Apple Swift 存儲(chǔ)庫(kù)的拉取請(qǐng)求以添加 wasm 目標(biāo)。然而,盡管多年來(lái)進(jìn)行了多次提交,但該 PR 尚未合并。
雖然Swift和Rust都是相對(duì)較新的語(yǔ)言(分別于2014年和2015年誕生),但Zig則更為年輕,于2016年出現(xiàn),比WebAssembly(WebAssembly于2017年發(fā)布了第一個(gè)MVP版本)早一年。
今年,我們?cè)谡{(diào)查中添加了一個(gè)新問(wèn)題,旨在了解與 WebAssembly 相關(guān)的專業(yè)關(guān)系。我們的目標(biāo)是將積極開(kāi)發(fā) WebAssembly 工具或平臺(tái)的人員與最終用戶的響應(yīng)分開(kāi)。通過(guò)將這兩組分離,可以看到以下語(yǔ)言的偏好情況:
正如預(yù)期的那樣,工具開(kāi)發(fā)人員對(duì) Rust 有著強(qiáng)烈的偏好,并且也喜歡直接使用 WAT(WebAssembly 文本格式)對(duì) WebAssembly 進(jìn)行編程。開(kāi)發(fā)者對(duì) Go 和 Python 也有強(qiáng)烈的偏好。
對(duì)于問(wèn)題“未來(lái)想使用哪些語(yǔ)言來(lái)開(kāi)發(fā)利用WebAssembly的應(yīng)用”,統(tǒng)計(jì)結(jié)果如下:
Rust 再次名列前茅,反映了年度 Stack Overflow 調(diào)查的結(jié)果,其次是JavaScript。然而,使用頻率較低的 Zig 是第三個(gè)最受歡迎的語(yǔ)言。
通過(guò)繪制每種語(yǔ)言的差異,即“經(jīng)常使用”的回答數(shù)量和“希望大量使用”的回答數(shù)量之間的差距,可以看出在受歡迎程度與使用率之間有著最大差異的語(yǔ)言:
可以看到,Zig、Kotlin 和 C# 的受歡迎程度超過(guò)了當(dāng)前的使用率,C++、JavaScript 和 WAT 的當(dāng)前的使用率超過(guò)了受歡迎程度。
運(yùn)行時(shí)
考慮到WebAssembly在非瀏覽器環(huán)境下的使用正在增加,探索正在使用哪些運(yùn)行時(shí)或者僅僅是聽(tīng)說(shuō)過(guò)哪些運(yùn)行時(shí)很有意思。這次調(diào)查只問(wèn)了一個(gè)問(wèn)題:“你聽(tīng)說(shuō)過(guò)或使用過(guò)哪些運(yùn)行時(shí)?結(jié)果如下:
wasmtime,來(lái)自于字節(jié)碼聯(lián)盟(Bytecode Alliance),是最廣泛使用的運(yùn)行時(shí),而由一家初創(chuàng)公司開(kāi)發(fā)的 wasmer 排名第二。Wazero 是一個(gè)新成員,它是一個(gè)基于 Go 語(yǔ)言構(gòu)建的最近發(fā)布的運(yùn)行時(shí)。
實(shí)際應(yīng)用
使用 WebAssembly 的目的如下:
Web 應(yīng)用開(kāi)發(fā)仍然處于領(lǐng)先地位,但差距正在縮小。下圖顯示了同比趨勢(shì):
Serverless 正在持續(xù)增長(zhǎng),但可能最引人注目的轉(zhuǎn)變是WebAssembly作為插件環(huán)境的使用。以下是一些實(shí)際應(yīng)用的例子:
- Zellij是一個(gè)面向開(kāi)發(fā)者的終端工作空間,它采用了WebAssembly插件模型。
- Microsoft Flight Simulator 允許將附加組件編寫(xiě)為 wasm 模塊。
- Envoy 和 Istio 有一個(gè) Wasm Plugin API。
- Lapce,一個(gè)用 Rust 編寫(xiě)的新 IDE,有一個(gè)基于 WASI 的插件系統(tǒng)。
在每種情況下,平臺(tái)(終端、編輯器、代理)都從允許最終用戶使用多種編程語(yǔ)言擴(kuò)展功能的能力中受益,并且這些功能在一個(gè)安全而隔離的環(huán)境中運(yùn)行。換句話說(shuō),如果有人編寫(xiě)了一個(gè)行為不端或性能較差的插件,對(duì)平臺(tái)本身的影響將被最小化。
受訪者所在組織采用 WebAssembly 的狀況如下:
從上圖中可以看到,41% 的受訪者正在生產(chǎn)中使用 WebAssembly,還有 28% 的受訪者正在試點(diǎn)或計(jì)劃在明年使用它。
該調(diào)查還探討了 WebAssembly 需要什么來(lái)幫助推動(dòng)進(jìn)一步采用:
被最頻繁提及的需求是通過(guò) WASI(WebAssembly系統(tǒng)接口)來(lái)改善非瀏覽器集成。WebAssembly 規(guī)范并未定義任何主機(jī)集成點(diǎn),無(wú)論是如何訪問(wèn) DOM 還是與主機(jī)運(yùn)行時(shí)交換數(shù)據(jù)(例如在瀏覽器中將值傳遞給 JavaScript)。WASI正填補(bǔ)這一空白,但目前還沒(méi)有完整的解決方案。
更好的調(diào)試支持緊隨其后,隨著人們使用 WebAssembly 開(kāi)發(fā)越來(lái)越復(fù)雜的解決方案,這一點(diǎn)將變得更加重要。
特性
WebAssembly(由W3C管理)和WASI(由W3C WebAssembly社區(qū)組的子機(jī)構(gòu)管理)都在不斷發(fā)展,有一系列新功能遵循標(biāo)準(zhǔn)的5階段提案過(guò)程。
關(guān)于 WebAssembly 提案,以下是最需要的:
線程、垃圾收集和異常處理在去年的結(jié)果中均名列前茅,并且這三者都處于提案生命周期的實(shí)施(第 3 階段)或標(biāo)準(zhǔn)化(第 4 階段)。這意味著它們已準(zhǔn)備好使用,并且接近完成。
組件模型是一個(gè)處于早期階段的提案(第 1 階段),其目標(biāo)是使在運(yùn)行時(shí)以任何語(yǔ)言編寫(xiě)的 wasm 模塊變得更加容易。
關(guān)于 WASI 提案,以下是最需要的:
四個(gè)最重要的提案都與 I/O 相關(guān),可見(jiàn),創(chuàng)建 WebAssembly 模塊與外界通信的標(biāo)準(zhǔn)方式是當(dāng)務(wù)之急。
受訪者對(duì) WebAssembly 和 WASI 的發(fā)展的滿意度如下:
有很多人對(duì)這個(gè)情況表示不滿意,這一點(diǎn)并不令人意外,以開(kāi)放透明的方式演化的規(guī)范,涉及很多利益相關(guān)者,并不容易,并且需要時(shí)間。
不過(guò),這個(gè)結(jié)果不應(yīng)被用作直接批評(píng) WASI 和 WebAssembly 團(tuán)隊(duì)所做出的出色努力。人們對(duì) WASI 演進(jìn)的不滿可能只是對(duì)這項(xiàng)技術(shù)熱情的反映,這并不是一件壞事。
小結(jié)
最后,來(lái)總結(jié)一下受訪者對(duì) WebAssembly 最興奮的點(diǎn):
- 可移植性和在不同平臺(tái)上運(yùn)行代碼的能力。
- 不同語(yǔ)言和Web之間的互操作性。
- 本地性能和效率。
- 訪問(wèn)現(xiàn)有代碼和庫(kù)的能力。
- 新語(yǔ)言和工具的潛力。
- 安全性和沙箱功能。
- 替代容器并在瀏覽器中運(yùn)行復(fù)雜堆棧的能力。
- 通用二進(jìn)制格式的潛力。
- 編寫(xiě)一次,在任何地方運(yùn)行的機(jī)會(huì)。
- 提高性能和速度。
- 組件模型和代碼重用的能力。
- 減少或消除對(duì)JavaScript的依賴。
- 在語(yǔ)言選擇上更靈活、多樣化的選擇。
- 插件系統(tǒng)的潛力。
- 在瀏覽器中運(yùn)行復(fù)雜應(yīng)用程序的潛力。