Rustを使っていると時間がかかるのがコンパイル時間。
こちらの記事によると正確にはビルドのリンカー処理に時間がかかるようです。
ということで早速モダンなリンカーmoldを導入してみます。
sudo apt install mold
[target.'cfg(target_os = "linux")']
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
ただ、moldは2021年にファーストリリースとまだ枯れていない感じなので開発時は良いかもしれませんがリリース時は標準のリンカーを使いたいです。
cfg()でなんとか条件を付けてできないかと模索してみました。
.cargo/config.tomlで使えるパラメータはどうやらここに書かれているパラメータのみらしいです。わかりやすいのはrustc –print=cfgで出力されるパラメータです。
この中でdebug_assertionsが開発環境だけのパラメータになりそうなので
[target.'cfg(all(debug_assertions, target_os = "linux"))']
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
のように書いてもNG。
何故なのかと、調べてみると既にIssueが上がっていました。(同じようなことを考えていますね)
また、文脈的にちょっと違うかもしれませんがCargo Bookに、
The same applies to cfg(debug_assertions), cfg(test) and cfg(proc_macro). These values will not work as expected and will always have the default value returned by rustc –print=cfg. There is currently no way to add dependencies based on these configuration values.
とありました。
しかし、希望はあります。
Unstable FeaturesとしてProfile rustflags optionというものがあり、Cargo.tomlに
cargo-features = ["profile-rustflags"]
[package]
# ...
[profile.dev]
rustflags = [ "-C", "..." ]
あるいは、.cargo/config.tomlに
# .cargo/config.toml
[unstable]
profile-rustflags = true
[profile.dev]
rustflags = [ "-C", "..." ]
とすればnightlyなRustでプロファイル別にリンカーを変更できるかもしれません。(試してません)
単にコマンドラインから呼び出せばすむのでそれほど問題ないですが。
mold -run cargo build