リンカーの開発分野に、新しい参入者が登場しました。 Rust ベースのリンカー「 Wild 」は、既存のソリューションと比較して顕著な性能向上を示しています。まだ初期段階ですが、特定のシナリオで Mold の最大2倍の速度を達成し、リンク技術における重要な進歩として注目を集めています。
性能のブレークスルー
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 を含む他の現代的なリンカーには備わっていません。数十年前から Microsoft のリンカーがサポートしているこの機能の不在は、 Linux 開発ツールの重要な課題として指摘されてきました。この機能により、プログラム全体ではなく変更されたコンポーネントのみを再リンクすることで、開発サイクルを大幅に改善できる可能性があります。
複雑なシステムにおける Rust の役割
Wild の実装に Rust を選択したことは、大きな議論を呼んでいます。コミュニティメンバーは、 Rust の強力な型システムと安全性保証が、インクリメンタルリンクの複雑さを管理するのに特に適していると指摘しています。 Mold の MIT ライセンス化後に新しいリンカーが必要かという議論もありますが、インクリメンタルリンクへの注力と Rust の安全性機能は、 Wild の開発の説得力ある根拠となっています。
現在の制限事項
有望な性能を示しているものの、 Wild はまだ初期開発段階にあり、いくつかの制限があります。現在は Linux 上の x86-64 のみをサポートし、 LTO(リンク時最適化)のサポートがなく、計画されているインクリメンタルリンク機能もまだ実装されていません。コミュニティは、本番環境での Wild の採用は時期尚早としていますが、その開発の進捗は注目されています。
現在の Wild の制限事項:
- Linux 上の x86-64 のみ対応
- 増分リンクはまだ未対応
- リンカーフラグのサポートが限定的
- リンカースクリプト非対応
- Mac/Windows 非対応
- LTO (リンク時最適化)非対応
開発の焦点
本番ビルドではなく開発時の性能に重点を置くというプロジェクトの方針は、開発者から支持を得ています。この焦点は、特にリンク時間がボトルネックとなりうる Rust プロジェクトの現代的な開発ワークフローのニーズに合致しています。
技術的注釈:
- LTO(リンク時最適化):複数のソースファイルにまたがって最適化を可能にするコンパイル技術
- インクリメンタルリンク:プログラム全体ではなく、変更された部分のみを再リンクする技術
- RAII(リソース取得は初期化時): Rust でリソース管理に使用されるプログラミングイディオム
参考: Wild Linker