プログラミング言語の比較
C と C++: 依然として重要な点
C と C++ は求人サイトでは互換性があるように見えますが、実際には動作が異なります。 C はマシンのポータブルなトランスクリプトです。小さなランタイム、安定した ABI、そしてすべての OS とインタプリタ カーネルが話すために書かれた言語であり、その費用はすべてユーザーの負担となる、狭い標準ライブラリとメモリ規律によって賄われます。 C++ は、RAII、テンプレート、STL などの抽象化を追加します。これにより、コンパイル時間、テンプレート エラー、機能の無秩序な拡大によって代償を払って、どこにも漏れることなく大規模なシステムを構築できます。保持すべき境界線: カーネル、ドライバー、組み込みファームウェア、およびライブラリの境界は C のままです。アプリケーション、デスクトップ ソフトウェア、ゲーム エンジンは C++ になります。
要点
- C の頭にフィットする標準ライブラリは、組み込みにとっては呪いではありません。新しいマイクロコントローラーのツールチェーンは、多くの場合、C のみを最初に話します。
- C++ RAII はバグ クラス全体を置き換えます。リソース取得と組み合わせたデストラクターは、手動のフリー コードをセットアップ専用コードに変えます。
- ABI 境界 C を維持する: スクリプト言語、カーネル、または分散バイナリにプラグインされるすべてのダイナミック ライブラリは、C 形式のインターフェイスをエクスポートします。
- 最新の C++ (11 以降) は別の言語です。スマート ポインタ、移動セマンティクス、および STL は、「クラスを含む C」に関する不満のほとんどに答えます。
- どちらも未定義の動作を共有しており、機能の議論が示すよりもはるかに実際のシステムにおける事後検証を支配しています。
- 安全性を重視したフレーバーが存在するのは、認証にルールが要求されるためです。MISRA C と AUTOSAR C++ はその要求を形にしたものであり、民間伝承ではありません。
- Stroustrup の哲学は、「使用しないものには料金を支払わない」です。どちらの方向でもその主張を拒否する前に対策を講じてください。
- 雇用は完全に分割されています。C++ デスクは金融、ゲーム、HPC に集中しています。組み込み、カーネルスペース、およびシステム ツールの C デスク。あなたの業界に合わせて選択してください。
現場ノート
私たちのショップの C/C++ 境界は、哲学ではなくライブラリによって設定されました。私たちが作成したすべてのプラグイン境界と Python 拡張機能は、最初にフラット C ABI をエクスポートし、そのルールにより 10 件の苦しみが消えました。
よくある質問
C++ は単なる C に追加の機能を追加したものですか?
いいえ: C++ はほとんどの C コードをコンパイルしますが、独自のセマンティクスを持つ別個の言語であり、慣用的な C++ は慣用的な C とは異なるマシン シェイプを生成します。
システム プロジェクトは C++ 内で「C、クラスなし」を使用する必要がありますか?
時々。ただし、C++ ツールチェーンをお持ちの場合は、方言やコミュニティ テストに賭けるのではなく、C でコンパイルして境界を正直に保ちます。
メモリ安全性に関する話はどれが優れていますか?
どちらもネイティブに提供していません。まさにそれが、Rust が独自の比較対象となる理由です。最新の C++ は RAII とサニタイザーで軽減します。 C は規律とツール (valgrind、UBSan) に依存しています。
彼らの間で真の決定を下すものは何でしょうか?
リンクする必要があるエコシステムと雇用できるチーム: ファームウェアとカーネルに隣接するコードは C のままです。複雑なドメインを持つ大規模なアプリケーションは C++ になります。
プログラミング言語の比較 に対するKinetikatechの支援
正直なところ、ほとんどのチームはまず自力で試してからご相談に来ます:システム作業、スクリプト、およびサービスの言語を、本番環境で実際に重要なこと、つまり安全性の保証、実際の速度、誰を雇用できるか、結果として得られるサービスの展開とパッチの適用がどれほど面倒であるかについて比較しました。 私たちのサーバー管理とWebサイト保守サービスは、プログラミング言語の比較を苦い経験で学ぶ必要がないように存在します。セットアップ、監視、そして3時の驚きをすべてお任せください。