本記事は別サイトで勝手に連載していた自分の記事をお引越ししてきたものです。
少し情報が古いものもありますが、読み物程度にどうぞ。
C++はWeb以外の業界ではダントツどころか独占的なシェアを持つ、極めて実用的な人気の言語 です。
現代の3大ゲームエンジンである「Unreal Engine」「Unity」「Godot」、またWebアプリという概念を作り出した爆速JavaScriptエンジン「V8」、暗号資産の「Bitcoin」、さらに言えばMicrosoft製OSの「Windows」や、C#の土台である「.NET」本体もC++で書かれています。
C++(40)「ポインタなどとっくに時代遅れなのじゃ」(画像はBing Image Creatorで生成)
また C++は長い歴史を持つ「大規模組み込み系開発」でも圧倒的なシェア を持ちます。例えば自動改札機、空港の電光掲示板や搭乗ゲート、エレベーターやエスカレーター、配達員のウェアラブルデバイス、タクシーの車載器、渋滞監視装置やオービス、大型の医療機器、銀行ATM、コンビニのレジなど、様々なセンサーやハードウェアを制御するビジネス向けの専用システムです。 身の回りで日常的に見かける社会インフラ系システムのほとんどがC++で開発されている と思って良いでしょう。これらは数十年の歴史を持つ、数百万行から数千万行クラスの超巨大システムがひしめく分野です。なおリモコンや炊飯器など非常に小規模なものはC、産業用ロボットはSLIMという専用言語が使用されます。
おかげで、C++は世の中で利用されているプログラム言語の中で5〜6位 と、かなり上位のシェアを保っています。(2024年末のGitHub調べ) ランキングの他の言語はほとんどWeb系がメインですので、その他では圧倒的な存在です。高速性と高い生産性が同時に求められる多くの分野で、C++に太刀打ちできる言語は現在存在しません。
ちなみに C++は「Cとしても使える」上位互換言語 として成長してきた歴史があり、Cでできることはアセンブリを記述できることも含め全てできます。実はこのせいで、C出身のプログラマーの多くが安全で便利なC++の機能をうっかり使い忘れがちで (Cを混在させてもコンパイルが通ってしまう) C++は長年、メモリが関連するセキュリティ上のバグがなかなか無くならない (防止しきれない) 問題 を抱えています。それでC++は圧倒的なシェアや現実社会からの評価の割に、Webではかなりディスられがちな言語です。…まぁ実際にはC++というよりCを使いこなすのが難しいという話なんですけどね。
上記の理由により、C++が利用されている分野ではRustが多くの人の興味をひいています。ただし実際には興味をひいているだけで、シェアが大きく変わるような変化は起きていません。(GithubによるとRustは2024年末もランキング外) 利用されてきた分野の歴史や天文学的な量の既存コードから考えても、C++がRustに追いやられて立場が逆転することはないでしょう。
例えば最初に挙げたWindowsを開発するMicrosoftが「Rustを今後のメイン言語として採用する」と宣言して話題になったのも、過去数十年に渡り、Microsoftがあらゆるソフトウェア商品をC++で開発してきた歴史があるからです。これらの商品ラインには Windows、Office、IIS(Webサーバー)、SQL Server(データベース)などが含まれます。ですから今後MicrosoftがRust以外の言語を一切書かないと仮定しても、RustのコードベースがC++のそれを上回るのは少なくとも数十年後です。かなり気の長い話ですね。
ちなみにC++は、Rust含め様々な言語の母親的存在でありつつ数年おきにアップデートが入る最新の言語の一つで、時代遅れでも劣った言語でもありません。最新バージョンは2023年版(C++23)で、MacのXcodeでも最新版が使えます。C++では自動で伸縮する文字列型や配列はもちろん、配列長を気にしないfor文、Pythonで有名になったmapやfilterなど簡潔な配列処理関数やラムダ式もあります。さらにRustで注目されたスコープに基づくメモリの自動解放や書き込み禁止ポインタ、スマートポインタなどはどれもRustのリリースよりはるか昔から提供しています。しかもC++は強い静的型付け言語にも関わらず、auto型という型宣言省略用の型?まであったりします。
上記の通り、機能がアホみたいに多いので初心者は圧倒されるかもしれませんが、「あの言語のあの機能に似たものはないかな?」と公式ライブラリ(STD/STL)から探してincludeするだけなので、実は特に複雑なことはありません。ちゃんと学べばどんどん便利かつ安全になっていく言語 です。 C++は人気プログラミング言語の中では40年という最長老クラスの存在ですが、最新のトレンドや機能を取り入れてどんどん若返っていく一風変わった存在の言語ですね。
もしC++が将来「Strict C++ Mode」のようにファイル単位などで利用可能な「メモリ安全モード」を実装したら、さらに若返ってRust並に安全な言語になるかもしれません。linterを使えば今でも充分安全ですが、長い歴史を持ちつつ今後の成長も楽しみな言語の1つですね。