Yar*_*veh 9 c# compiler-construction mono compiler-as-a-service roslyn
微软的Lisa Feigenbaum在这里谈到"编译器即服务".我已经读过这将使构建重构工具变得更容易.怎么样?Mono的CAAS很棒,但如果微软版本相似,我看不出这个特定的用例是如何完成的.
"编译器即服务"意味着将编译器分解为单个部分.
而不是有一个大的单片黑盒子,其中源代码进入一端而编译的组件从另一端出来,你会得到许多带有类型输出的较小(黑色)盒子.
例如,您可以将源代码提供到一个框中,然后从另一个框中获取抽象语法树(AST).然后可以在将该树输入优化器之前对其进行操作,其中包含代码的其他表示,可以将其提供给编译器,然后编译器输出可执行代码.
由于我不太了解未来.NET中"编译器即服务"的确切计划,上面只是一个疯狂的猜测,但这就是我看到的可能性.
然后重构可以在AST上运行,我会假设有一种方法可以从AST返回原始源代码,通过映射和转换(映射意味着你可以在AST中获取一个节点并询问"哪个部分源代码这个节点是否对应",转换意味着"在你修改它之后,请你给我这个AST现在代表的源代码."
例如,我会看到JetBrains和DevExpress都为微软制作重构工具,不得不评估自己在编写代码时所做的努力,这些代码用于读取和选择用于重构的代码与使用CAAS提供的代码.