最新の C++ のガイドラインが必要な理由

この主観的な投稿は、C++、Python、およびソフトウェア開発全般のトレーナーとしての 15 年以上の経験に基づいています。過去数年間、私は除細動器用のソフトウェアを構築するためのソフトウェアとチームを担当していました。これには、デバイスの規制関連業務が含まれていました。除細動器用のソフトウェアを作成することは、患者とオペレーターの死亡または重傷を引き起こす可能性があるため、非常に困難です。

C++ コミュニティとして答えるべき質問があります。

最新の C++ のガイドラインが必要な理由

ここに私の考えがあります。私は3つの事実だけに集中しています。もちろん、3つ以上あります。この 3 つは私の個人的な意見です。

C++ は初心者にとって本質的に複雑です

特に初心者にとって、C++ は本質的に複雑な言語です。 C++ を教えるときは、すべてのユースケースの少なくとも 90% で機能する一連のルールを提供する必要があります。 auto を使用する、中かっこで初期化する、スレッドよりもタスクを優先する、メモリに触れないなどのルールについて考えます。私はますますそれらを教え、トレーニングに取り入れています。したがって、C++ でのベスト プラクティスの規範が必要です。コードの書き方について説明しています。

私は積極的にこれらのルールを探しています。そのため、最新の C++ の書き方に関する 10 のヒントを含むいくつかのプレゼンテーションを行いました。現在、私はドイツの Linux Magazine にヒントに関する 10 部構成の連載を書いています。出発点として、Tim Peters による Zen of Python を使用しました。これらは、Python でコードを記述する方法に関する 20 の格言です。

これらは、Python で慣用的なコードを記述するための 20 の規則です。 20、本当に?実際には、これらは 19 のルールのみです。最後の 1 つはまだありません。

各トレーナーが独自のルールを設定するという考えは好きではありません。良い場合、仕事は冗長です。悪いケースでは、異なるルールや矛盾するルールを教えることもあります。

C++ は、プロのプログラマーにとってますます困難になっています

新機能の膨大な量についてはそれほど心配していません。新しい C++ 標準が追加されるたびに得られます。私は、最新の C++ がサポートする新しい概念についてもっと心配しています。正直なところ、これらはプロの C++ プログラマーにとって最も難しいトピックです。 問題を解決する方法を再考し、場合によっては変更する必要があります .コルーチン、遅延評価、無限データ構造、関数構成、または範囲ライブラリを使用した範囲内包表記を使用したイベント駆動型プログラミングについて考えてみてください。コントラクトベースのプログラミング、リフレクション、または最近の C++ における機能的および数学的な概念について考えてみてください。それだけではありません。コンセプトはテンプレートに革命をもたらします。

私は、この大量の新しい概念が、特にプロのプログラマーを圧倒するだろうと述べました。彼は、古典的なツールで問題を解決することに慣れている人です。彼は高い確率でハンマー ネイル トラップに落ちます。

C++ はセーフティ クリティカルなシステムで非常によく使用されます

最後に、強い懸念があります。組み込みソフトウェアの開発では、MISRA C++ に固執することがよくあります。現在の MISRA C++:2008 ガイドラインは、M によって発行されました。 オトル 業界 S ソフトウェア R 適格性 A 協会。これらは、1998 年の MISRA C ガイドラインに基づいています。元々は自動車業界向けに設計されたもので、航空、軍事、医療分野でセーフティ クリティカルなソフトウェアを実装するためのデファクト スタンダードになりました。 MISRA C として、MISRA C++ は C++ の安全なサブセットのガイドラインを記述しています。 MISRA C++ をご存じない場合は、詳細を以下に示します。

概念上の問題があります。 2008 年からの C++ 標準に従う必要があります。別の言い方をすると、ガイドラインは C++ での最新のソフトウェア開発の最先端ではありません。 3 つの標準 (C++17 を含む) が遅れています。

例を挙げたいと思います:MISRA C++ は演算子のオーバーロードを許可しません。これは、C++ の記述の最先端ではありません。私は自分のセミナーで、auto constexpr dist =4 * 5_m + 10_cm - 3_dm のようなタイプ セーフな算術演算を実装するためのリテラル演算子を教えています。このようなタイプ セーフな算術演算を実装するには、算術演算子とサフィックスのリテラル演算子をオーバーロードする必要があります。ユーザー定義リテラルの詳細は次のとおりです。

実を言うと。 MISRA C++ が現在の C++ 標準と歩調を合わせるとは思えません。私の希望は別のものです。

私の希望

C++ コア ガイドラインが 投稿「Modern C++ とは」で紹介したModern C++ のガイドラインになります。 これは特に、C++ コア ガイドラインが長期的に MISRA C++ に取って代わり、セーフティ クリティカルなシステムにおける C++ の義務的な標準となることを意味します。

もちろん、それは非常に主観的な投稿でした。あなたの考えは何ですか?あなたのコメントが気になります。

次は?

C++ コア ガイドラインの規則は、本として読むことを意図したものではありません。これらは、ツールのターゲットとなることを目的としています。しかし、ツールを使う前に、詳細を知りたいです。したがって、次回の投稿で C++ コア ガイドラインのルールを紹介します。

Patreonサポーターに感謝 :エリック ピーダーソン。