工程趣聞 2026 年 8 月 29 日

2026-08-29 — Rustdoc 一週優化 33%、X Corp 存證信函關閉 Nitter/XCancel、Doug McIlroy 談 Unix 管線起源

primary=https://noahlev.org/blog/2026/08/27/making-rustdoc-faster/ primary=https://github.com/rust-lang/rust/pull/159623 primary=https://github.com/zedeus/nitter primary=https://www.theregister.com/legal/2026/08/26/nitter-no-more-x-sends-in-the-lawyers-to-shut-down-open-source-project/5292548 primary=https://tmpout.sh/5/2.html

一週優化讓 Rustdoc 效能提升 33%,起點是一個遞迴限制觸發的 Bug

noahlev.org · 2026-08-27

開發者 Noah Lev 在部落格記錄了他如何花一週時間,把 Rust 文件產生工具 rustdoc 的效能問題連根拔起。起因是一份錯誤回報:某個套件把 #![recursion_limit = "8"] 設得極低,結果 rustc 順利編譯,rustdoc 卻直接失敗。這個看似邊緣案例的 bug,最終牽出了 rustdoc 內部一段長期被忽略、拖慢所有人建置速度的低效程式路徑

問題出在哪:先蒐集再過濾

追查後發現問題出在 build_extern_trait_impls 這個處理階段,它會走訪整個依賴圖中所有外部 crate 的 trait 實作,把每一個都完整建構成內部表示,事後才判斷這個 impl 該不該出現在文件裡。這種「先蒐集再過濾」的順序,意味著大量根本不會被顯示的 impl 也被完整處理過一輪,其中遞迴走訪 Deref impl 鏈的額外邏輯,正是觸發遞迴限制 bug 的元凶。

四個 PR,把過濾邏輯往前搬

Lev 沒有一次重寫整個模組,而是拆成四個獨立 PR 逐步收斂,核心思路是把過濾條件搬到建構 impl 之前,讓不相關的實作直接被跳過,而不是建構完才丟棄:

  • rust-lang/rust#159623(作者 camelid,2026-07-22 合併,commit c188565):只在 impl 涉及泛型、原始型別、當前 crate 定義的型別/trait 或 Deref 實作時才建構,移除了原本事後過濾用的 BadImplStripper
  • #159721:把「原始型別」相關處理限制在本地 crate 確實有定義原始型別時才執行。
  • #159779:合成 auto trait 與 blanket impl 時只分析已文件化的型別,排除私有型別。
  • #159854:判斷 self type 只看型別的「head」部分,避免對未內聯的 impl 多餘呼叫 param_env 查詢。

用 Flamegraph 和 Crater 驗證

每個 PR 都用 flamegraph 檢視耗時分布,再透過 Crater 在整個 crates.io 生態系跑相容性與效能驗證。最終平均掛牆時間下降 25%,尖峰記憶體用量減少 12%hyperbitmaps 這類真實世界套件最高加速 40%,helloworld 級的微型 benchmark 甚至加速到 60%。這些改動目前都已進入 Rust nightly,等待走完 stable 發佈流程。

原始來源:noahlev.org 部落格原文rust-lang/rust PR #159623


X Corp 一紙存證信函,讓 Nitter 與 XCancel 同時關站

GitHub · 2026-08-26

2026 年 8 月 24 日,X Corp(前身 Twitter)對開源專案 zedeus/nitter 及其最活躍的公開實例 XCancel 發出 cease-and-desist 存證信函,要求永久關閉所有 Nitter 服務與原始碼儲存庫。兩天後,nitter 的 GitHub repo 被標記為封存(archived),XCancel 也已在信函送達當晚停止服務。這個提供免登入瀏覽 X 貼文長達七年的開源前端,就此劃下句點。

Nitter 做的事,踩到了什麼紅線

Nitter 是用 Nim 寫成、不需 JavaScript 就能瀏覽 X/Twitter 內容的替代前端,主打隱私與輕量,使用者不必登入帳號就能看貼文、訂閱 RSS。X Corp 在信函中指控 Nitter 規避其存取控制機制、大量爬取資料,並違反服務條款與相關電腦存取法規。XCancel 作為 Nitter 最大的公開託管實例,成了信函點名的頭號對象,等於連帶被判了死刑。

維護者的回應與現況

專案維護者表示 nitter.net 已離線、開發已停止,團隊正在尋求法律意見,暫時沒有具體的申訴或對抗計畫。GitHub repo 目前保留唯讀存取,README 仍描述著專案宗旨,但已無法再部署或修改,社群原本用來查詢公開實例清單與瀏覽器擴充功能的 wiki 頁面也隨之停止更新。

原始來源:github.com/zedeus/nitterThe Register 報導


跟 Unix 管線之父 Doug McIlroy 聊一次:那根「|」符號是怎麼來的

tmpout.sh 第 5 期 · 2026-08-23

低階技術同人誌 tmpout.sh 第 5 期刊出一篇對 Doug McIlroy 的長篇訪談,這位 1958 年加入貝爾實驗室、後來提出 Unix 管線(pipe)概念的電腦科學家,回顧了管線誕生的完整經過。McIlroy 說管線是他一生中最重要的貢獻,起因是當年程式之間只能靠暫存檔交換資料,完全無法即時互動。

從一串大於符號到 Thompson 一夜實作

McIlroy 最初的構想是用一長串 >>>>> 符號表示程式串接,但顧慮系統負擔,遲遲沒有推進。他把構想拿給 Ken Thompson 看,Thompson 當場說要動手做,並且真的在一個晚上就實作出來,利用 Unix 原本就有的行程間共享緩衝區,替每個行程加上各自獨立的讀寫指標。後來大家熟悉的「|」符號,其實是 Thompson 為了倫敦一場發表需要好看的記號才換上的。

從 TMG 編譯器到「Trusting Trust」

訪談也提到 McIlroy 早年移植、擴充 TMG——Robert McClure 於 1965 年提出的遞迴下降編譯器產生器——到 PDP-7/PDP-11 上執行,這個版本後來被收進 Unix 第 2 版到第 6 版,是 Unix 上第一個高階語言。他還提到 Thompson 曾在編譯器裡植入一個幾乎沒被發現的後門,最後是 Programmer's Workbench 團隊在 Thompson 的家目錄翻到才被抓出來,這正是後來 Thompson 圖靈獎演講「Reflections on Trusting Trust」的原型故事。

對「功能堆疊」的不耐煩

訪談尾聲,McIlroy 批評現代工具傾向堆疊過多旗標選項,直接點名 ls 指令的參數已經多到失去 Unix「用更少做更多」的精神。他也談到自己偏好用 Haskell 做保角映射之類的數值計算,欣賞其惰性求值與流處理帶來的數學美感,但也承認純函式語言少了賦值語句帶來的效能優勢,很難撼動 C 的地位。

原始來源:tmpout.sh 第 5 期:Doug McIlroy 訪談


End of article
0
Would love your thoughts, please comment.x
()
x