ブログ 約3分

C++の生みの親がホワイトハウスの警告に反論。でも火のないところに煙は立たない :)

Share this article
C++の生みの親がホワイトハウスの警告に反論。でも火のないところに煙は立たない :)

3月15日付けの InfoWorldからの問い合わせへの回答で、StroustrupはC++の強みを指摘しました。「これらの政府文書の執筆者たちが、現代のC++の強みと強力な安全性の保証を提供するための努力に気づいていないように見えるのは驚きです」とStroustrupは語りました。 

Stroustrupは、この問題の根底にある重要な事実を強調しました。

安全性に関連する問題は2つあります。数十億行あるC++コードのうち、現代のガイドラインに完全に従っているものはごくわずかであり、安全性のどの側面が重要かという人々の認識も異なっています。

これはC++の重大な問題を浮き彫りにしています。どんなプログラミング言語でも、潜在的に有害な操作の実行を許可している以上、相当数の開発者がそれを誤用する可能性があるのは当然のことです。

そして、悪いコードを書いたことを指摘されると、開発者は自分の行動を正当化するためにさまざまな主張をすることがありますが、それらは正当な理由というより言い訳であることが多いのです。

  1. 厳しい締め切り:「締め切りが厳しかったので急ぐ必要がありました。クリーンなコードを書く時間がなかったのです。」
  2. レガシーコード:「既存のコードベースは汚く、構造も悪いのです。私の変更は既存の混沌に溶け込んでいるだけです。」
  3. スコープクリープ:「プロジェクトを通じて要件が変わり続け、クリーンなコードを維持するのが困難でした。」
  4. 技術的な制約:「私たちが使っているテクノロジースタックはクリーンなコードを書くのに適していません。手持ちのものに制限されているのです。」

確かに、開発者にはC++コードを適切に書く責任があります。しかし、この種のアプローチはC++の将来にとって危険なものになり得ます。数年前、私たちはNokiaの衰退を目の当たりにしました。実際、Nokiaが世界有数の携帯電話メーカーから市場で苦戦するまでの衰退は、いくつかの要因と戦略的な失敗によって特徴づけられる物語です。Nokiaの重大な失敗の一つは、Symbianオペレーティングシステムにあまりにも長く固執した決断でした。Symbianはかつて支配的なプラットフォームでしたが、iOSやAndroidが提供するユーザー体験と競合するのに苦労していました。

C++では、現在のメモリ管理メカニズムにあまりにも長く依存してきました。根本的な解決策は提案されておらず、開発者が適用する必要のあるわずかな改善があるだけです。

C++対.NETの戦略

C#は2000年に主にWindowsマシン向けに開発されました。Miguel de IcazaはLinuxやmacOSでも使えるようにMonoを作成しました。しかし、10年以上にわたってWindowsで標準の.NET Frameworkを主に使用してきた後、言語のポータビリティに関する重大な問題が浮上しました。これに対処するため、MicrosoftはMiguelと協力して、他のオペレーティングシステムでも機能するように設計された.NETのサブセットである.NET Coreを作成しました。

これはポータビリティの問題に対する漸進的な解決策ではなく、一部のレガシーコードに互換性がなかったにもかかわらず、根本的な解決策でした。当時、Miguel de Icazaは.NET Coreを「クラスライブラリの簡素化バージョンに基づく、再設計された.NET 」と表現し、MicrosoftのImmo Landwerthは、.NET Coreは「今後のすべての.NETプラットフォームの基盤」になると説明しました。

最終的に、この解決策は非常にうまくいきました。.NET Coreは広く使われるようになり、大きなポータビリティの問題は解決されました。

安全性の懸念に対してより断固とした対処をするために、C++でも同様のアプローチを取ってみてはどうでしょうか?C++の安全なサブセットを開発し、コンパイラを通じてこのサブセットで作業するオプションを提供してみてはどうでしょうか?

clang --safe

結論

C++が開発者に安全でないメモリ操作への従事を許可し続けるなら、この重大な安全性の懸念は残存し、新しいプロジェクトではRustやGoなどの他の言語が好まれるようになる可能性があります。漸進的な改善だけに頼るのではなく、より根本的な解決策を検討する時期が来ているのかもしれません。確かに、10年以上にわたって安全性の懸念に対処することを目的とした現代の機能がC++で利用可能であるにもかかわらず、言語が安全でないレガシーの慣行を許可し続けているために問題が残存していることが、経験によって実証されています。

Share this article