QtNetwork の HTTP2 関連のコードを改善しました

5/13 日に Qt Project に送った Remove property usage in QHttp2ProtocolHandler というパッチがようやく本体にマージされました。

変更の詳細は、https://codereview.qt-project.org/c/qt/qtbase/+/261450/32/src/network/access/qhttp2protocolhandler.cpp これをみていただければと思います。

QtNetwork の Network Access Manager の HTTP2 のバックエンドの内部に、QNonContiguousByteDevice や QHttpNetworkReply と言った QObject を継承したクラスに対して 動的プロパティ を利用してパラメーターを保持しているコードがありました。

所謂手抜きコードってやつで、動的プロパティはそういう目的で使うものではないし、パフォーマンス的にも微かですが遅いし、バグの温床になりやすいので、見逃せません。

何より、プロパティ機能なしで Qt を利用した際に、こんなコードでは Qt 自体のビルドが通りません。

というわけで、改善をしたわけですが、レビューのプロセスはすんなり通ったものの、CI の機嫌が最近激しく悪く、正常にマージされるまでに1ヶ月以上苦労しました。

残念ながらこの修正が入っても -no-feature-properties のビルドが正常に通るようにはならないのですが、Qt Lite はこういった地道な努力の上に成り立っているということが伝わってくれたら幸いです。

おすすめ