Programming Languages Bug or Compiler Bug?
最近,我看了一些关于c异步错误的视频,并与朋友们进行了讨论。
说编程语言有错误是正确的吗?或者你只能说编译器有一个bug?
两者有什么区别?
如果没有任何理由设计语言(例如,通过在爪哇,IMO中的声明类型的表达式调用静态方法的能力),语言就有设计缺陷。
如果规范是矛盾的,或者没有表达作者想要表达的内容,那么语言就有一个bug(imo)。(例如,我认为在C语言规范中有一些关于类型推断的错误。)
如果编译器未能正确地实现规范,则它有一个bug。
编辑:我发现了一个spec bug的例子,它比类型推断更简单…
在C 4规范第7.3.1节中,指出:"除了赋值运算符,所有二进制运算符都是左相关的"。
第7.13节指出:"空合并运算符是右相关的"
由于空合并运算符是一个非赋值二进制运算符,这是一个矛盾,因此(IMO)是一个错误。(在这个堆栈溢出问题中也注意到了这一点。)
空合并操作符还提供了一个编译器错误的例子,我在回答这个问题时发现了这个错误…
实际上,bug被认为是规范和实际实现的区别。
所以是的,从这个意义上说,两者都可能有缺陷。
编程语言是语言的规范。可能的是,在语言的规范中存在歧义或不规则的地方,从这个意义上来说,你可以说它有缺陷。
但是,C的规范和编译器之间可能存在差异。在这种情况下,bug在编译器内部。
也可以是。语言和编译器都可能有缺陷。语言bug是一个无论使用何种编译器都会出现的bug,其中作为编译器的bug只会出现在特定的编译器中。