2026.06.10 —— 今日 10 則
TODAY'S THREAD 今天的共同線索是把長年被當成定論的預設重新攤開來算——Postgres 推翻十五年「不做 query hint」的立場、Amazon 用隨機圖把資料中心網路從 fat-tree 換下來、matklad 主張 CSS 有些壞掉之處源自歷史包袱而非用法,而一篇 agent 檢索的實證研究發現純 grep 普遍比 vector retrieval 還準。底下另一條線是「把該量的東西真的量出來」:fast terminal 的瓶頸不在你以為的地方、Rust 的 only-bounds 把 sizedness 拆成一條可演化的層級。
Is Grep All You Need——agent 檢索裡 grep 普遍比 vector 還準
很多 agent 系統預設用 vector retrieval(embedding 加 ANN)去找相關上下文,這篇論文反過來問純 grep 是不是就夠了:在 LongMemEval 的 116 題上、跨自製的 Chronos 與 Claude Code/Codex/Gemini CLI 三個原生 harness,grep 普遍比 vector retrieval 準,而往 query 裡塞無關對話當干擾時退化也更平緩。但書是整體分數其實更受「用哪個 harness 與 tool-calling 風格」左右,而非檢索方法本身。對在搭 agent、糾結要不要為了 memory 或 code search 上一套 embedding 基礎設施的人,這是「先別急著加 vector DB」的一份實證提醒。
當攻擊者用上 frontier model——Cloudflare 把自己當 customer zero
Cloudflare 提出一個論點:當攻擊方開始用上 frontier 等級的 AI,防守的關鍵不是把 patch 速度拉快,而是在架構層面就讓單點失誤無法擴散。文章以自家系統為「customer zero」,示範把威脅情報、權限邊界與爆炸半徑控制設計進系統本身的做法。對在思考 AI 時代威脅模型怎麼變、又不想把希望全押在「修得夠快」上的安全工程師,這是一份從架構而非戰術出發的防禦框架。
Only Bounds——Rust 把 Sized 拆成一條可演化的層級
Rust 現在所有型別參數預設帶 Sized bound,要退出只能寫 ?Sized——一個二元開關,遇上 Arm SVE 這種「大小存在但編譯期算不出來」的型別就不夠用。Niko Matsakis 提的 only bounds 改成顯式宣告「我最少需要什麼」:把 sizedness 拆成 Sized : MetadataSized : MaybeSized 三層,函式寫 only MetadataSized 就是要求執行期可由 metadata 算出大小。好處是日後再插入新的中間層也不會破壞既有 only 寫法,而且讀起來是「你需要什麼」而非「你不要什麼」。對追 Rust 型別系統演化、或寫過 ?Sized 卻覺得它表達力不夠的人,這是一份把 negative bound 翻成 positive bound 的設計提案。
test-case reducer——被低估的除錯工具
手上一個觸發 compiler 或 runtime crash 的巨大輸入,要怎麼縮成最小重現案例?Laurence Tratt 主張 test-case reducer(delta debugging、creduce 這類工具)是被嚴重低估的一招:把「一直手動刪一半再試」自動化,最後留下的最小案例往往直接指向 bug 的根因。文章把 reducer 的運作、適用情境與寫自己的 reducer 的訣竅講清楚。對寫編譯器、parser、或任何吃複雜輸入的系統、常常面對「重現案例大到沒法 debug」的人,這是值得納入工具箱的一套方法。
關於 fast terminal,我之前想錯了什麼
終端機跑得快不快,瓶頸常常不在你以為的那一層。作者回頭修正自己過去對 terminal 效能的幾個誤解:真正吃時間的往往是 PTY 與 shell 之間的資料搬運、以及應用端怎麼吐資料,而不是單純的 glyph rendering 或 GPU 加速。文章用實測數字把「快」拆成可量測的幾段。對寫終端機、TUI 應用、或單純好奇 alacritty/kitty 這類號稱高效能終端機到底快在哪的人,這是一份打掉直覺、用數字重講的檢查。
Amazon 用隨機圖把資料中心網路從 fat-tree 換下來
Amazon 揭露 RNG(Resilient Network Graphs):用隨機圖(expander graph)取代傳統的階層式 fat-tree/Clos 資料中心網路。隨機連線需要解三個老問題——路由用 Spraypoint 把流量沿圖的擴張性灑開、佈線用 ShuffleBox 這個被動光學裝置產生準隨機拓樸、運維則靠數學模型在實體部署前先驗證。報出的數字很硬:對比 fat-tree 少 69% 路由器、吞吐高 33%、網路功耗降 40%、運營成本低 27%,而且故障是按比例退化(掉 1% 路由器約掉 1% 容量)而非斷崖式崩潰。對在設計或運營大規模資料中心網路的人,這是把 1991 年的 expander graph 理論真正落地的一份案場。
從自己的 IPv4 block 開始,硬核自架 email
Anil Madhavapeddy 寫了一份「最硬的那條路」自架 email 指南:不是租 VPS 裝個 Postfix 就好,而是從拿到一段可路由的 IPv4 block、跑 BGP 把它通告出去開始,一路往上搭到收發信。文中把 IP reputation、反垃圾信規則、DNS(SPF/DKIM/DMARC)與網路層的種種坑逐一攤開。對想徹底掌握自己郵件基礎設施、或單純想理解「為什麼自架 email 這麼難」的人,這是一份從網路最底層講起的完整路線圖。
CSS 那些壞掉的部分,有些是改不掉的
matklad 把 CSS 常被罵的地方分成兩類:一類是用法問題、可以靠紀律避開,另一類是源自歷史與本質、改不掉。他點名後者的具體機制——box-sizing 預設 content-box 讓加 padding 就位移整個版面、margin 相鄰時用 max() 而非 sum() 合併、font-size 量的其實是一個鬆散虛擬框而非字形大小、混用字體時 line-height 的 line-box 會上下錯位、word-break 遇到 inline code 這種不可斷字串就在手機上橫向溢出。他的論點是這些根源在 CSS 早年「文件排版/紙張隱喻」的出身,與現代 UI 需求天生衝突。對每天和 CSS 摔角、想分清「哪些該認命、哪些是自己挖的坑」的前端工程師,這是一份難得把抱怨拆到機制層的清單。
VoidZero 加入 Cloudflare——Vite 團隊整隊進場
Cloudflare 收購 VoidZero,把 Vite、Vitest、Rolldown 與 Oxc 這套 JavaScript 工具鏈背後的團隊整隊納入其開發者平台。對前端生態而言這是一次值得注意的版圖移動:核心的 build/test/bundler 工具如今由一家以 edge runtime 為主的公司背書與資助,long-term 的中立性與路線圖都會被重新檢視。對依賴 Vite 生態的團隊,這既是資源加碼的好消息,也是該留意治理走向的訊號。
Postgres 19 要做 query hint 了——十五年的立場鬆動
Postgres 社群擋了十五年的 query hint,在 19 版以兩個 contrib 模組 pg_plan_advice 與 pg_stash_advice 換個形式落地:不把 hint 寫進 SQL,而是用 advice 字串從外部約束 planner 的搜尋空間——JOIN_ORDER、HASH_JOIN、INDEX_SCAN 等都能指定,而且 EXPLAIN (PLAN_ADVICE) 會自動產生 advice 字串,pg_stash_advice 則把 query-id 到 advice 的對應存進共享記憶體、跨重啟保留。關鍵在它正面回應了當年六條反對理由:advice 活在 SQL 之外、是引導而非取代 planner、無法滿足時 graceful 退回最佳計畫並在 EXPLAIN 標示。對長年用 enable_seqscan 或 OFFSET 0 這種偏方偷偷下 hint 的 DBA,這是官方終於給出的那把「手術刀」。