把Clang带到Windows

[原文发表地址]Bringing Clang to Windows

[原文发表时间]2015/5/1 星期五 4:54 PM

正如你可能知道的,现在Visual Studio支持用Clang来编译Android和iOS应用。我们了解用户对跨平台开发的需求,而且我们知道C++为跨平台开发提供了很多便利。Clang在标准的一致性和诊断方面做出了令人印象深刻的进展,这使它迅速成为Windows以外平台的首选C++编译器。为了扩展Clang的优点,让C++开发人员能够编译Windows应用,我们一直在尝试实现Windows上的Clang。关于这个的首次介绍请看//build演讲 Jim Radigan

做这件事情的主要目的是在跨平台开发的时候让你的应用的重要的部分是跨平台C++代码。

如果你已经编译了跨平台应用,你的基础代码可能和上图中的框架类似。这里(1)和(3)是平台特定的代码块,要么是它们调用系统特定API,要么因为它们碰巧用的编程语言特性是仅由某些平台的特定编译器工具集所提供。这通常是这些代码存在的真正原因。然而与此同时,你的应用有相当大一部分逻辑是(或者可能是)符合标准规范的跨平台C++代码写的。就是上图中模块(2)的部分。

设想一下,一个应用的代码架构类似于上图,然后为多种平台编译它:

1. 对于Android和iOS,会用Clang编译整个应用

2. 对于Windows,会用C++编译整个应用

从本质上来讲,即使我们调用模块(2)跨平台代码,我们依旧是针对不同平台上使用不同的编译器来编译它。所以,Clang和C++之间的任何小分歧都将让作为开发人员的你不得不担心这些编译器的差异,或者限制你使用这两个编译器特性的最小子集。这样绝对不理想。

· 你是否可以只使用一个编译器来编译你的跨平台代码而不管你的目标平台是什么?

· 你是否可以用独立的编译器来编译你长年累月积累的所有的平台特定(或者编译器特定)代码?

· 你是否可以有更多上述两种情形之间的互动,在这种情况下,你使用的仍然是卓越的、安全的、调试友好的代码生成引擎,这会让Visual C++更加强大并且可以在Windows(几乎是所有。。。包括Windows!)上生成最复杂的软件?

我们已经完成的工作让这些变成可能。它让你能够用Visual C++编译器来编译(1)和(3),用Clang来编译(2)和生成代码,所有这些仍然会用到Visual C++ 后端(我们叫它C2)。所有这些会让你在Visual Studio中感受到丰富的端到端开发经验。

自从我们把C2和链接器视为Windows平台上ABI的一部分,我们相信我们的后端作为这项技术的核心会让我们非常受益。解决了在各种条件下为所有支持的处理器架构生成代码的问题之后,我们认为增强像.Net以及现在的Clang(针对C++甚至ObjectiveC)这是最佳的选择。

这项任务正在进行中,在未来几个月我们会就此讨论更多。我们一直在期待你关于这个用例和我们方法的反馈。

谢谢你

Visual C++团队