大家好。 我是Peter Michael,是VC++编译器团队的程序经理。 继续介绍Orcas特性,我想谈谈编译器团队对产品的贡献。 六月份的时候,乔纳森 张贴 关于编译团队对奥卡斯的计划。 总而言之,编译器团队正利用这个产品周期为我们的下一代编译器做准备,我们计划从Orcas+1开始向您交付这些编译器的成果。 同时,我们的开发团队中有一小部分人在维护当前的编译器,直到我们可以向新技术进行重大转变的辉煌时刻到来。
在此期间,我们修复了编译器中大约180个bug,其中71个直接来自MSDN connect反馈。 我们继续在VC 8中进行的标准一致性工作(如Andy Rich在他的文章中所描述的) vcblog帖子 )并修复了几个关于将友元声明与模板混合的突出错误。 例如,以下代码
模板 < 班 T> 班 A{
朋友 无效 f级( 常数 答:{}
};
无效 酒吧( 常数 A< 内景 >&(一){
f(a);
}
出现错误(找不到的声明) f )在VC 8中实例化模板时 A 应该做的 f(甲) 一个有效的电话。 在Orcas中,我们已经确保这个和其他朋友模板以及朋友名称查找问题已经得到解决。
除了维护工作之外,我们还抽出时间实现了一个功能,希望您会发现它很有用。 对于我们的客户来说,构建时间总是一个主要的痛点,因此我们尽了最大的努力来提供技术来降低构建大型项目(如 托管增量生成功能 (正式称为asmmeta)Curt Carpenter最近在博客上提到的。 随着多核计算机在开发人员和消费者领域的日益普及,开发这种额外的功能有助于显著缩短构建时间。 为此,我们在编译器中添加了一个新的开关/MP,以在源文件级别启用多进程构建。
/MP的工作原理是利用这样一个事实:翻译单元(源文件及其包含部分)可以彼此独立地编译(直到所有目标文件都需要存在的链接时间)。 因为我们可以独立地编译每个翻译单元,所以我们可以通过生成多个进程来处理一批源文件,从而使编译并行化。 这正是/MP所做的;当您发布/MP时 n 对于编译器,它最多生成 n 处理传递给它的源文件的进程。 编译器足够聪明,只生成所需数量的进程,因此如果在命令行上指定三个源文件并使用/MP4调用编译器,那么编译器只生成3个进程。 默认情况下,/MP接受 n 是机器上有效处理器的数量。
这个开关的历史是相当有趣的引导。 这一转变最初是一个实习生项目早在埃弗雷特(VS2003),但由于技术困难和资源问题,它从来没有看到光明的一天。 我们的一些VC++开发人员使用这个开关来构建编译器,并在双进程机器上看到20-30%的时间差。 最近,我们把这个开关给了一个客户,以帮助他们缩短构建时间,当他们使用/MP和我们当前的项目构建并行化技术时,他们也看到了很大的性能提高,大约是 获得30%%。 在看到这些数据和积极的反馈之后,我们决定,如果我们现在坐下来擦亮开关,在奥卡斯把它弄出来,那将是明智的。
您可以在三月的visualstudioctp中预览/MP和VC++的其他功能集,这些功能集可以作为 虚拟PC映像 或 自解压安装 . 我们希望你喜欢你的建设时间减少!
Peter Michael Osera–VC++编译器团队