3

最近,我看了一些关于 C# 异步错误的视频,并与朋友进行了讨论。

说编程语言有错误是否正确?还是只能说编译器有错误?

两者有什么区别?

4

3 回答 3

7

如果由于某种原因(例如,通过 Java 中的声明类型的表达式调用静态方法的能力,IMO)没有很好地设计该语言,则该语言存在设计缺陷。

如果规范相互矛盾或没有表达作者想要表达的内容,则该语言存在错误(IMO)。(例如,我相信 C# 语言规范中围绕类型推断存在一些错误。)

如果编译器未能正确实现规范,则会出现错误。

编辑:我发现了一个规范错误的例子,它比类型推断更简单......

在 C# 4 规范中,第 7.3.1 节指出:“除了赋值运算符,所有二元运算符都是左关联的”。

第 7.13 节指出:“空合并运算符是右结合的”

由于空合并运算符是非赋值二元运算符,因此这是一个矛盾,因此(IMO)是一个错误。(在这个 Stack Overflow 问题中也提到了这一点。)

空合并运算符还提供了我在回答该问题时发现的编译器错误的示例...

于 2012-08-09T11:49:10.477 回答
1

也可以是。语言和编译器都可能有错误。语言错误是无论使用何种编译器都会出现的错误,而编译器错误只会出现在特定的编译器中。

于 2012-08-09T11:49:39.837 回答
1

实际上,错误被认为是规范和实际实现的差异。

所以是的,从这个意义上说,两者都可能有错误。

编程语言是语言的规范。有可能的是,语言规范中存在歧义或不规则,从这个意义上说,您可以说它有错误。

但是,C# 的规范和编译器之间可能存在差异。在这种情况下,错误在编译器内部。

于 2012-08-09T11:51:27.450 回答