見出し画像

MGL週報 #56 - 続・大規模リファクタリング

このエントリはゲーム開発用フレームワーク「MGL」の開発記録です。MGLはzlibライセンスの下に無償で提供されています。


今週の作業内容

大規模リファクタリング

相変わらずリファクタリング作業を進行しています。

clang-tidyの指摘する内容も何となく癖のようなものが見えてきて、リファクタリングそのものは順調に進んでいます。問題なのはドキュメント化済みの箇所の修正で、変更と同時にドキュメントの修正も加えなければならず、これが結構な手間になっています。

ドキュメントは自動生成に頼らず手作業で書いているため、こういった変更にはめっぽう弱いのですよね。上手く自動化できないかなとは考えるものの、そんなに良い方法があればDoxygenが既に対応している事でしょう。もちろん、自動化のためにドキュメントの内容を簡素化する選択肢はありません。

clang-formatが一部の書式を大幅に破壊する問題も何となく癖が見えてきました。どうやらこのツールは左波括弧({)を行の末尾に置くことを前提として整形している節があり、これを次の行に置こうとすると奇妙なインデントを加えがちのようです。波括弧の設定自体は変更可能なのですが、それを行うとテーブル定義やラムダ式あたりの整形で破綻してしまいます。

そんな訳で、clang-formatを全体に適用するのは一旦諦めます。ただし、Vimのプラグインを通して局所的に適用するのは有用であると感じているため、設定ファイルそのものは残しておこうと思います。これを適用すると書式が崩れるソースがあるのは少々気持ち悪いですが、現時点では他に解決方法がありません。

それにしても、最近のプログラミング言語は横方向に情報を詰め込むのが流行りなのでしょうか。私はプログラムは上から下に読むため、1行あたりの情報はパッと読み解ける内容に抑えたいのですが……この辺は慣れの問題ですかね。


MGL 1.1.13の変更予定内容

リファクタリングの影響で、アプリケーション側から呼び出すAPIにもいくつかの変更が生じます。それほど大きなものではありませんが、先行してお知らせしておきましょう。

値を返すだけのAPIに [[nodiscard]] 属性を付与

C++には [[nodiscard]] という属性がありまして、これを付与した関数やクラスを無視すると警告が出るようになります。

1.1.13以降、基本的に値を返すのみのAPIにはこの属性を付与することにします。

この変更にどのような影響があるのかと言うと、普通に使用する限りは何も影響はありません。例えば次のように記述した際に警告が出るようになります。

MGL::Input::Mouse mouse;

mouse.GetPosition();

GetPosition()はマウスカーソルの位置を取得する関数ですが、その戻り値を無視したら呼び出す意味がありませんよね。[[nodiscard]] 属性が付与されている場合、このような無意味な呼び出しを行った際に警告が出て知らせてくれるようになります。

元々この属性はメモリアロケータのような絶対無視してはいけない関数には付与されていたのですが、今後は無害なものに対しても積極的に付与していこうという方針です。


その他

さっさとリファクタリング片付けないと、ただでさえ地味な週報がどんどん地味になる。

この記事が気に入ったらサポートをしてみませんか?