28

llvm / clangは、優れたC++コードベースと見なされます。なぜC++例外がまったく使用されていないのだろうか?

メモリはプールのようなものを使用して管理され、エラーはCのように戻り値とコードで報告されます。メモリがない場合は例外ではなくエラーを返す新しい配置の演算子newをラップします。

ほとんどの本がC++例外の使用を推奨しているのに、llvm哲学がC ++例外を使用しない理由を知っていますか?

4

6 に答える 6

20

Chris Lattner は最近、LLVM プロジェクトのコーディング標準でこの問題を明らかにしました。

例外と RTTI を使用しないと、実行可能ファイルのサイズが小さくなり、オーバーヘッドが減少します。(ゼロ コストの例外は、スローされない限りオーバーヘッドがないと主張するかもしれません。少なくとも、それらは実際にはコードを小さな基本ブロックに分割し、いくつかの種類のコード モーションを禁止します。)

于 2010-12-01T18:33:47.037 に答える
6

例外セーフなC++コードを書くのは難しい作業です。

例外をオフにすると、コードの実行が高速化され、コードサイズが小さくなります

多分これは関連しています。

于 2010-11-02T21:41:43.027 に答える
5

コンパイラとコードに応じて、例外を使用するプログラムは、例外を無効にして使用しない同等のプログラムよりも高速または低速になる可能性があります。また、例外を使用するものは、より大きくても小さくてもかまいません。

すべてのエラー処理戦略にはいくらかのコストがかかります。LLVM 開発者が状況を考慮し、例外を無効にすることが LLVM にとってより良い決定であることに気付いたと思います。

私の推奨事項、および専門家から最も多く見られた推奨事項は、特定の確固たる理由がない限り、例外を使用して失敗を報告することです。理由がパフォーマンスである場合は、プロファイリングに基づいて選択することをお勧めします。例外を使用するコードと、例外を使用しないがエラーを正しく処理するコードを比較することが重要であることを忘れないでください。

于 2012-06-12T19:41:17.107 に答える
2

これは、別のガイドラインに由来すると思います: assertを自由に使用してください

  • 通常のエラー状態は、エラー コードを使用して処理されます。
  • 例外的なエラー状態は、 を介して処理されassertます。

anassertはさらに難しい例外だと思います: 無視することは絶対にできません ;)

于 2010-11-04T15:57:30.900 に答える
0

例外を回避することはllvmの哲学ではないようです。少なくとも、コーディング標準(http://llvm.org/docs/CodingStandards.html)の例外については何も見つからなかったので、開発者次第です。

なぜ広く使われていないのですか?AFAIK例外サポートはこれまでllvmに実装されていなかったため、llvm自体のためにllvmをコンパイルすることはできませんでした:)。したがって、例外を回避することは歴史的な理由にすぎない可能性があります。

于 2010-11-02T18:46:10.470 に答える
0

ほとんどの本はそれらの使用を推奨していますか? C++ プログラミングは言語の一部であるため、C++ プログラミングに関するほとんどの本で取り上げられていることは知っていますが、エラー コードやその他のエラー処理方法よりも C++ プログラミングを好むと述べた本を見たことはないと思います。実際、ほとんどの本は例外を使用することを暗黙のうちに推奨していないと言えます。

LLVM が優れたコードであり、例外ベースのコードではない限り、2 つの概念はほぼ直交しています。コードは例外の有無にかかわらずきれいに書くことができます。

于 2010-11-02T18:35:22.587 に答える