最近、C#非同期のバグに関するビデオをいくつか見て、友達と話し合いました。
プログラミング言語にはバグがあると言うのは正しいですか?それとも、コンパイラにバグがあるとしか言えませんか?
両方の違いは何ですか?
最近、C#非同期のバグに関するビデオをいくつか見て、友達と話し合いました。
プログラミング言語にはバグがあると言うのは正しいですか?それとも、コンパイラにバグがあるとしか言えませんか?
両方の違いは何ですか?
この言語は、何らかの理由で適切に設計されていない場合、設計上の欠陥があります(たとえば、Java、IMOの宣言型の式を介して静的メソッドを呼び出す機能)。
仕様が矛盾している場合、または作成者が表現しようとしていることを表現していない場合、言語にはバグ(IMO)があります。(たとえば、型推論に関するC#言語仕様にはいくつかのバグがあると思います。)
仕様を正しく実装できない場合、コンパイラにはバグがあります。
編集:型推論のものよりもかなり単純な仕様バグの例を見つけました...
C#4仕様のセクション7.3.1には、「代入演算子を除いて、すべての二項演算子は左結合です」と記載されています。
セクション7.13は、「null合体演算子は右結合法則です」と述べています。
null合体演算子は非割り当て二項演算子であるため、これは矛盾であり、したがって(IMO)バグです。(このStack Overflowの質問にも記載されています。)
null合体演算子は、その質問に答えているときに発見したコンパイラのバグの例も示しています...
実際には、バグは仕様と実際の実装の違いと見なされます。
そうです、その意味では、両方にバグがある可能性があります。
プログラミング言語は、言語の仕様です。可能性としては、言語の仕様に曖昧さや不規則性があり、その意味でバグがあると言えます。
ただし、C#の仕様とコンパイラの仕様に違いがある可能性があります。その場合、バグはコンパイラ内にあります。
どちらかである可能性があります。言語とコンパイラの両方にバグがある可能性があります。言語のバグは、使用されているコンパイラに関係なく発生するバグですが、コンパイラのバグは特定のコンパイラ内でのみ発生します。