编译器即服务:如何构建重构工具

本文关键字:构建 重构 工具 何构建 服务 编译器 | 更新日期: 2023-09-27 17:56:40

来自

Microsoft的Lisa Feigenbaum在这里谈论"编译器即服务"。我已经读过这将使构建重构工具变得更加容易。如何?Mono的CAAS很棒,但如果Microsoft版本相似,我看不出这个特定的用例是如何完成的。

编译器即服务:如何构建重构工具

"编译器即服务"意味着将编译器分解为单独的部分。

而不是有一个大的单片黑盒,其中源代码进入一端,编译的程序集从另一端出来,你会得到许多带有类型输出的小(黑)盒。

因此,例如,您可以将源代码输入到一个框中,并从另一个框中获取抽象语法树(AST)。然后可以操作这棵树,然后再将其馈送到优化器中,从优化器中产生代码的其他表示形式,这些表示可以馈送到编译器中,然后编译器输出可执行代码。

由于我对未来 .NET 的"编译器即服务"部分的确切计划知之甚少,因此以上只是一个疯狂的猜测,但这就是我看到的可能性的方式。

然后重构可以在 AST 上运行,我认为有一种方法可以通过映射和转换从 AST 返回到原始源代码(映射意味着您可以获取 AST 中的一个节点并询问"这个节点对应于源代码的哪一部分",转换意味着"您能否给我这个 AST 现在代表的源代码, 在我修改它之后"。

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

Roslyn CTP 包括构建"代码操作"的演练,这是我们的术语,如果它链接到代码错误,则可以是"快速修复",或者如果它是在上下文中提供的重构。

另请查看 CodeRefactoring 项目模板,如果您安装了 Roslyn CTP,您将在 Visual Studio 中看到该模板。

我公司的(语义设计)提供了一个"编译器即服务":DMS软件再造工具包。

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

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

您可以通过选择/定义所需的输入/输出语言集来使用 DMS,并构建以面向编译器的 DSL 编写的自定义代码(由 DMS 编译以制作您想要的工具!)来调用实现您目的的 DMS 机制的各种位。

DMS已被用于构建语言迁移工具(参见B-2隐形轰炸机任务软件迁移),大规模C++重新架构工具,运行汽车工厂装配单元的代码生成工具,以及许多经典的软件工程工具(测试覆盖率,分析器,克隆检测,智能差分器)。 它是重构工具的自然基础;我们正在研究这些:-}