その理由は、相互運用性ほどパフォーマンスに関係しているとは思いません。C ++言語はC言語よりも複雑ですが、パフォーマンスの観点からは、どちらの方法でも顕著な違いはないはずです。一部のC ++構造は、同等のCよりも高速です(std::sort
より高速ですqsort
)。おそらく、その逆の良い例があります。
編集:相互運用性の面で...
基本的に、C ++標準では、異なるコンパイラ/バージョンで作成されたバイナリ間の相互運用を容易にするために必要となる可能性のあるもののいくつかは定義されていません。ここで最も注目すべき問題は、バイナリ内のシンボルの命名規則です。Cでは、言語はコード内の各シンボルからバイナリシンボル名への単一のマッピングを定義します。と呼ばれる関数my_function
は、と呼ばれるバイナリにシンボルを作成しますmy_function
。一方、関数のオーバーロードなどの機能のために、C ++関数の名前をマングルする必要があります(バイナリのさまざまな関数シンボルに変換され、引数の型と戻り型をエンコードします)。標準では、マングリングの実行方法は定義されていません。つまり、C ++の同じ関数は、コンパイラーに応じて異なるシンボルにコンパイルできます(extern "C"
C ++の関数のC相互運用性を強制するために使用されている場合を除く)。
結局のところ、スクリプト言語とネイティブコード間のインターフェイスは、内部での実装方法の詳細がC / C ++ /その他のネイティブ言語であっても、とにかくCインターフェイスである必要があります。
(私は意図的に言語の炎上戦争に参加したくありません。C++は本当に強力ですが、Cよりもはるかに複雑な言語であるため少し怖いです。単純に見えるものが影響を与える可能性があります。パフォーマンス)