Chrome 為了少解一點 JPEG,把整段高頻係數丟掉;RISC-V 在指令編碼上省下來的位元,中斷時用 44 個 cycle 還了回去;Tailscale 為了讓備份跑得快而自己接管 checkpoint,半年後收到十九次資料庫損毀的帳單——這週三天反覆在講同一件事:成本很少真的消失,它只是換一層去付,而那一層通常沒有人在看。
第 34 週 —— 省下的在別層付
這週的主軸
八月十一日到八月十七日,實際出刊的是十三、十四、十六這三天,三篇 roundup、九篇 deep story。三天的引言擺在一起,是同一句話的三種寫法——「省下來的那一步日後都要還」、「保護與成本都畫錯了層」、「把看不見的東西挪到看得見的地方」。前兩句講的是同一個機制:某個地方少做了一件事,帳單並沒有跟著消失,只是寄到了另一層,而收件人多半不知道自己在付。第三句是它的解藥,也是這週唯一被反覆示範有效的辦法:花一點成本,把那一層先照出來。
最字面的一組是把成本從一層挪到另一層,而且四篇都把價錢標了出來。Chrome 只解了八分之一張圖?裡,Skia 不一定先完整解壓再縮小,而是「算出最接近的、分母為 8 的分數,然後以那個比例解碼影像」——一張 2000×2000 的 JPEG 要顯示成 20×20,完整解壓大約要 12 MB,最終畫面只需要約 1.2 KB,省下的是這一段;付出去的是整段沒有被重建的高頻係數,於是同一張 15 像素的 logo 在 Chrome 裡就是比 Firefox 粗。RISC-V 那篇把帳算得更遠:指令編碼上省下來的,在中斷處理時付回去,沒有硬體協助、暫存器得自己收,大約 44 個 cycle,ARM Cortex-M0 是 27 個;同一份取捨還讓 compressed load/store byte 的 offset 只到 0 至 3 而 ARM 到 31,作者數過 Linux kernel,光是依位元值分支這一類指令就有 35,393 處用得上。
另外兩篇是同一道題的漂亮解。yyjson 的 yy_double 只乘一次預先算好的 10 的冪,「而經典 Schubfach 需要兩次或三次」——省下的那次乘法沒有變成誤差,是因為半個 ulp 的容差帶直接重用同一次乘法的結果再位移得到,換句話說帳被結清了,不是被延後。nixpkgs-multiverse 的 fast 模式則乾脆宣告「最快的求值是不發生的那一次」:mkFakeDerivation 把 Nix 的 string context 掛到 store path 上,做出不需要 .drv、也不需要求值的類 derivation 物件,代價是把正確性整個押在 binary cache 上——所以作者才要交代那 271,187 個套件版本全部還活著、大約 14.8 TB、最早回溯到 2013 年。省一步的兩種寫法:一種把帳付清,一種把帳轉給別人保管,而後者至少把保管人的名字寫了出來。
帳單延後才寄到的那一組更難看,因為中間隔了幾個月甚至十幾年。19 次損毀,指向十六年前的競態是這週最貴的一筆:Tailscale 為了跑快而一致的備份自己接管 checkpoint,踩到的是 SQLite 裡至少存在十六年的一個 data race——「如果寫入發生在 checkpoint 期間的某個特定時機,checkpoint 的處理流程會搞混,它以為某些 page 已經從 WAL 複製進主資料庫檔案,其實並沒有」,結果是靜默的資料遺失,半年十九次。CLAUDE.md 為什麼只會變長量的是同一種延後:1,867 個 repo、247,694 條 instruction,agentic prompt 檔在整段生命週期成長超過三倍,平均每次 commit 淨增 4.9 條。作者把成因叫作 catastrophic remembering——新增一條指令很便宜,刪掉一條卻要冒險,於是每個人都選便宜的那一邊,而累積起來的成本要等到檔案長到沒人讀得完才有人發現。Information Abundance Paradox 是它在模型那一側的版本:訓練脈絡裡「充足的相關資訊會降低把該資訊寫進參數的誘因,因而提高對脈絡的依賴」,加大 context window 的幫助只到一個中間最佳點,之後持續下滑,而帳要等到測試時脈絡缺席或誤導才收。
把層畫錯的那一組最刺。把位址攪亂,保護區就露了出來拆的是保護邊界本身站在哪一層:page table、TLB 與 SMRAM lock 全都建立在虛擬與實體位址上,但實體位址翻成 DRAM 座標的最後一段發生在 memory controller,而那一層看不到上面的安全邊界——改掉 AMD Family 16h 的 MCT/DCT 設定,讓同一個 DRAM cell 被另一組位址別名讀到,PSP 的私有 carveout、SMRAM 裡的 SMM handler、C6 存下的暫存器與等著重載的 microcode 就一起出來了。攻擊方換了引擎,不再自己出力是把成本畫到別人帳上的極端版:Cloudflare 在 2026 上半年擋下 2,320 萬次 network-layer 攻擊與 29.64 兆次 HTTP 請求,而值得記的是向量的位移——DNS flood 佔 network-layer 攻擊的比例季增從 25.7% 升到 40.0%,CLDAP flood 季增 580%,重心從自己出力的 botnet flood 移向讓別人的伺服器出力的 reflection 與 amplification。Fil-C 那篇則是唯一主動想把帳單改寄回去的:它「與 C 源碼相容,但刻意不做 ABI 相容」,作者要的 extern "fil-c" 一旦成立,誘因就反轉了——繼續用 C 才要付執行期檢查的代價,把熱點改寫成 Rust 反而是拿掉檢查的那條路。
這週另一半的篇幅在做同一件事的反面:先花一點成本,讓本來看不見的那一層現形,而且四篇的成本都低到有點好笑。curl 的持續效能量測是三支 shell script——一支更新並跑測試、一支解析 log 產圖、一支用 crontab 每 20 分鐘叫起前兩支,24 個測項一輪約六分鐘;Daniel Stenberg 自評「有總比沒有好」,結果是「只花了幾個小時,我們就收到第一批改善數字的提案」。兩邊都做對了,資料還是不見了付的是 21 分鐘:Depot 把 registry 的三層 GC 寫成 TLA+ 模型,TLC「探索 14,290,224 個相異狀態,約 21 分鐘,證明 10 個 safety invariant 與 2 個 liveness property」,順帶抓到一個測試與 code review 都漏掉的刪除競態。一個標頭,把影子 MCP 照了出來付的是一個欄位:Cloudflare Gateway 除了 hostname 與 URL pattern,多看協定層的 MCP-Protocol-Version 標頭,policy 端就露出 is_mcp 與 mcp_portal 兩個 selector,架在一般網址上的 shadow MCP 才第一次在 wire 上有形狀。Signal 的 key transparency 則把驗證成本壓到「在一本十億頁的帳本裡,Bob 最多只需要檢視 30 頁」。
唯一一篇往反方向走的是 浮水印沒有改字,改的是抽樣的骰子,而它剛好證明了同一條規則。SynthID-Text 不改寫內容、不產生額外 token,換掉的是「在語意等價的候選詞之間挑一個」時所用的隨機來源——訊號藏進本來就要擲的那顆骰子裡,所以邊際成本接近零。代價寫得同樣清楚:候選詞太少的事實性句子、樣本太短、或被大幅改寫過的文字,訊號都會變弱甚至消失。把成本壓到零的辦法,是讓它跟一個你本來就要付的動作共用;而共用的那個動作被改掉時,訊號就跟著沒了。這仍然是同一張帳單,只是這次寄件人事先把條款印在同一頁上。
沒被合稱的個別亮點
41.6% 到 67.2%,一條下界被推上去是這週單則最重的一筆。Anthropic 公布一個未發布的研究版 Claude 把 zeta 函式零點落在臨界線上的比例下界從 41.6% 推到 67.2%,過程是兩次 Claude Code session、3,100 萬個 output token,前段丟掉 650 個失敗的想法,後段由大約 60 個 subagent 協作跑了 2,400 個 shell 指令與數百支 Python 腳本,大約 36 小時。驗證那一段倒是沒有省:Anthropic 自家的兩位數學家 Levent Alpöge 與 Ralph Furman 檢視過成果,證明也用 Lean 形式化過。官方的說法收得比新聞稿保守——這顯示 AI 模型「能以新的、有時令人意外的方式,延伸數學家想法的影響力與觸及範圍」。
Qwen-Max 這一級,第一次開放權重是這週規格最誇張的一則。Qwen3.8-2.4T-A95B 把「總共 2.4T、啟動 95B」的 MoE 放上 Hugging Face,官方說這是「Qwen3.8 首度把 Qwen-Max 等級的模型帶進開放釋出」。架構本身也值得記:92 層裡混用 Gated DeltaNet 這類線性注意力與 Gated Attention,512 個 expert 每個 token 路由 10 個外加 1 個共享 expert,脈絡長度原生 262,144 token、可延伸到 1,010,000。啟動參數只有總量的 4%,這個比例本身就是一種成本安排。
日全食走過,流量跟著掉下去是這週最不像技術新聞卻最好看的量測。日食帶從 15:35 UTC 起掃過大西洋北緣,Cloudflare 量到全食帶上的網路流量下降「大約 15% 到 30%」,偏食程度淺的地區幾乎沒變化。方法論那段寫得比結論還值得抄:基準線取「前三個星期三的中位數,依時段逐格對齊」。冰島、西班牙與葡萄牙跌最深,挪威與瑞典反而略高於基準,丹麥變化最小;恢復通常「在最大遮蔽後幾分鐘內」發生。
無聊,才是它贏的理由是這週最適合拿去吵架的一篇。論點是 ActivityPub 之所以成為真的跑起來的聯邦協定,正因為核心刻意平凡:JSON 物件、HTTP GET 與 POST、URL、collection、actor 與 inbox/outbox,分層也只有 client-to-server 與 server-to-server 兩層,activity 就是主詞動詞受詞的句子。作者的結論是「無聊才做得出來」。順帶更正一個很多人搞錯的細節:user@domain 這種帳號寫法其實來自 WebFinger,不在協定本身裡。
雙向綁定拖垮了一套 Rust GUI是這週最直接的一次設計檢討。評論直指 Xilem 的核心失誤在雙向資料綁定,作者的說法是「雙向綁定在 Rust 裡行不通(在其他語言裡也只是勉強可用)」,而且「它至少有一半的問題來自把雙向綁定烤進 API」。症狀很具體:Lens、MapMessage、Memoize 這些高階元件產出無法見人的公開簽章,fork、run_once、worker 這類帶副作用的 view 則破壞了反應式模型的前提。框架約 30 個 trait、約 70 個 View 實作,開的處方是改用型別抹除的路子。
本週動向
把這週(08/11–08/17)跟上週(08/04–08/10)放在一起量,總量從 52 則掉到 39 則,但那是出刊天數的差——上週四天、這週三天,每天都是十則加三篇,所以看絕對數字沒有意義,能比的只有佔比。五個 domain 依然沒有任何一個碰得到 10 pp 的敘事門檻,最大的位移是 systems 從 23.1% 退到 17.9%(−5.2 pp),另一頭是 infra 從 19.2% 升到 23.1%(+3.9 pp);backend −3.3 pp、web +2.5 pp、ai +1.9 pp 三筆都在雜訊範圍內。
這一次的位移比上週乾淨得多,因為它可以被完整歸因。這個指標把每天 roundup 的十則平均攤給那天宣告的 domain,而這三天的 roundup 都完整宣告了五個,所以 roundup 那半邊給每個 domain 的貢獻一律是 6,沒有任何差別。換句話說,全部的變化都發生在九篇 deep story 上:systems 從上週的 4 篇掉到 1 篇(只剩 DRAM 位址別名那篇),infra 從 2 篇升到 3 篇,web 從連續兩週的 0 回到 1 篇。systems 那 −5.2 pp 就是三篇 deep story 的差,不是題材消失——RISC-V 的取捨、Fil-C 的 ABI、SQLite 那個十六年的競態這週都在,只是分別落在 roundup 那一格或掛到 infra 底下。tag 那頭同樣安靜:沒有任何一個構成 surge(要比上週多兩次以上、且本週至少三次),新進榜的三個都只有 2 次——agentic-coding、sqlite、tpu,剛好對應 CLAUDE.md、Tailscale 與 HeyGen 那三篇。退榜的比較有話說:distributed-systems 從 4 次歸零、security 從 3 次歸零、rust 從 4 次掉到 1 次。security 歸零最值得存疑——這週有 DRAM 位址別名、DDoS 報告、OpenSSH 10.5、NuGet 金鑰效期四則,題材一點都不少,只是分別掛在 hardware-security、ddos、ssh 與 supply-chain 底下,沒有一個湊得到門檻。
一週的形狀
三個出刊日、九篇 deep story,archetype 這頭的重心比上週明顯:investigation 與 technical-deep-dive 各 3 篇並列在前,explainer 2 篇,narrative 1 篇,comparison 掛零。跟上週對照,動的是尾巴那兩格——narrative 從 3 篇掉到 1 篇、comparison 從 2 篇歸零,而 explainer 從 1 篇升到 2 篇。這個形狀跟主軸是一致的:這週的題目多半是「某個地方少做了一件事,後果在別處出現」,那是追因果的寫法(investigation)或拆機制的寫法(technical),不是講人怎麼發現的寫法,也不需要把兩個東西擺在一起比。comparison 歸零不是缺料,是這週沒有一則的形狀是二選一。
domain 這頭是本週動向那段的另一面。ai 與 infra 各 3 篇並列最厚,systems、web、backend 各 1 篇。值得停一下的是 systems 那格:上週 4 篇,這週只剩 DRAM 位址別名那一篇。這不是題材退場——RISC-V 的編碼取捨、Fil-C 的 ABI 誘因反轉、yyjson 的 dtoa 都在這週的 roundup 裡,題目也都夠硬,只是三則都在自己的射程內講完了。反過來 web 從連續兩週的零回到 1 篇(Chrome 的部分 IDCT),而那篇剛好是這週主軸最字面的一個例子。deep story 這一格說的是「哪些題目非得寫長不可」,不是「哪些題目重要」,這兩件事這週分得特別開。
9 篇 deep story × 3 天(08/13、08/14、08/16)
下一週可能會展開的線索
最近的一條今天就到期。NuGet.org 從 2026 年 8 月 17 日起把新 API key 的效期上限從 365 天縮到 30 天,而 8 月 17 日以前建立的金鑰在 11 月 1 日全數到期——也就是說接下來這十一週,每一條還在用長效金鑰發布的 pipeline 都得改。官方推的替代路徑是 Trusted Publishing:「一個 OIDC 工作流程把簽章過的短期身分 token 交給發布流程,NuGet.org 依套件擁有者設定的政策驗證那個 token,再為該次發布操作簽發一把臨時 API key」,目前只支援 GitHub Actions 與 GitLab。值得盯的正是這個「只」字:不在這兩個平台上的發布者,接下來三個月要嘛每 30 天輪一次金鑰,要嘛自己補一段。這是這週最典型的一次成本轉移——安全性的帳從「金鑰外洩的期望損失」搬到「每個月的維運動作」,而搬過去之後才看得出誰付得起。
另一條是 MCP 的兩件事在同一週落地,中間有一段時間差。2026-07-28 規格把 initialize/initialized 握手與 Mcp-Session-Id 一起從請求路徑上拿掉,每個請求自己帶協定版本、client 身分與能力,並新增 Mcp-Method 與 Mcp-Name 讓 gateway 與 WAF 不必解 JSON body 就能路由與限流;同一週 Cloudflare Gateway 開始用 MCP-Protocol-Version 標頭分類流量,靠的正是規格「更進一步要求每個 POST 請求都帶上它」這一條。問題在於這兩件事的時鐘不一樣快:規格要求的是新版 client,而 Gateway 現在看得到的 shadow MCP 多半跑在舊版上,所以舊訊號(hostname 與 URL pattern)還得留著。接下來幾週最實際的觀察點,是舊版 client 的比例掉得多快——在那條曲線降下來以前,「用標頭分類」這個能力量到的其實是「已經升級的那一批」,而那正好是最不需要被照出來的一批。
這週的落點——沒有一件事是免費的,只是收據常常不寄到下單的那個人手上。Chrome 省下的解碼成本由那張 logo 的邊緣付,RISC-V 省下的編碼位元由中斷處理的 44 個 cycle 付,Tailscale 想要的備份速度由半年十九次損毀付,CLAUDE.md 裡沒人敢刪的那幾條由後來每一次讀不完的脈絡付,而 reflection 攻擊乾脆讓別人的 DNS 伺服器整段付掉。這不新,但這週被講得特別具體:判斷一個省法值不值得,要問的不是省了多少,而是帳單會寄到哪一層、多久之後寄到、以及那一層有沒有人在看。而唯一被反覆證明有效的辦法,成本低到有點難堪——三支 shell script 加一條 crontab、一個 21 分鐘的 model check、一個標頭欄位。把那一層先照出來,通常比事後追帳便宜好幾個數量級。