关注微软 Phoenix 项目

  • James Vastbinder
  • 霍泰稳

2007 年 8 月 23 日

话题:.NETC#C++语言 & 开发架构

Phoenix开 始的时候是 Microsoft Research 部门的一个以构建编译器和代码分析工具的项目。起初是以一个研究开发工具包(RDK,Research Development Kit)面向教育机构发布的,但是现在它正准备发布给大部分社区。回到今年的二月份,微软的一个项目经理 Sarah Derstadt 曾将 Phoenix 声明为一个商业开发工具包(CDK,Commercial Development Kit):

Phoenix 在行业内的使用仍非常限于内部研究领域。在接下来的 6 个月里,Phoenix 团队将把这个 RDK/CDK 转换到我们的 SDK 中。这个 SDK 在我们将来发行 Visual Studio 的新版本的时候,会以一个 Beta 功能出现。

Kang Su 总结了 Phoenix 的简史

几年前,在 Visual C++ 开发编译器后端的时候(和我们今天做的非常类似),逐渐引起大家注意的一个地方是关于重定向后端来为新平台(比如 Itanium、CLR、 POWER、ARM 和后来的 X64 等)创建代码所产生的成本。处理这样的重定向是一个痛苦的过程,VC 团队的一个小团队意识到如果创建一个新的后端框架, 快速重定向到不同的平台,应该是很有价值的。

关于 VC++ 和 MSR(微软研究院)两个团队是如何结合的,Kang Su 说:

当时 MSR 里的一些有才华的人在做着一些关于世界上最高级的二进制重写和静态分析研究方面的工作。在很多组里都有类似的工作,但他们没有共享代码。当 MSR 了解到在 Visual C++ 团队里也有这么一个新的项目的时候,激发了他们的兴趣。最终,Visual C++、MSR 和 CLR 团队决定他们应该联合起来创建一个新的项目,它不仅能够快读重定向后端,还可作为项目迁移和分析的平台。

关于他们联姻后的成功,他总结到:

而且,团队还同意 Phoenix 应该作为微软的所有项目的代码生成平台。

七月份,微软发布了一个关于这个 SDK 的一个预发布版本。Phoenix 提供了许多实现通用中间表示法的构造块:

  • 块分析
  • 内存跟踪
  • 代码覆盖
  • 错误注射
  • 运行时切面和反馈
  • 预编译器
  • 实时编译器
  • 代码优化
    • 整个项目
    • 回退链接(Post-link)
    • 运行时

微软有意将他们目前已有的 25 个代码生成器整合到基于 Phoneix 的单一平台上。Phoenix 将来的震惊之处可能是它将透明性引入到了编译器和代码生成过程。这样,就打破了编译器为黑盒子的传统模型。

查看英文原文:Catching up with Phoenix

.NETC#C++语言 & 开发架构