神話

組み込み環境で働き始めたとき、組み込みプログラミングでの C++ の使用に対して非常に多くの偏見があることに驚きました。そのほとんどは、プログラミング言語 C++ の間違った理解に基づいています。

神話

最初に、私がよく耳にする C++ にまつわる迷信について少し説明しなければなりません。もちろん、この投稿には私の認識が反映されています。例?

  • テンプレートはコードを膨らませます。
  • オブジェクトはヒープ上にある必要があります
  • 例外は高価です。
  • C++ は遅すぎて、必要なメモリが多すぎます。
  • 安全性が重要なシステムでは C++ は危険すぎる
  • C++ でオブジェクト指向をプログラミングする必要があります。
  • C++ はアプリケーションにのみ使用できます。
  • iostream ライブラリが大きすぎます。標準テンプレート ライブラリが遅くなります。

または一言で言えば。

=> C++ は素晴らしいおもちゃですが、私たちは深刻な課題に取り組んでいます.

(偏見) 判断のリストは、経験豊富な C プログラマーによってしばしば述べられる、半分真実であり真実ではないステートメントで部分的に構成されています。私は虚偽の声明だけを参照します。半信半疑のステートメントは、大部分は C++ の正しい使用法による問題であり、C++ のコアとライブラリの実装に関する問題はわずかです。

  • オブジェクトはヒープ上にある必要があります。
    • placement new を使用して、スタックまたは任意の位置にオブジェクトを作成できます。
  • C++ は安全性が重要なシステムでは危険すぎる.
    • もちろん、それは開発者の経験に依存します。しかし、C++ 文字列の代わりに C 文字列を使用する人は誰でも。 C++ 配列の代わりに C 配列を使用します。定数式やテンプレートの代わりにマクロを使用しているため、C++ がセーフティ クリティカルなシステムにあまり適していないと主張することはできません。正直、逆です。 C++ には、セーフティ クリティカルなシステムで提供できるものがたくさんあります。
  • C++ でオブジェクト指向をプログラミングする必要があります。
    • C++ はマルチパラダイム言語です。したがって、オブジェクト指向、構造化、機能的、汎用的、または生成的なスタイルで問題を解決できます。
  • C++ はアプリケーションにのみ使用できます。
    • C++ は、たとえば、消火器、除細動器、および自動車に使用されます。 ARM は、ARM GCC を使用して、gnu ツールチェーンとともに現在の GCC コレクションを維持します。したがって、現在の g++ コンパイラが使用可能です。非常に頻繁に使用されるパッケージは、組み込み世界のデフォルト アーキテクチャであるプロセッサ用に ARM によって維持されています。

半信半疑の理由は?他にも理由があると思います。

  • 古い C++ コンパイラ
    • 知識は、過去 1000 年の古い C++ コンパイラに基づいています。 C++98 標準を実装していますが、最適化の大きな可能性があります。
  • トレーニング不足
    • 多くの組み込みプログラマーは C しか学ばなかった一方で、新しいテクノロジーを試す時間はありません。
  • エキスパート状態の喪失
    • C のエキスパートとして自分の領域を離れ、次の日から C++ の初心者として続けるには、勇気が必要です。
  • C のレガシー コードベース
    • 既存のコード ベースは C であるため、最初に C でバグを修正したり、機能を実装したりすることは当然の決定です。
  • 多くのCエキスパート
    • C の専門家はたくさんいます。彼らは初心者を訓練し、リーダーになっています。
  • モノカルチャーの呪い
    • 私は、埋め込まれた世界を単一文化として認識していることがよくあります。私は自動車分野のコンサルタントとして15年間働き、約10の言語を使用しました。逆に、組み込み領域では 3 つの言語しか使用しませんでした。
  • 標準の圧力
    • 満たさなければならない基準はたくさんあります。新しいテクノロジーを使用する勇気は、標準の圧力に反比例するようです。
  • C++ に関する知識が不十分
    • 多くの開発者は、従来の C++ について十分な知識がなく、最新の C++ についての知識もありません。

たぶん、私はこの投稿で二極化するでしょう.しかし、組み込みの世界で最新の C++ の優れた機能がよりよく知られるようになるのであれば、私は自発的にそれを行いたいと考えています。次の投稿では、神話と事実を比較します。特に、C++ のパフォーマンスに関するテクニカル レポートについて書きます。