Linux向けの高速リンカーツール、Wild
(github.com/davidlattimore)-
Wild リンク
- Wildは、反復的な開発のために非常に高速なリンクを目指すツール。
- まだ増分リンクは実装されていないが、現時点でもかなり高速な性能を示している。
- 本番ビルドでは、GNU ldやLLDのような成熟したリンカーの使用を推奨。
- 開発中に高速なビルド時間を求めるなら、Wildを試してみることができる。
- x86-64 Linuxで開発している場合は利用可能で、問題が発生した際はバグレポートが推奨される。
-
インストール
- 事前ビルド済みバイナリをインストールするには、リリースページからコマンドをコピーして利用できる。
- 手動で
wildバイナリをパスにコピーすることもできる。 - 自分でビルドしてインストールするには、
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wildコマンドを使用する。
-
デフォルトのリンカーとして使う
- RustコードのビルドでWildをデフォルトのリンカーとして使うには、
~/.cargo/config.tomlに設定を追加する。
- RustコードのビルドでWildをデフォルトのリンカーとして使うには、
-
Q&A
- なぜまた別のリンカーなのか?
- Moldはすでに非常に高速だが、増分リンクをサポートしていない。Wildは増分リンクを目標としている。
- Rustで書かれており、増分リンクの複雑さを解決できると期待されている。
- 動作する機能
- 現在サポートされているプラットフォーム/アーキテクチャ: Linuxのx86-64
- 静的リンクされたバイナリ、動的リンクされたバイナリ、共有オブジェクト(.soファイル)を出力可能
- Rust proc-macrosとの互換性を確認済み
- crates.ioの人気クレートのテストに合格
- デバッグ情報をサポート
- まだサポートされていない機能
- 増分リンク、x86-64以外のアーキテクチャ対応、さまざまなリンクフラグのサポート、MacおよびWindows対応など
- なぜまた別のリンカーなのか?
-
ベンチマーク
- Wildの目標は、増分リンクによって非常に高速な性能を発揮すること。
- 非増分リンクでも可能な限り高速な性能を目指している。
- ベンチマーク結果では、デバッグ情報なしでWildは非常に高速な性能を示している。
- デバッグ情報を含む場合は、性能がやや低下する。
-
Rustコードのリンク
cargo testコマンドを使って、Wildでクレートをビルドしてテストできる。- Clangコンパイラがインストールされている必要があり、GCCは任意のリンカーの使用を許可しない。
-
貢献
- Wildへの貢献方法についてはCONTRIBUTING.mdを参照。
-
スポンサー
- このプロジェクトを支援すれば、より長い期間フルタイムで作業できるようになる。
-
ライセンス
- Apache License, Version 2.0またはMITライセンスを選択可能。
1件のコメント
Hacker Newsのコメント
moldがAGPLからMITへライセンス変更したことで、新しい高速リンカーの必要性は薄れたにもかかわらず、このプロジェクトが登場したのは驚き。一部のケースではmoldより2倍速い点は注目に値する
以前このプロジェクトを見てみたが、まだ本番投入の準備はできていないように見える。そのため、今もmoldを使っている
macOSユーザー向けには、Appleが1〜2年前に新しいリンカーをリリースしており、Rustと一緒に使う場合は
config.tomlに特定の設定を追加する必要があるC/C++コンパイラがリンク段階なしでプログラム全体を1つの単位としてビルドできたら新鮮だろう。外部ライブラリの大半は動的リンクされるため、リンク工程をなくしても問題にはならない
2008年のGold、2015年のLld、2021年のmoldなど、高速リンカーへの関心は継続的に高まっている
Rustの人気によって高速リンカーへの関心が高まっており、Rustバイナリはリンク段階で多くの時間を要する。これはRust固有の問題ではなく、静的リンクとLLVMの最適化によるものだ
John Levineの"Linkers and Loaders"はこの分野の良書で、数年前に読んだときとても興味深かった
wild、mold、ldの性能を比較した結果、適切に構造化されたプロジェクトではリンク時間は大きな問題にならないことが分かる
性能ベンチマークは2020年モデルのSystem76 Lemur proノートPCで実行され、4コア(8スレッド)と42GBのRAMを搭載している
リンカーとは何かと疑問に思う人もいる
Linuxカーネルをリンクできるのかという質問もあり、これはLLDにとって有用なマイルストーンだった