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