回答
语言有一个设计缺陷如果它不是出于某种原因精心设计(例如调用通过在Java中声明类型的表达式静态方法,IMO的能力)。
该语言有错误(IMO)如果规范是矛盾的或不表达作者意图表达的内容。 (例如,我认为C#语言规范在类型推断方面存在一些缺陷)。
如果编译器无法正确实现规范,则会出现错误。
编辑:我发现了一个规范的错误是不是类型推断那些简单的例子...
在C#4规范,第7.3.1条规定:“除赋值运算符,所有二元运算符都是左关联的“。
第7.13条规定:“空合并运算符是右结合”
由于空合并运算符是不可转让的二进制运算符,这是一个矛盾,因而(IMO)的错误。 (这是在this Stack Overflow question还指出。)
空合并经营者还提供了一个example of a compiler bug我在回答这个问题,发现...
您能指点我一些关于类型推断中的错误的链接或C#语言规范中的其他错误吗?谢谢 – Attilah 2012-08-09 11:52:19
@Atitilah:我想问这个问题。 – 2012-08-09 11:52:40
@Atitilah:类型推断部分的细节让我头痛。我会看看是否可以疏通一些其他的规格bug。 – 2012-08-09 11:54:51
它可以是。语言和编译器都可能有错误。语言错误是无论使用何种编译器都会出现的错误,因为编译器错误只会出现在特定的编译器中。
实际上,一个bug被认为是规范和实际实现中的差异。
所以是的,从这个意义上说,两者都可能有一个错误。
编程语言是语言的规范。可能的情况是,在语言规范中存在歧义或不规范,从这个意义上讲,你可以说它有一个错误。
但是,C#和编译器的规范可能存在差异。在这种情况下,错误在编译器内部。
- 1. C语言编译错误
- 2. 编译编译器错误编译GCC
- 3. 编译器错误:“‘
- 4. 汇编语言NASM错误
- 5. 汇编语言错误
- 6. 编译错误:语法错误,意外':'
- 7. CUDA编程:编译错误
- 8. oracle语句编译错误
- 9. if语句编译错误
- 10. C语言编程输入错误
- 11. Go编程语言代码错误
- 12. 高级编程语言在Ubuntu 14.04上安装编译器错误
- 13. 错误C1001“内部编译器错误”
- 14. 错误:内部编译器错误java.lang.IncompatibleClassChangeError:
- 15. 编译错误
- 16. 编译错误
- 17. 编译错误
- 18. 编译错误
- 19. 编译错误
- 20. 错误编译
- 21. 编译错误
- 22. 编译错误
- 23. 编译错误
- 24. 编译错误
- 25. 错误编译()
- 26. 编译错误
- 27. 编译错误
- 28. 编译错误
- 29. eclipse编译器或javac中的错误?
- 30. 如何更改Microsoft C#编译器错误消息的语言?
虽然这可能是一个有趣的讨论,但我不认为这真的是讨论它的地方。这可能取决于错误究竟是什么。但是我认为'编程语言'本身并不是真的有一个bug,因为它只是一个被编译器重写的语法。所以在我看来,编译器在大多数情况下都会有bug。 – 2012-08-09 11:50:55