AtomicObjectチームは、彼らの ウェブサイト で、C++の豊富さの危険性をうまく説明しています。
C++は非常に豊かな言語です。この豊かさは祝福であると同時に呪いでもあります。祝福なのは、その表現力と複数のプログラミングパラダイムのサポートのためです。呪いなのは、この豊かさが複雑さを意味し、習得すべきことが多いためです。C++は共に成長する言語であり、それぞれの経験が新しい機能やより深い理解を教えてくれる言語です。C++の各機能は他の機能と相互作用する可能性があるため、C++を学ぶことは、C++の機能ベクトルとそれ自身のクロス積によって形成される、それほど疎ではない知識の行列を徐々に埋めていくように感じられます。優れたリファレンスなしにこの言語を真剣に使用すべきではありません。
2011年以降、Microsoftは多くの記事でC++の復活を発表し、Herb SutterのようなMicrosoft C++エキスパートは、C++が復活した理由を説明する多くの講演を行い、主にモダンC++の使用を推奨しました。同時期にC++11標準が承認され、私たちはC++を新しい言語として語り始めました。
しかし、2011年の時点で、C++には30年以上の過去がありました。新しいC++が苛立たしいC++の使用法の多くを簡素化し、C++コードを改善する新しいモダンな方法があることを開発者に納得させるのは容易ではありません。
しかし残念ながら、活発なC++コミュニティと著名なエキスパートのすべての努力は十分ではありませんでした。この物語の教訓: 誰かに言語やツールで何かを行う可能性を与えたら、彼らが実際にそれを行っても驚かないこと。。
今日、開発者がクリーンなC++コードを書くのを支援するために、いくつかの安全装置が必要です。
1. 言語のサブセットを使用する保護されたコンパイラモード
標準化委員会とC++コミュニティの素晴らしい努力のすべての恩恵を受けるために、古いC++機能の一部を除外できるコンパイラが必要です。
既存のC++ライブラリを使用する際には大きな制約があるのは事実ですが、C++が非常に長い寿命を持つと確信しているなら、今からモダンC++への移行の準備を始める必要があります。
既存のコンパイラは、言語標準のサブセットのみを受け入れるように設計されていません。しかし、CppDependのパーサーとしてClangを使って作業した経験から、そのモジュール性、実装、強力な診断機能により、貢献者がソースをコンパイルする際にC++標準の古い機能の一部を除外するようコマンドラインから簡単にカスタマイズできるバージョンを開発できることを確認できます。
2. コンパイラの診断と警告
非推奨の使用法を報告するために、より多くの診断と警告が必要です。Clangはすでに非推奨の使用法に関連する多くの興味深い診断を報告しており、将来的には特定の診断が報告された場合にビルドを停止する可能性を提供するかもしれません。
3. ツール
一部のツールは非推奨の使用法を検出するのに役立ち、いくつかのルールに違反した場合にビルドを失敗させるためにビルドプロセスに統合できます。
Clang-Tidyは、多くの欠陥や非推奨の使用法を検出するための強力なツールです。 CppDepend は2017バージョンでこれを統合し、データベースのようにコードをクエリするコードクエリ言語も提供しているため、コーディングルールを簡単にカスタマイズして非推奨の使用法を検出できます。
要するに、C++開発者がモダンC++へ移行するのを支援するための、より良いソリューションが必要です。
