【问题标题】:What would you do with Compiler as a Service您将如何使用编译器即服务
【发布时间】:2010-11-19 06:07:05
【问题描述】:

看到我们可能会在下一个版本中获得此功能,您认为您可以做哪些事情或者您希望使用此功能做哪些事情?

就个人而言,在代码生成过程中(比如在 MSBuild 任务中),我有时希望我可以深入了解项目中的代码,从而可以选择生成更好的(更多代码)。

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

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

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

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

那么你们都希望编译器即服务能做什么?

【问题讨论】:

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


【解决方案1】:

为了给出(一个)实际答案,LINQPad 的 IntelliSense 将从 CaaS 中受益匪浅。它将允许自动完成功能同时适用于 C# 和 VB(假设 CaaS 也适用于 VB)。它还将使编写很酷的新重构工具变得容易。

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

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

【讨论】:

【解决方案2】:

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

我们尚未宣布任何与“编译器即服务”战略相关的功能或产品的计划或交付车辆。 CaaS 是一种长期前瞻性战略,我们希望在未来如何构建编译器架构。这不是语言特性,而是构建工具的策略。在最近的 PDC 上,Anders 做了一些演示,展示了使用这些工具可以做的事情,但他具体没有说明什么时候会发布类似的东西。您应该很快期待它。我们已经宣布将在下一个版本中发布的唯一功能是 C# 5 的异步等待功能,我们也没有宣布该功能的时间表。

您认为自己能够做的事情或希望使用此功能做的事情是什么?

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

感谢您提供您的场景;它们对我有用。

更新:2011 年 10 月

“编译器即服务”项目的We have just shipped a preview release,又名“Roslyn”。

我们还没有发布舰载载具;它将发布 Visual Studio 11。

【讨论】:

  • Eric,是的,我意识到 CaaS 没有固定的日期或承诺。但这不会也不应该阻止我们思考它的用途。也许您应该在您的博客或其他更正式的地方提出这个问题?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    理查德·坎贝尔: 对。

    Anders Hejlsberg:在 4.0 中,您可以说主题是 Dynamic,而在 3.0 中则是 LINQ。这 5.0 的主题是服务中的编译器,这就是我们的想法

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

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

    【讨论】:

      【解决方案5】:

      我怀疑元编程将通过 CaaS 实现巨大飞跃。我想像 Lisp 宏这样的东西将可以模拟。我也期待有可能为内部 DSL 之类的东西操纵语法,或者模仿其他语言的语法,例如我喜欢 Python 的列表和元组语法。我对 CaaS 的了解还不够,无法说出这一切是否可能,但我可以想象出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        • 2011-10-02
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        相关资源
        最近更新 更多