您将如何使用编译器即服务进行操作

时间:2010-11-19 06:07:05

标签: c# compiler-construction compiler-as-a-service roslyn

看到我们可能会在下一个版本中获得此功能,您认为自己能做什么或者想要使用此功能做些什么?

就个人而言,在代码生成期间(比如在MSBuild任务中),我有时希望能够在项目中查看代码,从而可以选择更好地生成(更多代码)。

例如,如果我有一个部分类,其中部分方法的某个类型的参数被发送,那么在代码生成时我可以使用该信息生成更好的代码。

换句话说,我在编写代码时发布了我的“意图”,我可以将代码生成器用于繁重的工作。

partial void InitCommandForStoredProc(ref DbCommand command, string storedProcName);

在部分方法中给出此信息,我可以生成正确的代码。

那么您希望能够将Compiler作为一项服务做什么?

5 个答案:

答案 0 :(得分:58)

为了给出(一)实际答案,LINQPad的IntelliSense将从CaaS中获益匪浅。它将允许自动完成与C#和VB一起使用(假设CaaS也适用于VB)。它还可以轻松编写很酷的新重构工具。

给我们CaaS,我会让LINQPad成为你可以用它做什么的展示:)

这个功能太好了,不能等到C#6 / VB 12

答案 1 :(得分:19)

  

看到我们可能会在下一个版本中获得此功能

我们尚未宣布为与“编译器即服务”策略相关的任何功能或产品安排或运送车辆。 CaaS是一个长期前瞻性战略,旨在表明我们希望在未来构建编译器架构。它不是语言功能,而是构建工具的策略。在最近的PDC安德斯做了一些可以用这些工具做的事情的演示,但他特别没有说什么时候这样的东西会出货。您应该期待它。我们在下一个版本中宣布的唯一功能是C#5的异步等待功能,我们还没有公布这个时间表。

  

您认为自己能够做的事情或想要使用此功能的事情有哪些?

虽然我个人对这个问题的答案非常感兴趣,但我注意到它不适合StackOverflow问题。这是模糊的,推测性的和主观的,而不是关于特定的技术编码问题。

感谢您提供您的方案;它们对我很有用。

更新:2011年10月

“编译器即服务”项目的

We have just shipped a preview release,又名“Roslyn”。

我们仍然没有宣布一艘船舶;它将发布在Visual Studio 11上。

答案 2 :(得分:7)

我认为这将使面向方面框架的编织过程更加强大。现在,他们几乎都使用了一些hacky技术,这些技术对您的实现提出了要求,例如继承自ContextBoundObject,或者使所有方法都是虚拟的。拥有CaaS会使AOP框架成为.NET中的一流公民,我认为这将是一个巨大的好处。

答案 3 :(得分:3)

在.NET Rocks的第541集中,Anders表示C#5的主题将是编译器即服务。

  

Anders Hejlsberg:我可以告诉你,我们正在做的事情之一就是这个   主题和每个版本都有一个主题。

     

Richard Campbell:对。

     

Anders Hejlsberg:在4.0中,你可以说主题是动态的,而在3.0中它是LINQ。该   5.0的主题是服务的编译器,我们正在考虑它的方式

http://www.dotnetrocks.com/text/0541/index12.html

自2010年4月播出此播客以来,2010年PDC的进一步公告表明主题将不再是编译器即服务,而是Async编程。没有任何公告表明为什么需要更改主题。

答案 4 :(得分:3)

我怀疑元编程将带来CaaS的巨大飞跃。我想像Lisp宏这样的东西可以模仿。我也期待有可能操纵内部DSL的语法,或模仿其他语言的语法,例如:我喜欢Python的列表和元组语法。我不太了解CaaS是否可以说所有这些都是可能的,但我可以想象它。