干翻 Docker?WebAssembly 3.0 的野心,遠不止瀏覽器,來一起看看吧

Image

今天中午去飯堂吃飯的路上,我照例刷著技術圈的新聞,手指滑著滑著突然就停住了。一條消息炸了出來:“Wasm 3.0 標準發布”。

Image

发布日期:2025年9月17日。

我心裡默念了一下,得,又是一個足以讓無數程式設計師未來幾年為之折騰的技術。

可能很多兄弟對 Wasm (WebAssembly) 的印象還停留在“一個能在瀏覽器裡跑 C++/Rust 代碼,讓網頁遊戲性能起飛”的階段。沒錯,這是它最初的起點,一個為了突破 JavaScript 性能瓶頸而生的“瀏覽器插件”。

但如果你今天還這麼想,那格局就小了。

Wasm 的核心價值是什麼?我琢磨了很久,它其實是在實現一個數十年來所有程式設計師的終極夢想:一種真正與語言無關、與平台無關、高性能、高安全性的二進制格式。

說人話就是:我用 Java、Go、Rust、Python、C# 寫的代碼,都能編譯成一種叫 .wasm 的文件,然後這個文件,你別管是在 Windows、Linux、Mac 上,還是在瀏覽器、伺服器、IoT 設備上,甚至在區塊鏈裡,都能跑。而且跑得飛快,還特別安全,每個 Wasm 程式都活在自己的“沙箱”裡,翻不出天去。

是不是聽著有點耳熟?Java 當年的口號“Write once, run anywhere”?對,就是那個味兒。但 Wasm 野心更大,它想在比 JVM 更底層的地方實現這一切。

而這次的 Wasm 3.0,在我看來,就是它正式“出圈”,從一個“瀏覽器配角”走向“全場景主角”的成人禮。

我們來看看這次它端出來的幾盤“硬菜”。

第一盤硬菜:64位尋址 + 多內存,徹底告別“小打小鬧”

以前的 Wasm,用的是 32 位地址,最多只能用 4GB 內存。

這是什麼概念?你寫個前端應用,做個圖片處理,夠用。但你想在伺服器上跑個大數據分析,或者搞個機器學習模型訓練?4GB 內存?開玩笑呢。

這就是為什麼之前 Wasm 在後端一直雷聲大雨點小,大家覺得它是個“玩具”。

現在,Wasm 3.0 直接給你幹到 64 位。理論上是 16EB 的尋址空間,雖然現實中會被限制(比如瀏覽器裡給了 16GB),但這個姿態已經很明確了:我,Wasm,不再是只能在瀏覽器裡過家家的小朋友了,伺服器端的活兒,我能接。

還有那個“多內存”,也很有意思。以前一個 Wasm 模塊只能操作一塊內存,像住在一個單間裡。現在一個模塊可以同時操作好幾塊獨立的內存。這操作空間就大了去了,比如我可以把敏感數據放在一塊隔離的內存裡,增加安全性;或者用一塊內存做緩衝區,另一塊做主邏輯,互不干擾。這為編寫更複雜、更安全的系統打開了想像力。

第二盤硬菜,也是最狠的:原生 GC(垃圾回收)

這玩意兒,我跟你講,是劃時代的。

之前為啥跑 Go、Java、Kotlin、C# 這些語言到 Wasm 上那麼費勁?因為這些語言都是自帶 GC 的。你把它們編譯到 Wasm,要麼就連著龐大的語言運行時一起打包,要麼就得自己用 C/Rust 在 Wasm 裡模擬一套 GC,那性能和複雜度簡直是災難。

Wasm 3.0 說:“得了,都別瞎折騰了。內存管理這件髒活累活,我來提供基礎服務。”

它提供了一套底層的、語言無關的 GC 機制。編譯器們(比如 Java 編譯器、Go 編譯器)只需要告訴 Wasm 運行時:“嘿,我需要一塊結構是這樣的內存,你幫我管著”,Wasm 就會自動在合適的時候回收它。

這意味著什麼?

意味著所有自帶 GC 的高級語言,現在都有了一條通往 Wasm 的康莊大道。 未來我們看到用 Java、Scala、Dart 寫的應用被編譯成 Wasm 包,然後扔到伺服器、邊緣節點甚至瀏覽器裡去跑,會成為家常便飯。

這扇門一旦打開,整個軟體生態可能都要抖三抖。


等會兒,聊到這兒,我得停一下。

作為一個寫了十幾年代碼的老家伙,我見過太多“銀彈”了。每次有新技術出來,都有一堆人鼓吹“XXX 已死”、“XXX 是未來”。

說實話,我有點 PTSD。

Wasm 3.0 這次端出來的菜,確實香。原生異常處理、尾調用優化……這些都讓它越來越像一個“真正的”虛擬平台。

但是,它真的能“干翻 Docker”嗎?

Docker 的核心是提供了一個包含完整操作系統環境的隔離容器。你在裡面可以用 apt-get,可以訪問文件系統,可以起各種進程。它重,但它全。

Wasm 的哲學完全不同。它是一個輕量級的、安全的沙箱,不提供操作系統級別的抽象。它預設不能訪問文件、不能訪問網路。所有這些能力,都需要宿主環境(比如瀏覽器、或者一個叫 Wasmtime 的運行時)明確地授權給它。

這既是優點也是缺點。

優點是:

  1. 快。 Wasm 的啟動速度是毫秒級,甚至微秒級。Docker 容器啟動是秒級。這個差距在 Serverless(函數計算)這種場景下是致命的。
  2. 小。 一個 Wasm 文件可能就幾 MB,一個 Docker 映像動輒幾百 MB。
  3. 安全。 Wasm 的沙箱模型預設啥也幹不了,權限是“最小可用”,天然就比共享內核的容器要更安全。

這些特性讓它在邊緣計算、Serverless、插件系統、小程序等領域,簡直就是天選之子。想像一下,你可以在 Nginx 裡插一個 Wasm 插件來處理請求,或者在資料庫裡用 Wasm 來執行用戶自定義函數,又或者未來的雲函數,全都是一個個 Wasm 實例。這比啟動一個笨重的 Docker 容器優雅太多了。

但缺點也很明顯:
生態。生態。還是TM的生態。
一個技術標準再牛逼,沒有配套的工具鏈、除錯器、日誌庫、監控方案,那都是空中樓閣。我們這些幹活兒的人,不是搞科研的,我們關心的是出了問題怎麼快速定位,怎麼方便地跟現有系統整合。

Docker 和 K8s 經營了這麼多年,已經是一整套成熟的工業體系了。Wasm 呢?還在爬坡。


所以,Wasm 3.0 來了,前端會死嗎?

不會。別瞎想了。JavaScript 作為“膠水語言”和與 DOM 互動的“總管”地位,短期內無可撼動。 Wasm 更像是 JS 身邊那個沉默寡言、武功高強的保鑣,髒活累活(視頻編碼、3D 渲染、複雜計算)都歸他,JS 負責統籌調度。未來的前端,更像是“JS + Wasm”的混合模式。

那後端呢?Docker 會被干翻嗎?

我傾向於說,不會被“干翻”,而是“互補”和“侵蝕”。 對於需要完整操作系統環境的傳統應用,Docker 和 K8s 依然是王道。但對於那些對啟動速度、資源佔用、安全性要求極高的新場景,Wasm 絕對是一把鋒利的匕首,會狠狠地從雲原生的版圖上,切下一大塊屬於自己的蛋糕。

說到底,技術圈沒有非黑即白。

Wasm 3.0 的發布,不是一聲革命的槍響,更像是新大陸被發現後,緩緩駛入港口的第一艘探險船。船上滿載著可能性,也充滿了未知。

對我等在一線搬磚的工程師來說,現在可能不是需要立刻 all in 的時候,但絕對是需要你抬起頭,認真看一看航向的時候了。

可以開始玩玩了。搞個 Rust,編譯個 Wasm,在 Wasmtime 裡跑跑看。感受一下那種原生性能和跨平台的能力。

至於未來到底會怎樣?鬼知道呢。也許幾年後,我們簡歷上的技能栈,都要加上“精通 Wasm 架構設計”了呢。


原文出處:https://juejin.cn/post/7550969725860315136


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝9   💬9   ❤️2
383
🥈
我愛JS
📝3   💬7   ❤️8
162
🥉
AppleLily
📝1   💬4   ❤️1
60
#4
💬1  
5
#5
xxuan
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次