🦓

C++とRustのコンパイル時間の比較

2023/01/07に公開

ちょっと面白い記事を見つけたので紹介します。
https://quick-lint-js.com/blog/cpp-vs-rust-build-times/

C++はコンパイル時間が長いことで悪名高いですが、Rustはどうでしょうか?
この記事の筆者は以下のような実験を行いました。

  1. オープンソースのC++のプロジェクトを選ぶ。
  2. それだけの小さなプロジェクトに分離する。
  3. C++のコードを一行づつRustに書き換える。
  4. C++とRustの両方のビルドを最適化する。
  5. コンパイルとテストの時間をその2つで比較する。

そして以下のような仮説を得ました。(結論ではありません)

  • Rustに移植すると元のC++のよりもずっと少ない行数になる

ほとんどの関数とメソッドはC++では2度宣言する必要がある(ヘッダーと実装で)。
Rustではこれが不要なので行数の削減になる。

  • フルビルドに関してはC++のほうがRustよりも長い時間がかかる。(Rustの勝ち)

これはC++の #include とテンプレートの機能のため。それらは .cppファイルごとに毎回コンパイルする必要がある。コンパイルは並列的に行われるが、不十分である。

  • インクリメンタルビルドに関してはRustのほうがC++よりも長い時間がかかる。(C++の勝ち)

これはC++はファイル単位でコンパイルされるのに対して、Rustはクレート単位でコンパイルされるため。Rustはソースコードに小さな修正に対しても多くのコードを再コンパイルすることになる。

詳細は元の記事をみてください。
ここで見つけました。
https://www.reddit.com/r/rust/comments/104md0s/is_coding_in_rust_as_bad_as_in_c_a_practical/
私はC++も Rustも日常的には使っていないのですが、傾向としては納得できます。
インクリメンタルビルドに関しては巨大なプロジェクトになるとリンクの時間の割合が大きくなるのでC++とRustの差は縮まることになるかな。

Discussion