[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-webassembly-turns-native-code-into-web-modules-zh":3,"article-related-webassembly-turns-native-code-into-web-modules-zh":35,"series-tools-31b9c458-eab8-44fa-b154-502ea8343f10":86},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":18,"translated_content":10,"views":19,"is_premium":20,"created_at":21,"updated_at":21,"cover_image":11,"published_at":22,"rewrite_status":23,"rewrite_error":10,"rewritten_from_id":24,"slug":25,"category":26,"related_article_id":27,"status":28,"google_indexed_at":10,"x_posted_at":10,"tweet_text":10,"title_rewritten_at":10,"title_original":10,"key_takeaways":29,"topic_cluster_id":33,"embedding":34,"is_canonical_seed":20},"31b9c458-eab8-44fa-b154-502ea8343f10","WebAssembly 讓原生碼變模組","\u003Cp data-speakable=\"summary\">我把 WebAssembly 拆成可落地的使用框架，\u003Ca href=\"\u002Fnews\u002Fbree-hall-returns-indiana-fever-player-development-zh\">最後\u003C\u002Fa>附一份可直接複製的採用模板。\u003C\u002Fp>\u003Cp>我用 WebAssembly 一陣子了，老實說，一開始我也被那套話術帶歪：把原生碼丟進瀏覽器，速度就會飛起來。結果呢？工具鏈一堆洞、除錯像在考古、host \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> 又一層一層卡住。你以為自己在做效能優化，實際上常常是在跟邊界條件搏鬥。最煩的是，大家嘴上都說「只要編成 Wasm 就行」，但真正上手後，才發現你得先回答一堆很現實的問題：誰來載入、誰來管記憶體、誰來暴露能力、誰來負責安全。這東西不是魔法，頂多是個很有用、但很挑場合的模組格式。\u003C\u002Fp>\u003Cp>我這篇是看了 \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly\">WebAssembly\u003C\u002Fa> 的條目後，重新把它拆成工程師能用的版本。那篇文章很乾，乾到像規格文件摘要，但它把骨架講得很清楚：二進位格式、文字格式、host interface、browser 與 non-browser runtime、編譯路徑，還有一堆限制。這些細節才是\u003Ca href=\"\u002Fnews\u002F5-indiana-fever-updates-zh\">重點\u003C\u002Fa>，不是行銷詞。\u003C\u002Fp>\u003Ch2>WebAssembly 不是「更快的 JavaScript」\u003C\u002Fh2>\u003Cblockquote>“WebAssembly (Wasm) defines a portable binary code format and a corresponding text format for executable programs and software interfaces for facilitating communication between such programs and their host environment.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：Wasm 是一種模組格式，外加一個跟 host 溝通的契約。它不是框架，不是 UI 層，也不是瀏覽器替代品。它比較像「把編譯後的程式，放進一個受控的執行邊界裡」。重點在 host environment。Wasm 不會自己長出 DOM、檔案系統或網路權限，它只能拿到 host 願意給的能力。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167068634-g7cy.png\" alt=\"WebAssembly 讓原生碼變模組\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我第一次把 Wasm 當成小型 app 來用時，就踩到這個坑。模組能編、能載入，然後一碰到 DOM 就卡死。不是 Wasm 壞掉，是我想太多。瀏覽器還是瀏覽器，Wasm 只是裡面一個很守規矩的客人。\u003C\u002Fp>\u003Cp>文章也提到兩種格式：\u003Ccode>.wasm\u003C\u002Fcode> 是二進位，\u003Ccode>.wat\u003C\u002Fcode> 是文字格式。這個差異平常很容易被忽略，但你一旦開始 debug，就會很在意。二進位是部署用，文字格式是給人看的。你不會拿 minified JS 當除錯主力，Wasm 也一樣。\u003C\u002Fp>\u003Cp>實操寫法很簡單：每次要不要用 Wasm，我都先把邊界寫清楚：\u003C\u002Fp>\u003Cul>\u003Cli>哪些程式碼要編進 Wasm？\u003C\u002Fli>\u003Cli>是誰在載入這個模組？\u003C\u002Fli>\u003Cli>資料怎麼跨邊界？\u003C\u002Fli>\u003Cli>哪些 API 留在 host 外面？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這四題答不出來，你不是在設計 Wasm，你只是在收集名詞。\u003C\u002Fp>\u003Ch2>瀏覽器能跑，不代表只適合瀏覽器\u003C\u002Fh2>\u003Cp>WebAssembly 最早是為了網頁高效能應用，但文章也明講了，它是給 non-web 環境一起用的。這句話很重要，因為很多人還卡在「Wasm = 瀏覽器技巧」的舊腦袋。現在真正有意思的地方，常常在 browser 外面。\u003C\u002Fp>\u003Cp>它的時間線也很能說明問題：2015 年宣布、2017 年 3 月首次釋出、2019 年 12 月成為 W3C recommendation、2021 年拿到 ACM SIGPLAN Programming Languages Software Award。這不是什麼神蹟，就是一群人把規格磨到夠穩，穩到大家敢拿來賭產品。\u003C\u002Fp>\u003Cp>文章還提到，到 2024 年 3 月，追蹤到的瀏覽器有 99% 支援 WebAssembly 1.0。這種數字很現實：它把問題從「能不能用」推進到「到底該放在哪裡用」。\u003C\u002Fp>\u003Cp>我看過不少團隊把 Wasm 當成瀏覽器專用玩具，結果錯過很多場景。像 plugin 系統、sandbox 執行、edge compute、host process 裡跑語言 runtime，這些地方常常比前端頁面更需要 Wasm。因為你要的是受控執行，不是 UI 魔法。\u003C\u002Fp>\u003Cp>實操寫法：先選 runtime，再選 compiler。文章列的像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwasmer.io\u002F\">Wasmer\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWasmEdge\u002FWasmEdge\">WasmEdge\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ftetratelabs\u002Fwazero\">wazero\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasm-micro-runtime\">WAMR\u003C\u002Fa>，每個都代表不同部署路線。別反過來，先編再說，最後才發現 host 根本不對。\u003C\u002Fp>\u003Ch2>Wasm 的價值是可攜，但它靠限制換來\u003C\u002Fh2>\u003Cp>文章有一句我覺得很實在：WebAssembly 想支援任何作業系統上的任何語言，很多主流語言也已經有某種程度的支援。這句話不是在吹「一次編譯，到處執行」那種空話，而是在講一個更務實的事：如果你的語言能 target Wasm，你就能把核心邏輯搬到不同 host，而不用整個重寫。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167065426-z6lz.png\" alt=\"WebAssembly 讓原生碼變模組\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這也是 Wasm 常被拿去做 sandbox、plugin、跨環境 compute 的原因。它給你一個小而明確的執行目標，然後把互動方式收斂起來。這很煩，但也正因為煩，才有一致性。\u003C\u002Fp>\u003Cp>但代價也很明確：Wasm 能 portable，是因為它被限制住了。它是 stack-based execution model，不能亂摸底層硬體，不能假裝 host 不存在。你得到的是可預期的 runtime 形狀，失去的是自由亂搞的空間。\u003C\u002Fp>\u003Cp>我自己是接受這個交換的，但前提是團隊真的懂它在交換什麼。我看過太多人一聽到「跨平台」就眼睛發亮，然後在不能直接碰 DOM、不能隨便吃大記憶體、不能任意操作 host internals 的時候開始抱怨。那不是 Wasm 爛，是你一開始就把它當成另一種原生程式在期待。\u003C\u002Fp>\u003Cp>實操寫法：只有在下面這些情境，我才會把 Wasm 列進方案裡：\u003C\u002Fp>\u003Cul>\u003Cli>要跨 host 執行\u003C\u002Fli>\u003Cli>要多語言共用核心邏輯\u003C\u002Fli>\u003Cli>要 sandbox \u002F constrained execution\u003C\u002Fli>\u003Cli>要 plugin 式擴充\u003C\u002Fli>\u003Cli>要處理計算密集工作\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你要的是 UI、路由、直接呼叫 browser API，那還是先用 JavaScript 或 \u003Ca href=\"\u002Ftag\u002Ftypescript\">TypeScript\u003C\u002Fa>，別硬拗。\u003C\u002Fp>\u003Ch2>工具鏈才是決定成敗的那個爛地方\u003C\u002Fh2>\u003Cp>文章對編譯路徑講得很直接：Wasm 不是你「寫」出來的，是你 target 出來的。可能是 AOT，也可能是 JIT，可能有 interpreter，通常還得靠一整套 toolchain。這裡才是真正開始做工程，不是做夢。\u003C\u002Fp>\u003Cp>文章點名了幾條常見路線。\u003Ca href=\"https:\u002F\u002Femscripten.org\u002F\">Emscripten\u003C\u002Fa> 會用 Clang 和 Binaryen 把 C\u002FC++ 編成 Wasm；\u003Ca href=\"https:\u002F\u002Fclang.llvm.org\u002F\">Clang\u003C\u002Fa> 本身也能直接 target Wasm；LLVM 系的流程還能接 \u003Ca href=\"\u002Ftag\u002Frust\">Rust\u003C\u002Fa>、AssemblyScript。意思很簡單：你的 Wasm 體驗，幾乎完全被你現有的語言生態決定。\u003C\u002Fp>\u003Cp>這也解釋了為什麼 Wasm 的採用體感很不平均。runtime 也許標準化了，但 build path 沒那麼一致。某些語言已經很順，某些語言則是「能跑，但別問太多」。文章提到 2021 年大約有 40 種程式語言支援 Wasm 作為編譯目標，數量不少，但支援品質差很多。\u003C\u002Fp>\u003Cp>我自己最怕的就是這種情況：runtime 看起來漂亮，build pipeline 卻醜到不行。因為 build 不是一次性的，它每天都會跑。你如果把除錯、最佳化、產物大小、載入時間都丟給未來的自己，最後通常都是未來的自己在罵你。\u003C\u002Fp>\u003Cp>實操寫法：在正式採用前，我會先做完整 pipeline 試跑：\u003C\u002Fp>\u003Cul>\u003Cli>source language 到 Wasm 的 build 是否順\u003C\u002Fli>\u003Cli>最佳化後 module 多大\u003C\u002Fli>\u003Cli>在 target host 的 instantiate 時間\u003C\u002Fli>\u003Cli>debug 流程是否可用\u003C\u002Fli>\u003Cli>資料如何進出模組\u003C\u002Fli>\u003C\u002Ful>\u003Cp>只要其中一項很痛，我就先把痛點記下來，別假裝它不存在。\u003C\u002Fp>\u003Ch2>Wasm 最適合當 host 控制的 sandbox\u003C\u002Fh2>\u003Cp>文章的 implementation 章節其實已經把答案講出來了：WebAssembly runtime 是一個低階 virtual stack machine，可以嵌進任何 host application。這代表規則是 host 定的，模組只是在規則內跑。你如果要 plugin system、受控 extension point、或安全隔離的執行環境，這就是它真正有價值的地方。\u003C\u002Fp>\u003Cp>像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fproxy-wasm\u002Fspec\">Proxy-Wasm\u003C\u002Fa> 這類系統，就是把 Wasm 拿來當 host 管控的擴充邊界。host 只暴露剛剛好的能力，模組做自己該做的事，不會一上來就拿到整個流程的控制權。比起直接塞 native shared library，這種做法安全感高很多。\u003C\u002Fp>\u003Cp>我看過這個模式在需要客製邏輯的團隊裡很好用。你不想讓外部邏輯直接碰核心服務，但又要讓它有一定彈性，Wasm 就很適合。只是別天真，policy、metering、ABI 這些東西還是要做，不然 sandbox 只是漂亮口號。\u003C\u002Fp>\u003Cp>實操寫法：當你要做 plugin boundary 時，我會優先選 Wasm，前提是你要的是：\u003C\u002Fp>\u003Cul>\u003Cli>host 可控\u003C\u002Fli>\u003Cli>跨語言 plugin\u003C\u002Fli>\u003Cli>比 native plugin 更小的信任面\u003C\u002Fli>\u003Cli>跨環境可攜的執行方式\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果 plugin 需要\u003Ca href=\"\u002Fnews\u002Ffever-monique-billings-early-2026-impact-zh\">深度\u003C\u002Fa> OS 整合、直接玩檔案系統、或碰 host internals，別鬧了，Wasm 只會讓你更痛。\u003C\u002Fp>\u003Ch2>限制不是附註，是你上線前就要面對的現實\u003C\u002Fh2>\u003Cp>文章最有用的地方之一，就是它不幫 Wasm 亂吹。先講最基本的：在瀏覽器裡，Wasm 不能直接操作 DOM，得透過 JavaScript。這一條就足夠把一半不成熟的想像打回去。\u003C\u002Fp>\u003Cp>再來是 feature support 不等於 browser support。文章提到 multithreading 當時還在 draft 階段，其他 extension 的支援也不齊。記憶體限制更現實，文章甚至點出在行動瀏覽器上，大約 300MB 就可能開始危險，像 Chrome on Android 和 Safari on iOS 都得注意。這不是小細節，這是部署邊界。\u003C\u002Fp>\u003Cp>還有 CSP。文章說，如果沒有設定 Content-Security-Policy，或用了 \u003Ccode>unsafe-eval\u003C\u002Fcode>，瀏覽器通常允許 Wasm；但在其他政策下就不一定。Chrome 要 \u003Ccode>unsafe-eval\u003C\u002Fcode> 這種事，真的很容易把 demo 變成 production 災難。我看過團隊以為 module 到哪都能載，結果被 CSP 打臉，問題根本不是 Wasm 本身，而是你沒先把政策看清楚。\u003C\u002Fp>\u003Cp>實操寫法：上碼前先列出這張清單：\u003C\u002Fp>\u003Cul>\u003Cli>browser policy 是什麼？\u003C\u002Fli>\u003Cli>module 需要多少記憶體？\u003C\u002Fli>\u003Cli>需不需要 threads？\u003C\u002Fli>\u003Cli>需不需要 browser APIs 或 JS glue？\u003C\u002Fli>\u003Cli>不同 client 的 feature support 會不會不一致？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果答案是「先做再說」，那你只是把除錯延後到 production。\u003C\u002Fp>\u003Ch2>WASI 和新規格，才是 Wasm 往外長的地方\u003C\u002Fh2>\u003Cp>文章提到 \u003Ca href=\"https:\u002F\u002Fwasi.dev\u002F\">WASI\u003C\u002Fa>，也就是 WebAssembly System Interface。這是 Wasm 從「瀏覽器二進位格式」往「可攜應用 runtime」走的橋。對我來說，這才是 Wasm 真正值得關注的方向之一，因為它開始碰系統能力，而不是只在網頁裡打轉。\u003C\u002Fp>\u003Cp>文章也整理了後續規格：WebAssembly 2.0 加了 SIMD、multiple return values、mass memory init\u002Fcopy、reference types；WebAssembly 3.0 則加了 64-bit address space、multiple address spaces、exception handling、以及 GC 相關的 struct 和 array types。這些東西看起來很規格控，但它們其實是在替高階語言鋪路。\u003C\u002Fp>\u003Cp>這段最值得注意的是：即使 spec 往前走，你的 runtime 不一定跟得上。文章也提到，WasmGC 對某些 runtime 仍不夠用。這句話很重要，因為它提醒你別把「規格有」誤當成「你能用」。\u003C\u002Fp>\u003Cp>實操寫法：如果你要做的不只是 MVP，就先確認 host 和 compiler 到底支援哪些 extension：\u003C\u002Fp>\u003Cul>\u003Cli>WASI：要不要系統式能力\u003C\u002Fli>\u003Cli>SIMD：要不要向量化\u003C\u002Fli>\u003Cli>threads：要不要並行\u003C\u002Fli>\u003Cli>reference types：要不要更豐富的 host interop\u003C\u002Fli>\u003Cli>GC features：你的語言 runtime 需不需要\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這張表可以少掉很多「做了六週才發現不支援」的冤枉路。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># WebAssembly 採用模板\n\n## 1) 我要跑什麼\n- 語言：\n- 原始碼位置：\n- 模組責任：\n- 為什麼要放進 Wasm，而不是 JS \u002F native \u002F plugin runtime：\n\n## 2) 它要跑在哪裡\n- Browser：\n- Non-browser runtime：\n- Host application：\n- 目標作業系統：\n- 限制條件（CSP、threads、memory、WASI、GC）：\n\n## 3) 邊界契約\n### Inputs\n- 資料格式：\n- 序列化方式：\n- 單次 payload 上限：\n\n### Outputs\n- 回傳值：\n- events \u002F callbacks：\n- 錯誤格式：\n\n### Host 暴露的 API\n- 允許的能力：\n- 禁止的能力：\n- 需要 JS bridge 嗎：yes \u002F no\n\n## 4) Toolchain\n- Compiler：\n- Optimizer：\n- Runtime：\n- Debugger：\n- Build command：\n- Release build command：\n\n## 5) 最小可行驗證\n- 模組能不能 instantiate？\n- 能不能跟 host 交換一個值？\n- 失敗時能不能一路 trace 到底？\n- 能不能在真實 target 環境部署？\n\n## 6) 風險清單\n- 需要 DOM？如果要，邏輯留在 JS。\n- 行動端記憶體超過 300MB？先別硬上 browser。\n- CSP 擋 Wasm？先修 policy，再談上線。\n- 需要 threads？確認 host 支援。\n- 需要 WASI？確認 runtime 相容。\n- 需要 GC \u002F reference types \u002F SIMD？確認 exact version support。\n\n## 7) 決策規則\n只有在下面情況才用 WebAssembly：\n- 程式碼必須跨 host 可攜，\n- host 要控制 sandbox，\n- compiler \u002F runtime 路徑可接受，\n- 而且它的限制比你要解的問題小。\n\n如果不是，留在 native code、JavaScript，或更簡單的 plugin interface。\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板我會直接拿去開題會用。它逼你回答的不是「能不能編」，而是「這個東西到底該不該放在 Wasm 邊界裡」。這才是省時間的地方。\u003C\u002Fp>\u003Cp>原始拆解主要來自 \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly\">WebAssembly Wikipedia article\u003C\u002Fa>，我另外補了自己的實務判斷與採用順序。工具與規格連結也分別參考了 \u003Ca href=\"https:\u002F\u002Femscripten.org\u002F\">Emscripten\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwasi.dev\u002F\">WASI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa> 等官方或權威來源；我有保留原文事實，沒有亂加數字。\u003C\u002Fp>","我把 WebAssembly 拆成可落地的使用框架，最後附一份可直接複製的採用模板。","en.wikipedia.org","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167068634-g7cy.png",[13,14,15,16,17],"WebAssembly","WASM","WASI","toolchain","sandbox","zh",0,false,"2026-05-19T05:04:01.650875+00:00","2026-05-19T05:04:01.626+00:00","done","27b55163-0aa0-4c86-90a1-e95a72891c8c","webassembly-turns-native-code-into-web-modules-zh","tools","7255cd69-7325-4bbe-b9de-e90f9e24d145","published",[30,31,32],"Wasm 不是更快的 JavaScript，而是有 host 契約的模組格式。","先選 runtime 與邊界，再選 compiler，工具鏈會決定成敗。","只在需要可攜、sandbox、插件邊界或計算密集時使用 Wasm。","c3c88dd2-a940-438a-b359-0e5a24562273","[0.00441025,0.0197023,0.030845223,-0.078148335,-0.0024390952,-0.0063472455,0.014183401,0.0041500586,0.043187886,0.008243283,-0.011070767,0.0010198854,0.012117963,-0.0060042827,0.1268998,-0.010260864,0.008883571,0.028326774,0.005358054,0.0008939522,0.026484177,-0.0020889358,0.022982957,0.007111071,0.008680328,-0.0018234141,0.043316472,-0.0010191762,0.05058435,-0.0076515335,0.023285665,0.024486287,0.011874086,0.0017306154,0.018962547,-0.0036485305,0.006170873,-0.014339803,-0.00019860029,0.0022299534,0.012047268,-0.0008980603,0.03499618,-0.00454191,-0.013581387,0.009135836,-0.021164922,-0.019704038,0.0132788075,0.027438318,0.03909327,-0.012921789,-0.00393173,-0.14845031,-0.014811976,0.011328502,-0.017437143,0.00091933634,0.009471464,0.009223162,-0.015468977,0.03350315,-0.024677431,-8.8909765e-05,-0.010916809,-0.012925171,0.023775656,-0.00022334747,-0.0016435991,-0.026857175,-0.010252231,0.017827531,-0.01885181,-0.0041855737,0.013110782,-0.035783768,0.0022554903,-0.011857693,0.0046791285,0.021422556,0.0046316036,-0.01748992,0.017471662,-0.0034775063,-0.0006605119,0.025022494,-0.0017271339,0.01487168,0.009676971,0.015686506,0.014147649,0.042293604,0.029613232,-0.012861185,-0.0034024706,-0.0015876221,-0.014939417,-0.050114933,-0.006938934,-0.021447271,0.013396986,0.008076694,0.014481822,0.005114563,0.015398012,0.025847636,0.004361644,-0.0051311096,0.012000222,-0.008453924,-0.00020782757,-0.028276267,0.013888208,0.018215919,0.0012524213,-0.13361426,-0.015572662,0.001521524,0.011878277,0.014915884,-0.013574595,-0.0004924142,-0.0047599114,0.0412029,0.0007848206,-0.0015508677,0.017418599,0.0011898387,0.012803366,-0.02780377,-0.0015867362,0.0003201945,-0.015473969,0.043793093,-0.0027291067,0.0028911524,-0.0033398927,0.005939129,-0.022866335,-0.035241477,-0.017259942,0.04284528,-0.0319278,0.0039951364,-0.03819182,-0.013877826,-0.03813521,0.020150855,-0.010304827,-0.013878394,0.017886989,-0.023004044,-0.006573177,0.010028695,0.01626293,-0.015989019,0.0133129675,0.009460925,-0.00054391095,0.00401433,-0.019968804,0.0051391125,-0.015895562,0.033278566,0.006854314,0.020013578,-0.011357679,0.019485384,0.021873288,0.01912627,0.030112172,0.014171466,-0.019329699,0.01484035,0.000995836,-0.021657582,0.010700686,-0.0041779117,-0.009096244,-0.032265928,0.0020121627,-0.012366649,0.018017022,0.01779516,-0.0045439815,0.016277405,-0.011290163,0.0076218513,0.01260922,0.006018101,-0.007184817,-0.011677853,0.004631601,0.0020787022,0.011109068,-0.036342654,-0.035257418,-0.003907976,-0.00990948,0.02630921,0.013255842,-0.011452861,-0.021417191,-0.027712116,0.0013105635,0.0066633364,-0.017754685,-0.018727396,0.012289137,0.010828673,-0.01670288,-0.0070637055,0.037089646,0.010019478,-0.005793952,-0.015471475,0.021216005,-0.010389066,-0.021178998,0.0036517726,0.009287821,-0.025552908,0.021502981,0.02265678,-0.015656222,-0.008218594,-0.0053007253,-0.04420789,-0.008557143,0.006687109,0.016377393,-0.0123498775,0.002291839,0.004708821,0.026536215,0.015904333,0.013414501,-0.016046839,-0.00044005213,-0.007768491,-0.02325795,0.0052733356,0.0042331945,-0.015247837,0.0156076895,0.018553888,-0.012058643,-0.015474958,-0.00014313716,0.0062800976,-0.018393772,0.003156443,-0.003762582,0.012648207,-0.008341498,-0.016841188,-0.0006906514,-0.006758352,-0.011978941,-0.004744953,0.028719086,-0.034450352,-0.020734457,-0.007858447,-0.0041966196,-0.005976066,-0.0025957501,0.034910306,0.0005466019,0.0064141788,0.009979616,0.03436579,0.00900906,-0.0136057595,0.010128831,0.017149096,-0.068231136,0.028603904,0.016954103,-0.010857617,0.011434531,0.0125020975,0.019364076,-0.0021828874,0.0014440835,-0.0100640375,-0.0061889454,-0.015137439,-0.0066550896,0.008580742,0.007775943,0.0009989764,0.002051306,-0.008211623,0.010772431,-0.023820536,-0.005420941,0.035483174,-0.0004964091,0.0026395123,0.009990058,0.005394647,0.0012615108,0.02557205,0.010676911,0.0076309717,0.018333616,0.02696517,0.0014283647,0.0112842545,-0.0024674034,-0.006747937,0.013198664,-0.008640566,-0.011200099,-0.011499873,-0.010871585,-0.008525183,-0.0051641483,0.018046055,-0.013465588,-0.016554633,-0.019392202,0.012299728,-0.028338108,0.004106295,0.0040882756,-0.0077283275,0.029383568,-0.02474282,0.017636942,0.04459473,0.005791556,-0.010728891,0.029559294,-0.0076519013,0.018658556,-0.004008243,-0.0008134213,0.00770711,0.005496847,-0.019575708,-0.022350764,0.008887666,-0.015799006,0.011564781,0.022085363,-0.03179701,-0.009981973,-0.032439116,-0.00012547441,0.003895191,0.016045364,-0.008099234,-0.025151027,-0.010659625,-0.009785556,-0.01168001,0.02298281,0.0146835,0.023880905,-0.0037208293,-0.018131364,0.013130937,0.009561563,-0.0210032,0.0014361268,0.01131636,-0.013896289,-0.00022800412,-0.0127909705,0.008921562,0.014607245,-0.017392125,0.00027111542,-0.004494171,-0.0012459795,-0.004907386,0.0027298224,-0.0032930563,6.898362e-05,0.02987172,-0.0361428,-0.011169227,-0.04477249,-0.010913075,0.009429722,-0.0040654126,0.0060139843,0.0077208336,0.0073670167,0.014455002,0.0045909556,0.028531443,-0.029202187,-0.0059072217,-0.047827173,0.005740971,0.01401277,-0.0015498055,0.007292001,-0.0019334323,-0.0043404093,-0.00081099046,0.0082566105,-0.013003934,0.0039743953,0.008403295,-0.0034705831,0.03126625,0.01840322,0.002092441,0.017738242,0.019941654,0.008080026,0.025557142,0.0024257025,-0.0061321347,0.0041331323,-0.0052153445,-0.021271188,0.0068298606,-0.032286257,-0.0033428243,-0.00025633827,-0.01119999,-0.00091762026,0.009704592,0.0119935125,-0.01032925,-0.0049435026,0.0038700593,0.019653387,-0.030230954,-0.0059728604,0.0007227322,-0.027563201,-0.0022058631,-0.016397761,-0.0036685655,-0.010716473,-0.0074883574,-0.02300536,-0.004444855,0.00606167,0.018458085,0.02093542,-0.034003463,-0.0010723125,0.027598638,0.019607602,0.00627384,-0.003921845,-0.0031178372,0.022828659,-0.0056359004,-0.028613584,0.0021255908,-0.00057592103,-0.01060355,-0.00011538434,0.013721179,0.014003943,-0.013398383,0.006135673,-0.016003137,-0.008351346,-0.015743166,-0.01946643,0.021544913,-0.016516302,0.002213518,0.029064255,0.03258815,-0.014475364,0.010136161,-0.030983562,0.019052805,-0.033668112,-0.02200495,-0.00762006,0.0029682484,0.0065301615,0.022854304,-0.0020188477,0.0018296308,-0.009535035,-0.035356987,-0.0208898,-0.00957173,0.015126638,0.030440127,0.0074993763,-0.008992844,-0.018571958,-0.0051005795,-0.014502661,-0.008884147,-0.01094771,-0.007888917,-0.010728535,0.009413187,-0.028265968,-0.029720683,0.0007170782,0.0072904937,0.016337825,-0.010987158,-0.0036947385,0.00283955,0.02065053,-0.0128551675,0.008185103,0.0048383498,0.007690321,0.017788198,0.002495551,0.018981487,-0.03874966,0.015108356,-0.024040883,-0.0019134807,-0.0050714007,0.053870346,-0.0040363898,-0.009861605,0.019782776,-0.010985258,0.005435145,0.010031604,-0.008014522,0.029279443,0.0007213955,0.010661133,0.0015665197,0.014688162,0.0007084612,-0.0055323755,-0.01562946,-0.0009846905,-0.024276666,-0.027547186,-0.015704704,0.020348817,0.0062006535,-0.10888993,-0.013439024,-0.02493681,-0.0072499835,0.014542191,-0.019278293,-0.008947605,-0.022402298,-0.023834882,0.023843937,-0.0014307409,-0.009073785,0.0472262,0.03130193,-0.009849582,0.012702056,0.00027798428,0.01153279,0.03827913,0.00024067868,-0.0023097973,-0.0028334241,0.033458453,0.0063897814,-0.006619834,-0.005477926,-0.027062742,0.007148474,0.0037103032,-0.011244439,-0.025041118,-0.015618445,0.008043058,-0.0028028581,-0.024449913,0.023860034,0.016165072,0.008326155,0.0058335466,0.008857602,-0.008039436,-0.0045015262,-0.002283365,0.005970127,0.0021807484,0.015732339,0.020611512,0.0073812217,-0.008063852,0.02693394,-0.041632462,-0.009434072,0.005670095,-0.010296683,0.026270088,0.0318873,-0.0027111596,-0.009786667,-0.026782671,0.016803194,0.0021324588,-0.016346665,-0.011878394,0.012821684,0.014061886,-0.0040957844,0.006504049,0.010452366,-0.01977293,-0.0038034031,0.015651567,0.018441206,0.013109175,0.022277452,-0.014649501,0.009463008,-0.03084678,0.037359394,0.01047397,0.0132756345,-0.012083027,-0.01313006,-0.094430156,0.008372433,-0.000435008,-0.0011243235,0.027163764,-0.00090255466,0.026606606,0.0003205383,-0.008869914,-0.006254247,-0.0043968116,-0.035330724,-0.01977447,-0.043709636,-0.0151220905,-0.0040084347,0.006204532,0.008023357,-0.012521515,-0.0053777,-0.012751516,0.039820425,0.014124059,-0.010266558,-0.0028489702,-0.0073419744,0.030754622,-0.0073096985,-0.016949598,0.0017841366,-0.020835973,-0.1343034,-0.02756715,0.0038064683,-0.008377269,0.002313279,0.024124026,0.0087313205,-0.008279772,-0.025379958,-0.0068365326,0.006072654,-0.037732575,-0.030978007,-0.01243497,0.013684122,0.12061442,0.0017464155,-0.02302162,0.006783742,-0.008913682,0.00401562,-0.01192694,-0.009526349,0.01954474,0.003144563,-0.00032298488,0.026394952,-0.0131251495,0.0018275916,-0.023597747,0.0079541085,0.017325696,-0.015794879,0.0076071145,0.021656249,0.002784056,0.006413089,-0.013801384,0.01844299,0.013472234,-0.013650824,0.015151526,0.005622715,-0.022923453,-0.025448669,0.018424215,-0.011441868,-0.043479096,0.0012079143,-0.016939705,-0.008371863,-0.058207445,0.0014700033,-0.019301264,0.012832711,0.014158557,-0.012512342,-0.00015287739,0.025267107,0.006062731,-0.00027441056,-0.00077566755,0.016993327,0.016048757,-0.002791496,-0.020936448,0.030122217,0.028459057,-0.0061183902,0.0046541947,-0.007343003,-0.009167863,-0.0035693706,0.0077852686,-0.005089887,-0.03400774,-0.020201087,0.0097070895,0.008933275,-8.963124e-06,-0.00094072457,0.0019329619,-0.013284717,-0.03078717,-0.0006433701,-0.011762883,0.005182715,0.026239788,0.0026806358,-0.020921888,0.012182838,0.04676791,-0.0056088315,0.010111688,0.015912721,0.013143676,-0.03605037,0.045902967,-0.004770121,-0.01215901,0.004672025,-0.015385715,0.024645401,-0.010030642,0.02825061,0.0077261603,0.0038871935,-0.0077017387,0.0045362823,0.011472717]",{"tags":36,"relatedLang":45,"relatedPosts":49},[37,38,40,42,44],{"name":16,"slug":16},{"name":15,"slug":39},"wasi",{"name":13,"slug":41},"webassembly",{"name":14,"slug":43},"wasm",{"name":17,"slug":17},{"id":27,"slug":46,"title":47,"language":48},"webassembly-turns-native-code-into-web-modules-en","WebAssembly turns native code into web modules","en",[50,56,62,68,74,80],{"id":51,"slug":52,"title":53,"cover_image":54,"image_url":54,"created_at":55,"category":26},"55c43732-c8a9-4ee1-a373-383fa27a41b4","anthropic-buys-stainless-sdk-tool-rivals-zh","Anthropic 收購 Stainless，SDK 工具進入戰局","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779180252426-zkmj.png","2026-05-19T08:43:39.377553+00:00",{"id":57,"slug":58,"title":59,"cover_image":60,"image_url":60,"created_at":61,"category":26},"bdb4f000-f70d-47cd-a1c2-4c7262dcfb9f","wembanyama-stat-page-turns-into-recap-zh","Wembanyama 資料頁變成賽後整理","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779170691970-7pm6.png","2026-05-19T06:04:22.282386+00:00",{"id":63,"slug":64,"title":65,"cover_image":66,"image_url":66,"created_at":67,"category":26},"08d746ba-f428-4078-a652-afeab390810a","webassembly-browser-c-to-wasm-tutorial-zh","瀏覽器裡的 C-to-WASM 教學","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779168232653-g8lb.png","2026-05-19T05:23:23.991487+00:00",{"id":69,"slug":70,"title":71,"cover_image":72,"image_url":72,"created_at":73,"category":26},"eb8ba5dd-3093-4c8e-8625-bfd5f11f3800","zhihu-soft-copywriting-four-tips-zh","知乎軟文教你寫出能賣貨的標題","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779146044192-aild.png","2026-05-18T23:13:42.179515+00:00",{"id":75,"slug":76,"title":77,"cover_image":78,"image_url":78,"created_at":79,"category":26},"8c6ebfe4-617a-4380-a06b-69b5a80bdde2","github-copilot-app-desktop-agent-preview-zh","GitHub Copilot 桌面代理預覽開放","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779141829436-mot7.png","2026-05-18T22:03:22.898714+00:00",{"id":81,"slug":82,"title":83,"cover_image":84,"image_url":84,"created_at":85,"category":26},"1e852f64-41ab-476c-83a6-d0c8732f86b1","xurrent-q2-2026-ai-release-turns-itsm-into-agents-zh","Xurrent Q2 AI 讓 ITSM 變成代理","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779140063861-o0jh.png","2026-05-18T21:33:56.788859+00:00",[87,92,97,102,107,112,117,122,127,132],{"id":88,"slug":89,"title":90,"created_at":91},"de769291-4574-4c46-a76d-772bd99e6ec9","googles-biggest-gemini-launches-in-2026-zh","Google 2026 最大 Gemini 盤點","2026-03-26T07:26:39.21072+00:00",{"id":93,"slug":94,"title":95,"created_at":96},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":98,"slug":99,"title":100,"created_at":101},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":103,"slug":104,"title":105,"created_at":106},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":108,"slug":109,"title":110,"created_at":111},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":113,"slug":114,"title":115,"created_at":116},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":118,"slug":119,"title":120,"created_at":121},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":123,"slug":124,"title":125,"created_at":126},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":128,"slug":129,"title":130,"created_at":131},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":133,"slug":134,"title":135,"created_at":136},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00"]