基於 Rust 的新型連結器 'Wild' 展現潛力,速度比 Mold 快兩倍

BigGo Editorial Team
基於 Rust 的新型連結器 'Wild' 展現潛力,速度比 Mold 快兩倍

連結器開發領域迎來了新成員,基於 Rust 開發的連結器 Wild 的出現展現出顯著的效能提升。儘管仍處於早期階段,Wild 在某些場景下實現了比 Mold 快兩倍的速度,這標誌著連結技術的重大進步。

效能突破

Wild 的初步基準測試展示出令人印象深刻的結果,特別是在非除錯構建方面。社群測試顯示,在連結沒有除錯資訊的 rustc-driver 和 clang 時,Wild 的效能明顯優於現有連結器。考慮到 Mold 此前被認為是最快的選擇,這一效能優勢引起了廣泛關注。

「如果你是從頭開始構建,大部分時間將花在編譯程式碼上,而不是連結上。快速連結器的優勢在迭代開發中最為明顯。」

連結時間對比(不含除錯資訊的 rustc-driver):

  • GNU ld (2.38):20,774毫秒
  • gold (2.38):6,796毫秒
  • lld (18.1.8):1,601毫秒
  • mold (2.34.1):946毫秒
  • wild (2024-11-30):486毫秒

推進增量連結

Wild 的一個重要特點是計劃支援增量連結,這是包括 Mold 在內的其他現代連結器所缺乏的功能。社群強調這是 Linux 開發工具的一個重要缺口,特別是與已支援增量連結數十年的 Microsoft 連結器相比。這一功能可以透過只重新連結已更改的元件而不是整個程式來顯著改善開發週期。

Rust 在複雜系統中的作用

選擇 Rust 來實現 Wild 引發了廣泛討論。社群成員指出,Rust 強大的型別系統和安全保證使其特別適合管理增量連結的複雜性。儘管在 Mold 轉向 MIT 許可證後,一些人質疑是否需要另一個連結器,但 Wild 專注於增量連結和 Rust 的安全特性提供了令人信服的理由。

當前限制

儘管效能表現promising,Wild 仍處於早期開發階段,存在幾個限制。目前僅支援 Linux 上的 x86-64 架構,缺乏 LTO(連結時最佳化)支援,並且尚未實現其計劃的增量連結功能。社群共識建議在採用 Wild 到生產環境之前等待,不過其開發進展正受到密切關注。

當前 Wild 的限制:

  • 僅支援 Linux 系統上的 x86-64 架構
  • 尚未支援增量連結
  • 連結器標誌支援有限
  • 不支援連結器指令碼
  • 不支援 Mac/Windows 系統
  • 不支援 LTO(連結時最佳化)

開發重點

該專案著重於開發時期的效能而非生產構建,這一點得到了開發者的認可。這種關注點與現代開發工作流的需求相符,特別是在 Rust 專案中,連結時間可能成為迭代開發過程中的瓶頸。

技術說明:

  • LTO(連結時最佳化):一種允許編譯器跨多個原始檔進行最佳化的編譯技術
  • 增量連結:一種只重新連結已更改程式碼部分而不是整個程式的技術
  • RAII(資源獲取即初始化):Rust 中用於管理資源的程式設計正規化

參考:Wild Linker