はじめに
リリースプロファイルを使ったビルドのカスタマイズへようこそ。この実験は、Rust Bookの一部です。LabEx で Rust のスキルを練習することができます。
この実験では、Cargo.tomlファイルに[profile.*]セクションを追加し、最適化のためのopt-levelなどのデフォルト設定を上書きすることで、Rust のリリースプロファイルをどのようにカスタマイズするかを探ります。
リリースプロファイルを使ったビルドのカスタマイズ
Rust において、「リリースプロファイル」は、異なる設定を持つ事前定義済みでカスタマイズ可能なプロファイルであり、プログラマーがコードをコンパイルするためのさまざまなオプションに対してより多くの制御を行えるようにします。各プロファイルは独立して設定されます。
Cargo には 2 つの主なプロファイルがあります。1 つは、cargo buildを実行する際に Cargo が使用するdevプロファイルであり、もう 1 つは、cargo build --releaseを実行する際に Cargo が使用するreleaseプロファイルです。devプロファイルは、開発用に良好なデフォルト設定で定義されており、releaseプロファイルは、リリースビルド用に良好なデフォルト設定を持っています。
これらのプロファイル名は、ビルドの出力からおなじみかもしれません。
$ cargo build
Finished dev [unoptimized + debuginfo] target(s) in 0.0s
$ cargo build --release
Finished release [optimized] target(s) in 0.0s
devとreleaseは、コンパイラが使用するこれらの異なるプロファイルです。
プロジェクトのCargo.tomlファイルに明示的に[profile.*]セクションを追加していない場合、Cargo は各プロファイルに対してデフォルト設定を適用します。カスタマイズしたい任意のプロファイルに対して[profile.*]セクションを追加することで、デフォルト設定の任意のサブセットを上書きすることができます。たとえば、devプロファイルとreleaseプロファイルのopt-level設定のデフォルト値は次のとおりです。
ファイル名:Cargo.toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
opt-level設定は、Rust がコードに適用する最適化の数を制御し、0 から 3 の範囲です。最適化を多く適用するとコンパイル時間が延びるため、開発中に頻繁にコードをコンパイルする場合、結果として得られるコードが動作が遅くなっても、コンパイル速度を上げるために最適化を少なくすることが望ましいでしょう。したがって、devのデフォルトのopt-levelは0です。コードをリリースする準備ができたら、コンパイルに時間をかける方が良いでしょう。リリースモードでは一度だけコンパイルしますが、コンパイルされたプログラムを何度も実行するため、リリースモードでは、コンパイル時間を長くする代わりに、動作が速いコードを得ます。これが、releaseプロファイルのデフォルトのopt-levelが3である理由です。
Cargo.tomlで異なる値を追加することで、デフォルト設定を上書きすることができます。たとえば、開発プロファイルで最適化レベル 1 を使用したい場合、プロジェクトのCargo.tomlファイルに次の 2 行を追加することができます。
ファイル名:Cargo.toml
[profile.dev]
opt-level = 1
このコードは、デフォルト設定の0を上書きします。これで、cargo buildを実行すると、Cargo はdevプロファイルのデフォルト設定に加えて、opt-levelへのカスタマイズを使用します。opt-levelを1に設定したため、Cargo はデフォルトよりも多くの最適化を適用しますが、リリースビルドほど多くはありません。
各プロファイルの構成オプションとデフォルトの完全な一覧については、https://doc.rust-lang.org/cargo/reference/profiles.htmlの Cargo のドキュメントを参照してください。
まとめ
おめでとうございます!「リリースプロファイルを使ったビルドのカスタマイズ」の実験を完了しました。LabEx でさらに多くの実験を行って、スキルを向上させることができます。