編程語言WebAssembly發展的三大支柱
譯文【51CTO.com快譯】圍繞WebAssembly的軟件行業正大行其道。這項技術通常名為WASM,正在改變我們的代碼在Web瀏覽器、邊緣云和物聯網設備等環境中的執行方式。
本文主要介紹什么讓WASM顯得很特殊、為什么您應該關心它,以及為什么我認為它會在未來幾年驅動新一代軟件。我將列出WebAssembly的三大支柱——安全性、可移植性和性能,并概述為什么這三大支柱使WASM成為一股不可忽視的力量。
安全性
不妨從安全性開始說起。如今,安全性是許多人的頭等大事,供應鏈問題、加密貨幣劫持和數據泄露的報道屢見不鮮。WebAssembly從許多方面加強安全,從安全沙箱開始入手。
執行WASM后,代碼無法訪問任何內容,包括網絡、文件系統或沙箱外面的其他任何內容。這被稱為默認拒絕安全模式,它不是由Docker等容器技術實現的。針對WASM沙箱內運行、與外界進行交互的代碼,必須明確授予它對主機功能的訪問權限。
Web瀏覽器可以授予WASM模塊某些功能,比如獲取API和訪問DOM。云環境等其他主機可以使用WASI(WebAssembly系統接口)授予模塊對文件系統、隨機性(如 /dev/urandom)和系統時間等常見對象的訪問權限。這一切確保了WASM模塊內的代碼只可以訪問其運行所需要的資源,別的資源訪問不了。
為了應對猖獗的供應鏈攻擊,還有組織竭力使WebAssembly模塊的加密簽名成為該規范的標準部分。能夠使用受信任的密鑰對模塊進行簽名,并在系統嘗試運行該模塊時驗證該簽名,這將是一大勝利,并有助于在使用WebAssembly構建應用程序時夯實“縱深防御”這種理念。
軟件供應商開始將其API庫作為WASM模塊來分發時,這將變得尤為重要;我們將能夠充分利用跨語言模塊鏈接(指由不同語言構建的模塊能夠共享內存和函數),同時還可以驗證模塊是由供應商開發的、并且未經篡改。
可移植性
鏈接模塊這個想法引出了第二個支柱:可移植性。我喜歡從兩個方面來思考WASM的可移植性:語言可移植性和平臺可移植性。語言可移植性是用一種語言(比如Rust)編寫的模塊在用另一種語言(比如Go)編寫的系統中運行的能力。由于WASM運行時環境可以嵌入到其他軟件中,它們可用于引入專門的組件,而這些組件原本是您團隊使用的主要語言不可能實現的。這個概念還可以應用于通過將用不同語言編寫的多個WASM模塊組合起來以形成單個軟件而構建的應用程序,比如Atmo 框架。
在平臺可移植性方面,WebAssembly不依賴任何硬件架構,因此它可以在多個不同平臺上執行,無需重新編譯。比如說,這將讓您可以生成單個WASM文件,在物聯網設備和云虛擬機上都可以運行。WASM模塊被執行時,它就被提前(AOT)或即時(JIT)編譯成機器原生代碼。
WASM運行時環境(比如Chrome的V8、Wasmtime或Wasmer)自動執行該編譯,這使得運行任何模塊都非常簡單。比如說,這在以下場景中變得很有用:當流量高峰導致某個模塊面臨大量的入站請求時,您的代碼自動從中央云實例移動到邊緣計算網絡。
性能
最后一個支柱是性能。WebAssembly旨在以原生或接近原生的速度執行代碼。有眾多因素影響任何應用程序的性能,包括語言、硬件、垃圾收集和虛擬化等。
使用WebAssembly,只需在運行時針對每個平臺優化自己,就可以以高性能的方式輕松執行代碼。我們仍處于WebAssembly的早期階段,但它的性能已經可以與經過多年優化的V8 JavaScript引擎相媲美。所有可編譯成WebAssembly的語言都將受益于將來為WASM運行時環境帶來的任何性能改進,這對所有人來說都是一大利好。
我邀請您思考您在構建軟件時,問問自己開發平臺的哪些方面對您最重要。我敢打賭,本文討論的三個支柱中至少有兩個是貴公司的關鍵因素,您可以通過采用WebAssembly這種技術,改進代碼的關鍵屬性。但愿WASM會成為支持軟件工作流程的底層技術,開發人員根本不需要操心它,就像今天大多數開發人員并不操心所用語言的編譯器生成的匯編代碼一樣。
主要區別在于,WebAssembly一開始就內置了這些出色的屬性,確保您的代碼在默認情況下是安全的、可移植的和高性能的,而今天的軟件工具做不到這點。
原文標題:The Three Pillars of WebAssembly,作者:Connor Hicks
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】
























