Cargo のデフォルトの設定は数値計算にはあまり向いていない部分があるため, Cargo.toml
をどう設定するのが良いかまとめます. 他におすすめがあれば教えてください.
最適化を強制
Rust でガリガリ数値計算しようと思うときは比較的ハードな計算で Python じゃ遅すぎるということが多いと思います. そうするとたいていはデバッグ段階でもコンパイル時間よりも計算時間の方が長いので, 常に最適化をかけるべきでしょう.
[profile.dev]
opt-level = 3
overflow-checks = false
デフォルトはデバッグビルドが opt-level=0
, リリースビルドが opt-level=3
です. オーバーフローのチェックは取り扱う問題に応じてオン/オフを設定すればよいと思いますが, 多くの場合, チェックしたいのなら明示的に checked_add
などの関数を使用するべきだと思います.
LTO を有効化
LTO (link time optimizations) を有効にするとさらなる実行時速度の向上が期待できますが, デフォルトではオフになっています. 例えばリリースビルドのみ有効化する場合は次のように設定します.
[profile.release]
lto = true
デバッグ情報を残す
数値計算の場合, リリースビルドであったとしても問題が発生したら積極的にパニックさせることになります (変な状態のまま実行を続けられる方が迷惑). しかしデフォルトではリリースビルドではデバッグ情報が削除されてしまうため, 情報があまり出力されず不便です. デバッグ情報を保持するように設定します.
[profile.release]
debug = true
まとめ
[profile.dev]
opt-level = 3
overflow-checks = false
[profile.release]
debug = true
lto = true
[profile.test]
opt-level = 3