2012-08-09 78 views
3

最近,我观看了一些关于C#异步错误的视频,并与朋友进行了讨论。编程语言错误或编译器错误?

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

两者有什么区别?

+1

虽然这可能是一个有趣的讨论,但我不认为这真的是讨论它的地方。这可能取决于错误究竟是什么。但是我认为'编程语言'本身并不是真的有一个bug,因为它只是一个被编译器重写的语法。所以在我看来,编译器在大多数情况下都会有bug。 – 2012-08-09 11:50:55

回答

7

语言有一个设计缺陷如果它不是出于某种原因精心设计(例如调用通过在Java中声明类型的表达式静态方法,IMO的能力)。

该语言有错误(IMO)如果规范是矛盾的或不表达作者意图表达的内容。 (例如,我认为C#语言规范在类型推断方面存在一些缺陷)。

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

编辑:我发现了一个规范的错误是不是类型推断那些简单的例子...

在C#4规范,第7.3.1条规定:“除赋值运算符,所有二元运算符都是左关联的“。

第7.13条规定:“空合并运算符是右结合”

由于空合并运算符是不可转让的二进制运算符,这是一个矛盾,因而(IMO)的错误。 (这是在this Stack Overflow question还指出。)

空合并经营者还提供了一个example of a compiler bug我在回答这个问题,发现...

+1

您能指点我一些关于类型推断中的错误的链接或C#语言规范中的其他错误吗?谢谢 – Attilah 2012-08-09 11:52:19

+0

@Atitilah:我想问这个问题。 – 2012-08-09 11:52:40

+0

@Atitilah:类型推断部分的细节让我头痛。我会看看是否可以疏通一些其他的规格bug。 – 2012-08-09 11:54:51

1

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

1

实际上,一个bug被认为是规范和实际实现中的差异。

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

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

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