为什么我们没有多个编译器检查“兼容”?

时间:2017-08-19 13:19:52

标签: c# .net syntax

你知道C#现在是7.1,有很多新的语法和功能(称为“语法Sugers”)。

但是,在VS2013,VS2012或VS2010等先前版本中,这些版本不能满足。如果您复制源代码并将它们放在那里,显然必定会有很多错误,因为那里的编译器无法识别它们。不同的VS可能有不同类型的编译器。

如果我们想让我们的代码与不同类型的VS中的不同编译器“兼容”,为什么我们不能为我们切换多个编译器(例如:如果我想写一个适合VS2010的代码。我首先将我的编译器切换到VS2010并编写)。那会更好吗?

1 个答案:

答案 0 :(得分:1)

原始问题

  

使用具有较低网络框架和编译器的高级语法   在最新的VS中,它可以成功编译,为什么?

Matt Warren's blog entry是关于此问题的精彩读物,Eric Lippert's也是如此。

  

一路上常见的技术是编译器   从高级语言功能到低级语言的“低级”   功能相同的语言。

简而言之,'较新'的功能会转换为''lowered')到'较旧'的功能 - 因此它们会继续在框架上运行(即使它没有新功能的概念)。< / p>

using的Roslyn源代码是降低的示例(将using转换为try finally的位置):

/// <summary>
/// Rewrite a using statement into a try finally statement.  Two forms are possible:
///   1) using (expr) stmt
///   2) using (C c = expr) stmt
///   
/// The former is handled by RewriteExpressionUsingStatement and the latter is handled by
/// RewriteDeclarationUsingStatement (called in a loop, once for each local declared).
/// </summary>

奖金问题

  

如果我们想制作,为什么我们没有多个编译器可供我们切换   我们的代码与不同类型的中的不同编译器“兼容”    VS(例如:如果我想写一个适合VS2010的代码,我   首先将我的编译器切换到VS2010的编译器并写入)。这会   会更好吗?

只要您使用的是VS 2013或更高版本,就可以轻松完成此操作。从VS 2013开始,C#编译器可用standalone

此外,由于Visual Studio允许您specify the compiler version,因此通常不需要这样做。