2011-05-16 75 views
9

来自Microsoft的Lisa Feigenbaum会谈here关于“编译器即服务”。我读过这会让构建重构工具变得更容易。怎么样? Mono's CAAS是伟大的,但如果微软的版本是类似的,我不明白这个具体的用例是如何完成的。编译器即服务:如何构建重构工具?

+1

MSFT是一个股票代码。 – 2011-05-16 16:35:39

回答

6

“编译器即服务”是指打破编译成各个片。

而是有一个大的整体黑箱的源代码进入一端,编译组件出来的另,你会得到很多有类型的输出较小(黑色)框。

所以,你可以,例如,节目源代码放入一个盒子,并得到一个抽象语法树(AST)出。然后可以在输入到优化器之前操纵该树,然后再将代码的某些其他表示形式提供给编译器,然后编译器输出可执行代码。

因为我不知道很多关于针对“编译器即服务”未来.NET的一部分确切的计划,以上只是胡乱猜测,但是这就是我看到的可能性。

然后重构可以在AST上运行,我会假设有一种方法可以从AST返回原始源代码,无论是通过映射还是转换(映射意味着您可以在AST中获取节点并询问“该节点对应的源代码的哪一部分”,并且转换意味着“请你给我这个AST现在代表的源代码,在我修改它之后”。)

例如,我会看到JetBrains和DevExpress都为微软制作重构工具,他们不得不评估自己的努力,编写代码读取和挑选重构代码,而不是使用CAAS提供的代码。

+0

谢谢@Martinho,我知道有一个术语我不记得在那里:) – 2011-05-16 16:52:50

1

我公司(语义设计)提供了一个“编译器即服务”:在DMS Software Reengineering Toolkit

DMS是通用相对于计算机(任何正式的)语言。给定一个语言描述(DMS对于C++,C#,Java,PHP,COBOL和许多其他语言都具有强大的版本),DMS可以将源解析为AST,并从AST中重新生成有效源,包括原始注释。

DMS提供各种分析器引擎,包括可配置的属性评估,流程分析,迭代求解器,使用定义分析,本地和全局调用图构造以及全局点到分析。 AST可能会被程序代码(经典编译器树黑客攻击)或源到源转换修改。这些转换可以将AST以一种语言映射到相同的语言(“优化”)或其他语言(“优化/翻译”)。这是非常成熟的基础设施,拥有超过15年的连续工程。

您可以通过选择/定义所需的输入/输出语言集合,并使用面向编译器的DSL编写自定义代码(由DMS进行编译以制作您想要的工具!)来调用DMS机器的各个位那完成你的目的。

DMS已经用于构建语言迁移工具(见B-2 Stealth Bomber mission software migration),大型C++ 重新 -architecting工具,代码生成工具运行的汽车工厂组装电池,和许多经典的软件工程工具(测试覆盖率,剖析,克隆检测,智能差异)。这是重构工具的自然基础;我们正在研究这些: - }

+0

既然你自己_italicized_,我不禁要问:什么是过时的工程?在经过的时间? – sehe 2011-09-06 16:27:03

+0

这句话很糟糕,但是,是15年的工程经验。我将这个词改为“连续” – 2011-09-06 16:53:06

4

Roslyn CTP包含一个用于构建“Code Action”的walkthrough,这是我们的术语,它可以是“快速修复”,如果它与代码错误或者如果上下文提供了重构。

如果您安装了Roslyn CTP,还可以查看您将在Visual Studio中看到的CodeRefactoring项目模板。