看來網頁環境現在是系統程式語言的兵家必爭之地,除了Mozilla積極改進Rust,增加與WebAssembly和Javascript的互通性外,新興系統語言Go也鴨子划水,即將在GO 1.11的編譯器中,開發者能直接把程式編譯成WebAssembly,讓位元組碼可以在瀏覽器或是Node.js等非Web環境執行,Go社群直言,這個動作的目的就是要讓Go取代Javascript。

Go社群在今年2月的時候釋出,在Go編譯器中加入WebAssembly架構的設計文件以及程式碼專案,Go官方認為,讓Go成為JavaScript的替代品,作為一種Web應用程式的開發語言,將對軟體工程生態系有積極的影響。

官方文件提到了一些Go語言與WebAssembly的差異,以及可能的處理方式。與Javascript相反,WebAssembly完全支援64位元整數,但目前只能用32位元整數尋址,因此使用的記憶體容量被限制在4GB,不過在Go的WebAssembly架構中支援64位元指標,因此計畫在容許的條件下,可轉換成64位元運算。

與多數的暫存器機架構不同,WebAssembly屬於堆疊機器,會維護自己的堆疊,每個函數也都可以有任意數量的區域變數,官方表示,完全使用WebAssembly的堆疊,並非Go現在的選擇,Go需要可以檢查堆疊做垃圾回收還有追蹤堆疊等工作。

Go的WebAssembly架構完全支援垃圾回收功能,而WebAssembly也正著手進行增加自己的垃圾回收功能,但文件提到,很難想像能比專門為Go量身訂製的垃圾回收有更好的效能。

官方表示,他們的開發方向會支援所有Go的規格,並且盡量保留開發者喜歡的Go重要功能,目前還有不少提升性能的工作要進行,特別是Go語言中的goto 語法在WebAssembly會特別有用,現在專案的進度已經可以讓有興趣的人開始嘗試。

另外,WebAssembly除了可以被設計成能在Web環境中執行外,在非Web環境像是Node.js這種JavaScript VM也沒問題,同時也能在小型殼層測試或是被使用在完整的應用程式。關於這方面的設計,官方表示有很多還需要考量,畢竟不同環境需要的功能不同,在非Web環境會需要與Web環境不同的API,但在Web與非Web使用情境大量重疊的狀況,將會對此提出共同規範。


Advertisement

更多 iThome相關內容