整理 | 太冷不穿格子衫
出品 | 51CTO技術棧(微信號:blog51cto)
早在 2017 年,主流瀏覽器都已經支持 WebAssembly。隨著 WebAssembly 的蓬勃發展,各種編程語言也在增加對它的支持。2021 年,WebAssembly 開源項目開始支持 WasmGC(垃圾回收),為實現 WebAssembly 支持像 JAVA、Kotlin 這樣的前端語言做準備。同年,Kotlin 程序語言開發團隊更新了發展路線,其中的一個重點就是增加 WebAssembly 支持。
近日,谷歌在Chrome中啟用了WebAssembly的垃圾回收功能,這一舉動很可能成為一個風向標,引領更多 Web 開發人員使用WasmGC。
WasmGC 到底有多厲害?能讓連續 11 年被評為最流行開發語言的 JavaScript “地位不保”?WebAssembly 允許開發人員使用 JavaScript 以外的高性能編程語言來開發 Web 應用程序。Wasm 中的垃圾回收功能更是“錦上添花”,可以讓虛擬機自動管理內存,一定程度上減輕了開發人員的負擔,讓他們更加專注于 Web 應用程序核心功能的開發。
軟件開發人員Eloff在X上發帖稱:“WebAssembly GC意義非凡,可以脫離 Web 端,在搭載了不同硬件和操作系統的各個平臺運行,真正實現了“一次編譯,多處運行”。
1、WasmGC 到底有多厲害
將語言移植到新的體系結構通常需要重新編譯 VM,作為一項新技術,WasmGC 允許開發人員定義結構體和數組類型并執行操作,例如創建它們的實例、讀取和寫入字段、在類型之間進行轉換等。
這些對象由 Wasm VM 自己的 GC 實現來管理,這是該方法與傳統移植方法之間的主要區別。如果傳統的移植方法是將一種語言移植到一種架構,那么 WasmGC 方法與如何將一種語言移植到一個虛擬機非常相似。例如,如果你想將 Java 移植到 JavaScript,那么可以使用像 J2CL 這樣的編譯器,它將 Java 對象表示為 JavaScript 對象,然后這些 JavaScript 對象就像所有其他對象一樣由 JavaScript VM 管理。
WasmGC 比傳統的 WasmMVP 移植優先級更高,并能夠與目標 VM 進行更緊密的集成。WasmGC 與之前編譯為線性內存的方法 (WasmMVP) 相比,可以實現更好的優化:
- 在編譯時和運行時進行優化,例如間接調用的推測內聯。性能測量結果表明,推測性內聯可使編譯后的 Java 代碼顯著提速 30%。
- WasmGC 比 WasmMVP 更可優化,因為它在更高級別上運行,跟蹤對象引用。
- 雖然 WasmGC 可能需要在某些語言的語義上做出妥協,但它可以提供更小的代碼大小和更好的性能等好處。
2、JavaScript“地位不保”
在 WebAssembly 出現之前,JavaScript 是少數可用于開發 Web 應用程序的編程語言之一,擁有超過63%的用戶,它是現代 Web 開發的基礎,提供了易用性、廣泛的支持以及與瀏覽器 DOM 的無縫集成。但它并非那么完美,尤其在應對復雜程序的開發時,會顯得有點“力不從心”。
HackerNews 上的一位用戶表示:“JavaScript 似乎不再是唯一的’寵兒‘了。”
這種說法不無道理。畢竟在 Web 開發過程中,無論是性能還是速度,WasmGC 都明顯略勝一籌。
首先,與 JavaScript 相比,Wasm 由 C 和 C++等語言編譯而來,使得它的執行速度更快;其次,WebAssembly 對于各種平臺有很強的適應性,確保了它的可移植性;此外,WebAssembly 中的沙盒環境通過將其與其他瀏覽器組件隔離來提高安全性,彌補了 JavaScript 有潛在安全隱患的短板。
WebAssembly 的垃圾回收功能是在 2017 年提出的。然而,大部分工作是在過去三年完成的。隨著越來越多的用戶使用 WebAssembly ,Chrome、Edge 和 Firefox 都將 WebAssembly 作為默認選項。
與 JavaScript 不同,Wasm 代碼可以針對各種硬件架構進行編譯,從而確保了跨不同設備和平臺的可移植性。此外,它支持多種編程語言,允許它們之間進行無縫交互。
Wasm 主要在沙盒環境中執行,這樣就與主瀏覽器線程隔離開來,通過限制對系統資源的未經授權的訪問來提高安全性。這是兩種語言之間的主要區別。而且大多數網絡攻擊都發生在瀏覽器上,Wasm 也更具安全優勢。Wasm 代碼還通過不可讀的隱蔽性提高了安全性,這使得攻擊者更難以對代碼進行逆向工程,從而更難以發現和利用漏洞。
JupiterOne首席信息安全官Sounil Yu表示:“Wasm的指令集有限,而且有更好的內存管理,這有助于減少漏洞,比如緩沖區溢出。”
2022 年的調查表明,67% 的受訪者經常使用 WebAssembly,相比 2021 年的 47% 有了大幅提升。如今,WebAssembly 主要用于構建流量最大的站點,WasmGC 的出現無疑會推動WebAssembly 的普及和發展。
參考鏈接:
https://analyticsindiamag.com/how-wasmgc-will-change-the-developer-experience/
https://zhuanlan.zhihu.com/p/606835492
https://zhuanlan.zhihu.com/p/665119591