2019-02-25-01-リファクタリング祭り
>> Site top >> weblog >> 月別アーカイブ >> 2019年02月のlog >> 2019-02-25-01-リファクタリング祭り
最終更新日付:2019/02/25 01:00:00
リファクタリング祭り
2019 年 02 月 25 日
ビルドに時間がかかり過ぎている‥‥‥ので、とにかく整理しようと。努力して、期待したほどには成功しなかった、という話。ていうか、2週間以上あけてしまったな。今年はこまめに更新しようと思ったのに。それだけ頑張ってたということにしておこう。
着手する前の段階で、steam のソースコードは以下のような状態だった。
- ソースファイル数:274 files
- ソースファイル総行数:abount 45K lines
- 翻訳単位数:166
ソース総行数はヘッダとインプレを合わせたモノで、これはコメントや空行も含んでいる。翻訳単位数というのは、要するに *.cxx ファイルの数ってことだ。で、これをコンパイルするのにどれくらいのコストがかかっていたか。以下。
- プリプロセス出力総行数:7,271,350 lines
- コンパイル時間合計:252.816 sec
727万行! 平均すると翻訳単位あたり 43,800行くらいだけど、小さなものは 500行以下、大きなモノになると 76,000行くらいになっていた。まぁそれはコンパイラが裏でやってくれるから最悪無視するとして、コンパイル時間の合計が 4分12秒‥‥‥これを速いとみるか遅いとみるか。もちろん遅いと感じたのでなんとかしようと。
で、目をつけたのはコンパイル時依存関係の低減。3年に渡ってどがちゃかとイジり続けた結果、やはり色々イマイチな状態になっている。ヘッダファイルで vector とかfunctional とか、はては unordered_map とか #include してるわけだ。そりゃプリプロセス結果も太るわ。そんなわけで、そこらへんを整理しまくって依存関係を減らしましょうと。そういう努力をこの2週間くらいずっと続けていたわけだ。
詳細は省くけど、この努力の結果、以下のようになった。
- プリプロセス出力総行数:6,589,953 lines ( -681,397 lines )
- コンパイル時間合計 :223.556 sec ( -29.260 sec )
大体だけど、プリプロセス出力を 68万行削った結果、コンパイル時間を 30秒くらい削ることができた。まだできることはありそうだけど、いったんこれで区切りとしよう、と判断したワケだ。あとできそうなことと言えばかなり「重たい修正」になりそうだったので。
で、まぁ、なんていうか‥‥‥この結果をどう考えるべきか、正直結論が出ていない。30秒くらい削れたのは嬉しいけれど、びっくりするほど速くなったとは言い難いし、コンポーネントを跨ぐ部分で使っていたラムダ式を全てコールバック関数と不透明ポインタに置き換えた結果コードはかなり汚くなった。これが 30秒に見合う取引だったのか‥‥‥と考えると、「うーん‥‥‥」となってしまう。
ひとまずのところ、今後の機能追加やその他の修正では、コンパイル時依存関係の新規導入には慎重になると思う。結構しんどい思いをしたからね。標準ライブラリのヘッダ、特に STL のヘッダを #include する場合のコストを甘くみないこと。これは今後も肝に銘じておくとしよう。
コメント
このページのタグ
Page tag : fist
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.