C++は長年停滞しており、多くの開発者は、この言語がCOBOL、Fortran、VB6と同じ運命をたどると確信していました。しかし実際には、予想に反してC++は灰の中からよみがえり、新しい標準は言語の使われ方を大きく変えています。
多くの有用な機能が追加されてC++が進化したからといって、C++98標準が悪いものだったという意味ではありません。実際、C++98はあらゆる種類のアプリケーションを開発するための多くの有用な機能を提供しました。コードの保守と進化が容易な、適切に設計された古いC++プロジェクトは数多くあります。
たとえば、John Carmackが開発したDoomは、C++98標準の基本的な機構だけを使用した、適切に設計されたC++ゲームです。
Doom 3に関する記事を検索すると、次のような証言が見つかります:
I spent a bit of time going through the Doom3 source code. It’s probably the cleanest and nicest looking code I’ve ever seen.成功の鍵は言語の豊富さではなく、コードの読みやすさ、保守性、進化のしやすさを保つベストプラクティスに従うことでした。
すべての開発者がJohn Carmackのようなスキルを持っているわけではなく、より強力な言語によってアプリケーションのビジネスレイヤーに集中できるよう支援してもらう必要があるのは事実です。しかし、最も強力なプログラミング言語を使っても、悪い慣行を採用すれば、コードは非常に理解しにくく、保守も困難になります。
アセンブリのような複雑なプログラミング言語でも、クリーンなコードを書くことは可能です。Prince of Persiaは、低レベルなプログラミング言語を使用する場合でも、シンプルに保つことが有効であることを証明しています。
Prince of Persiaは、もともとJordan Mechnerによって開発され、1989年にApple II向けに発売されました。ビデオゲームにおけるアニメーションの品質を大きく前進させた作品です。2012年4月17日、Jordan MechnerはPrince of Persiaの ソースコードを公開 しました。そのコードベースを調べると、次のことが分かります:
- 命名が明確で理解しやすい。

- コードが多数の小さなサブルーチンに分割されている。
6502アセンブリ言語は非常に低レベルであり、「分割統治」の原則が適用されて、コードが理解・保守しやすくなっています。実際、コードは多数の小さなサブルーチンに分割されており、読みやすく保守しやすくなっています。以下は、そのソースコードに含まれる小さなサブルーチンの例です:

新しいC++標準の話に戻ると、便利な新機能をすべて使ってクリーンなコードを書くことができます。一方、悪い慣行に従えば、理解・保守が困難なコードになってしまう可能性があります。たとえば、こちらの興味深い 記事 では、autoキーワードの使いすぎについて説明されています。
Bjarne StroustrupとHerb Sutterは、効率的な現代的C++コードを書くための基本的なガイドラインが必要であると認識していました。数年前、彼らは「C++ Core Guidelines」を発表しました。そのGitHubリポジトリに記載されている、ガイドライン導入の背景にある動機は次のとおりです:
This document is a set of guidelines for using C++ well. The aim of this document is to help people to use modern C++ effectively. By "modern C++" we mean C++17, C++14, and C++11. In other words, what would you like your code to look like in 5 years' time, given that you can start now? In 10 years' time?
The guidelines are focused on relatively high-level issues, such as interfaces, resource management, memory management, and concurrency. Such rules affect application architecture and library design. Following the rules will lead to code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast -- you can afford to do things right.
ガイドラインがあることは有用ですが、開発者は一般的に、それらへの準拠を確認するために何時間も手作業でコードレビューを行うことはできません。そのため、これらのチェックにはツールを使用する方が適しています。
使用すべきツールはclang-tidyです。clang-tidyには、一部のCppCoreGuidelinesルールのチェックを含む、興味深い チェックが多数用意されています。
要約すると、これらの新しいC++標準は歓迎すべき進歩です。実現は容易な作業ではなかったはずであり、それを可能にしたC++コミュニティのすべての人々に感謝します。ただし、基本的なベストプラクティスとガイドラインがなければ、コードはすぐに読みにくく、保守不能で、進化させにくいものになる可能性があります。
