Chrome 支持運(yùn)行 Kotlin、Java 等 GC 編程語(yǔ)言,你知道了嗎?
谷歌 Chrome 開(kāi)發(fā)者博客官宣:Chrome 已默認(rèn)啟用 WebAssembly 垃圾回收 (WasmGC) 功能 —— 能夠?qū)⒕哂?GC 的編程語(yǔ)言編譯為 WebAssembly (Wasm)。
下面是示例代碼
- Kotlin Wasm
import kotlinx.browser.document
import kotlinx.dom.appendText
import org.w3c.dom.HTMLDivElement
fun main() {
(document.getElementById("warning") as HTMLDivElement).style.display = "none"
document.body?.appendText("Hello, ${greet()}!")
}
fun greet() = "world"
據(jù)介紹,WasmGC 是 WebAssembly 社區(qū)群組發(fā)布的一項(xiàng)提案。當(dāng)前的 Wasm 最小可行化實(shí)現(xiàn)只能處理線性內(nèi)存中的 number 類型數(shù)據(jù),即整數(shù)和浮點(diǎn)數(shù)。隨著引用類型 (reference types) 提案的發(fā)布,Wasm 還可以保留外部引用。
WasmGC 現(xiàn)在添加了結(jié)構(gòu)體和數(shù)組堆類型,因此支持非線性內(nèi)存分配。每個(gè) WasmGC 對(duì)象都有固定的類型和結(jié)構(gòu),這使得虛擬機(jī)可以輕松生成有效的代碼來(lái)訪問(wèn)其字段,而不會(huì)像 JavaScript 等動(dòng)態(tài)語(yǔ)言那樣存在去優(yōu)化的風(fēng)險(xiǎn)。
因此,該提案通過(guò)結(jié)構(gòu)和數(shù)組堆類型為 WebAssembly 增加了對(duì)高級(jí)托管語(yǔ)言的有效支持,使得針對(duì) Wasm 的語(yǔ)言編譯器能夠與主機(jī) VM 中的垃圾回收器集成。簡(jiǎn)單來(lái)說(shuō),通過(guò) WasmGC,將編程語(yǔ)言移植到 Wasm 意味著編程語(yǔ)言的垃圾回收器不再需要成為移植的一部分,而是可以直接使用現(xiàn)有的垃圾回收器。