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