C++は比類のないハードウェア制御能力によりシステムプログラミングの礎であり続けていますが、言語の40年にわたる蓄積された複雑さに対して「愛憎」の入り混じった感情を抱く開発者が増えています。この感情は、C++の高レベルな抽象化の利点と、Rustのメモリ安全性や現代的なツールセットの魅力が高まっていることをコミュニティが比較検討する中で、特に顕著になっています。
元の問い
この議論は、C++が「機能の肥大化(feature creep)」で批判を受けている一方で、投稿者自身はC++11以降に導入された厳格な型システムやテンプレート機能を好んでいるというユーザーによって開始されました。
投稿者は、正しいイテレータの記述やrvalue参照の処理の難しさを主な苦痛として強調し、コミュニティに対して依然としてC++のソースコードを書くことを楽しんでいるかどうかを問いかけました。
この問いかけは、専門的な経験、個人のプロジェクト、そして現代的なC++と他の言語を使用する際のトレードオフに関する幅広い個人的なエピソードを呼び起こしました。
C++のパワーと習熟への主張
数人のコメント投稿者は、C++の主な魅力はその圧倒的なパワーにあると主張しました。adev_というハンドルネームの投稿者は、ジェネリックプログラミングやハードウェア制御の面では現在C++に匹敵するものは何もないと述べ、遺産的な問題はあるものの、C++は打ち破ることが難しいレベルのパフォーマンスと生産性を可能にすると示唆しました。
mort96などの他のユーザーは、C++の楽しさはその特異な性質を習熟することから来ると主張しました。彼らは、ムーブセマンティクスやメモリ管理の扱い方を知ることで、不要なアロケーションを回避する「巧妙な」最適化が可能になり、それは他の言語よりも「お節介(nanny-like)」ではない能力であると感じたと述べました。
逆に、CのシンプルさやPythonの高レベルな機能を好むユーザーもいました。adg001というコメント投稿者は、C++の元の構文やオブジェクト指向へのアプローチを一度も楽しんだことはなく、Cの感覚を好むと述べました。
Rustへの移行
議論の中で繰り返し現れたテーマは、C++からRustへの移行でした。gignicoというコメント投稿者は、C++の利点を依然として評価しつつも、Rustに切り替えた後は振り返ることが難しくなったと報告し、特にC++における代数的データ型やパターンマッチングの欠如を大きな欠点として挙げました。
他のコメント投稿者は、C++がパフォーマンスと労力の良いバランスを提供しなくなったため、その魅力を失ったと指摘しました。彼らは、新しいプロジェクトにおいてLLMでさえ、C++よりもRustでコーディングする方が習熟していると示唆しました。
ketzuのような一部の開発者は、ループや関数についてはC++を楽しんでいたものの、テンプレート指定の複雑さが最終的にRustへの移行につながったと述べました。
遺産的な不要な要素と現代的な改善
議論では言語の「不要な要素(cruft)」についても触れられました。chris_jというコメント投稿者は、C++は今日この言語を新しく発明した場合には含まれないであろう40年分の機能を引き継いでいると指摘しましたが、C++11のアップデート以降、言語ははるかに楽しめるようになったと認めました。
現代の開発におけるAIの役割は、予想外の角度として浮上しました。logicchainsというコメント投稿者は、ClaudeのようなAIエージェントがほとんどの作業を行えるためC++を好むと主張し、構造化されたC++は時としてRustのコードよりも速くコンパイルされることがあると述べました。
これは、人間がより厳格な安全性保証を持つ言語へと移行する一方で、C++の膨大な既存コードベースがAI支援によるプログラミングにおいて大きな優位性を提供しているというトレードオフを浮き彫りにしています。
未解決の問いとトレードオフ
この議論により、C++を楽しむことはしばしば経験に左右されることが明らかになりました。専門家は「巧妙な」メモリ管理を行うためにそれを使用できますが、他の人々は構文やテンプレートシステムを「不快」または「理解不能」と感じます。
大きな論争の点は、C++の委員会主導の開発の将来です。gignicoというコメント投稿者は、現在の組織的な課題の中で、パターンマッチングのような長年の提案を委員会が実装できるかについて疑問を表明しました。
結局のところ、C++とRustの選択は、C++の「お節介のない」表現力と、Rustの安全性第一の現代的なツールセットのエコシステムとの間のトレードオフを伴います。
