我開發了一款即時 C/C++/Rust 編譯流程可視化工具 (★
155 分)
軟體專案的編譯常因程式碼量龐大而耗時,例如 LLVM ( Low Level Virtual Machine ) 專案,但更多時候是可修正的低階步驟拖累效能。Daniel Hooper 開發了跨平臺的「What the Fork」工具,可視化 C/C++
/Rust 編譯流程,也支援任何語言與建置工具。使用者只要在編譯指令前輸入 wtf,就能啟動分析並透過圖形化使用者介面 ( UI ) 即時檢視編譯過程。
使用者介面 ( UI ) 以水平時間軸展現每個執行程序,以不同顏色區分程序類型,並縮排呈現父子程序關係;下方面板會顯示所選程序的執行時間、工作資料夾與完整命令參數,協助開發者一目瞭然各步驟的耗時與結構脈絡。
實際案例揭露多種常見瓶頸:cargo 預設序列編譯多個檔案,無法同時啟用多核心資源;CMake 在每個檔案前反覆執行 cmake→make→make→clang,並重複檢查 Xcode 路徑與作業系統版本,導致並行度幾乎為零;xcodebuild 在大型 Objective-C 專案開頭閒置數秒,結尾僅剩零星 clang 子程序;Zig build 隨機排程相依性,因順序不佳可能造成資源浪費;make/go 建置 GitHub CLI 時,大段時間耗費於下載相依套件。與此相比,Ninja 在 LLVM 專案上的並行效能接近理論極限,能充分利用所有核心。
為了捕捉整個流程,「What the Fork」監聽系統呼叫 fork() ( 建立子程序 )、exec() ( 執行新映像 ) 與 exit() ( 程序結束 ),並針對各作業系統採用不同機制:macOS 利用 Endpoint Security API、Linux 運用 ptrace()、Windows 則靠 Event Tracing for Windows。由於不依賴特定編譯器或建置工具,任何會啟動大量子程序的流程都能被可視化,進而找出效能瓶頸。
在 Hacker News 上,開發者對此工具熱烈回響,有人詢問是否能結合歷史執行時間預測剩餘編譯進度、或與 Bazel Build Event Protocol 整合;也有人建議為工具更名為 BuildViz 以增專業度。多位工程師分享既有經驗:例如用 strace/dtruss 搭配 graphviz 和
perfetto.dev 產出可視化圖形;或利用 Microsoft vcperf 監測 Visual C++ 編譯流程;甚至有人提出以已編譯二元檔大小推估編譯耗時。整體而言,大家認為這款工具概念巧妙且實用,未來若能擴充支援更多環境與建置事件,將大幅加速 CI ( 持續整合 ) 流程的最佳化。
👥
44 則討論、評論 💬
https://news.ycombinator.com/item?id=44902127