编程语言错误或编译器错误?

Att*_*lah 3 c# compiler-construction

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

说编程语言有错误是否正确?或者你只能说编译器有bug吗?

两者有什么区别?

Jon*_*eet 7

如果由于某种原因设计不好(例如,通过Java,IMO中的声明类型的表达式调用静态方法的能力),该语言就有一个设计缺陷.

如果规范是矛盾的或者不表达作者想要表达的内容,则该语言有错误(IMO).(例如,我认为C#语言规范中存在一些关于类型推断的错误.)

如果编译器无法正确实现规范,则会出现错误.

编辑:我发现了一个spec bug的例子,它比类型推断更简单...

在C#4规范中,第7.3.1节规定:"除了赋值运算符,所有二元运算符都是左关联的".

第7.13节声明:"空合并运算符是右关联运算符"

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

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