3

http://dlang.org/expression.html#AssertExpression

についてassert(0):「コンパイルの最適化およびコード生成フェーズは、到達不能なコードであると想定する場合があります。」

同じドキュメントの主張assert(0)は「特殊なケース」ですが、いくつかの理由があります。

assertD コンパイラは、コントラクトなどで作成された一般的なイオンに基づいて最適化できますか?

(あたかもand構造を楽しむには別の理由が必要であるかのように、しかし、それらを書くことで物事がもっとうまくいく可能性があることを知ると、確かにもう少しめまいがするでしょう)in{}out{}

4

2 に答える 2

4

理論的には、はい、実際にはそうではないと思います。特に、dmd -release でオプティマイザーに到達する前にアサートが強制終了されるためです。gdc と ldc についてはよくわかりませんが、コードのこの部分を共有していると思います。

仕様の特別な場合の参照ところで、assert(0) は、何らかの形で -release コンパイル フラグと共にまだ存在するということです。そこでは不正な命令に変換されます (asm {hlt;} - x86 の非カーネル プログラムはそれを使用することが許可されていないため、ヒットするとセグメンテーション違反が発生します)。 -リリースモード。

于 2013-08-12T22:21:48.123 に答える