C#编译器实现了哪些语言扩展?

时间:2009-11-09 18:43:39

标签: c# compiler-construction language-features

在Eric Lippert的blog entry on umpires以及C#编译器和规范中,他发表了这样的声明:

  

(或故意;我们对正式的C#语言实施少量扩展)

这让我感到疑惑,他指的是什么扩展名呢?

2 个答案:

答案 0 :(得分:3)

在他的评论中,他给出了一些答案,(并且他在过去的博客文章中给出了一些答案)

处理常量0,类型引用(http://www.eggheadcafe.com/articles/20030114.asp),条件表达式的类型分析......

但他想说的是,它对最终用户来说并不重要,因为它们是奇怪的角落情况(如“(m =>(m =>(m => ..) 。“case”是帮助编译器所必需的,并且不属于规范。

遵循规范,你应该没事。

(以下下午1:42加入)

所以,我说“按照规范,你应该没事。”这真的是我可以帮助你的所有建议。是的,有些地方编译器偏离了规范。但这些并没有真正记录在案,部分原因是他们不知道该怎么做。他们是否修复了编译器以遵守规范?或者他们是否改变了奇怪行为的规范。这基本上是处理零文章的全部要点:

http://blogs.msdn.com/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspx

这就是这些扩展的重点。他们(大部分)没有证件,因为(大多数情况下)他们是未知的。谁知道,也许有一些非常奇怪的Flags枚举处理并不完全符合规范,但在我们对它们做一些非常奇怪的事情之前我们不会真正了解它。标志枚举已经过测试,并且应该主要遵循规范,所以当我说“遵循规范而你应该没事”时,我的意思就是这样。你可能不会好,因为有些问题。但埃里克正在尽其所能来解决这些问题,并在过渡期间让他们知道。

答案 1 :(得分:2)

不计算错误,最常见的例子是varargs;但COM互操作的大部分是扩展;例如interface constructors

规范中的17.5基本上说“System.Runtime.InteropServices中的任何东西都可以做它想要的东西”。 MSDN记录此here

相关问题