Clang with Microsoft CodeGen 2016年1月)发布上线

[原文发表地址]Clang with Microsoft CodeGen (January 2016) released [原文发表时间]2016/1/21 2:34 AM 我们已经发布了一个带外的Clang/C2工具集,它包含了一些社区问题的修复和测试中发现的bugs。这是未来即将快速发布众多版本中的一个,来自用户的一些问题反馈会逐渐处理。这里我们只列出相较于之前版本的新变化, 更多关于Clang/C2工具的详细讨论,请参阅VS2015.1的Microsoft CodeGen in VS 2015 1。 这个更新仍然是基于Clang3.7的一些相关优选的社区问题修复,并且将C2.dll的版本修改为19.023413.0。 Microsoft Fixes 修复原子布尔类型std::atomic_flag,使其生成正确的静态代码. 修复了”Static Library for Universal Windows”模板在目标平台为ARM时,使用Clang/C2工具集的问题。 修复了Clang/C2 和Android MDD同时安装,共享的Clang编译器的目标定义文件被重写的问题。 改变了当从工具集Visual studio 2015(v140)切换到Clang/C2的一些默认参数, 使其更好的兼容新工具集(EH开启异常捕捉模式, PCH预定义头文件默认关闭)。 Community Fixes r254346 [PR25661]根据r254323, 恢复部分一部分r217213。 r254323 [MS Compat]在推演模板参数时,调整了之前的调用机制thiscall, 变为新的调用机制cdecl。 r253843 [MS ABI] 允许调用__RTDynamicCast。 r253523 [MS ABI] 让arbitrary entities加入 vftable的排列 r253013 [Sema]…

0

VS 2015 Update 1中C++Modules

[原文发表地址] http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1.aspx [原文发表时间] 2015年12月3日 上午10:21 【这篇文章的作者是Gabriel Dos Reis和Andrew Pardoe】 VC++团队兴奋地预览着VS 2015 Update 1中的新功能: 第一次实验性的实现 C++模块系统,并提出了C++17。在2015年秋天夏威夷科纳的会议上, C++标准改进工作组通过了C++17技术规范的提案。技术规范草案的措辞是由C++标准核心工作组审查的。 Modules经常被作为一种提高编译速度的形式来讨论。但他们所提供的要比提高构建性多的多!C++Modules可以帮助你改进你的代码模块。事实上,模块化是提高编译和生成吞吐量的有效途径。Modules允许你在难以调试的预处理器状态下分离出你的代码。并且他们能使开发工具更容易的来处理你的代码。 Modules允许直接在你的代码中表达你的组件提供描述它所需要的功能的符号依赖,和这个依赖的边界。Modules通过头文件减少了复杂的预处理器voodoo去指定接口的需要。如果你没有其他选择,但不得不使用宏接口,条件编译和生成代码来工作,那这里的预处理器会是你的选择,并且和模块系统一起工作。预处理器是一个强大的工具,它虽然没有结构但它可以做C++Modules不能做的一些事情。预处理器的工作是生成语法分析器需要的预处理符号。其40年来不断创新,可以用来生成各种类型的文本,包括HTML源文件。 如果你想知道更多关于它的原则和其隐含的C++Modules设计选择的基本原理,那么现在停下来并建议你读读:C++模块系统。在2015年的CppCon上Gabriel Dos Reis也大谈C++Modules。这个视频在CppCon YouTube的频道上播放;谈话的幻灯片还可以在IsoCpp GitHub上观看。但是如果你想深入了解此功能提供了什么,请继续阅读! 在Visual C++2015 update1中的实现只是我们在持续不断努力工作的一个预览,所以我们渴望听到你的反馈意见。这是一个让你对C++主要功能产生影响的机会。我们想建立一个适合所有的开发人员与所有的编译器的C++模块系统,所以如果你有任何的反馈意见请告知我们。你可以通过modules@microsoft.com和我们联系。 在Visual C++ 2015update1中的Modules支持 首先,你应该知道模块支持完全由开关控制:/experimental:module。如果不使用此开关,则模块功能根本不会影响你的代码。另外,请注意,对模块的支持现在仅限于命令行工具。大量的IDE功能应该可以使用,但是完整的IDE集成还没有出现。此外,这次预览版本的重点是模块化。随着我们在C++语言功能支持上的提高,我们将在模块支持中优化构建吞吐量方面提高我们的注意力;如果开始没有模块化,它将太简单而不能复制一个特定的构建逻辑,但并没有对基本的问题产生重大的影响。 Modules生成 直截了当的创建并使用一个模块:开发人员仅仅声明一个源文件去包含一个模块的定义,可以写一个module M。然后她通过用export关键字包含每个模块和这些模块每个单独的声明,宣布源文件的那些部分也是模块接口的一部分。 任何顶级的声明都可以被导出,或者任何顶级声明的序列都应该被包含在括号之中。Modules不定义新的命名空间或以任何方式更改名称的查找规则。他们只允许开发人员指定并发布源代码文件的接口。但是,这里真的没有你需要学习的新名称查找规则。 在此示例中,函数f(int)和g(double,int)被当作module M的接口的一部分导出。 // file: foo.ixx module M; export int f(intx) {     return 2 + x; } export double g(doubley, int…

0

VS 2015 Update 1新增的C++核心准则检测器

[原文发表地址]  VS 2015 Update 1新增的C++核心准则检测器 [原文发表时间] 2015/12/03 7:57 PM [这篇文章是由Andrew Pardoe和Neil MacIntosh写的] 早在2015 年9月的CppCon 2015上, Neil宣布我们计划发布新的C++代码分析工具,这将执行C++核心准则里的一些规则。(此次谈话的视频:https://www.youtube.com/watch?v=rKlHvAw1z50 和幻灯片:ISOCpp GitHub repo。) 本周早些时候,我们做了这些代码分析工具的第一个系列,作为一个NuGet 包可以被Visual Studio 2015 Update 1的用户免费安装。目前,这个包包括边界和类型规则的检测器。并且,Herb Sutter在全员会议上(视频在https://www.youtube.com/watch?v=hEx5DNLWGgA)表示在将来的代码分析工具里我们将支持生命期规则的检查器。 这个包被命名为“Microsoft.CppCoreCheck”,链接:http://www.nuget.org/packages/Microsoft.CppCoreCheck. 为了启用新的代码分析工具,仅仅需要在你的工程中安装NuGet包。 NuGet包新增了一个额外的MSBuild目标文件,当你开启代码分析时调用。这个目标文件将CppCoreCheck作为PREfast代码分析工具的一个插件。你可以通过工程属性对话框里的代码分析区域的复选框开启代码分析功能。无论你选择什么样的规则集—只要你开启了代码分析功能,CPPCoreCheck规则将总是运行。 为了保证Visual Studio的用户受益于C++核心准则的实施,这些工具是很重要的第一步。请注意这个需要Visual Studio Update 1,以前的版本是不支持的。 这里有个这个工具可以找到什么类型的问题的例子: void main() {     int arr[10];           // BAD, warning 26494 will be fired     int* p = arr;          // BAD,…

0

VS 2015 Update 1 中带微软代码生成的Clang

[原文发表地址]Clang with Microsoft CodeGen in VS 2015 Update 1 [原文发表时间] 2015/12/4 7:17 PM [这篇博客的作者是Dave Bartolomeo 和Clang/C2 团队的组员] 在开发和维护跨平台C++代码方面,其中一个改变就是针对不同平台的不同编译器的问题。 你写的一些针对Windows平台的代码,用Visual C++编译器可以编译成功,但那时你针对安卓平台的编译就会失败,那是因为Clang的标准规格更为严格,你的代码恰好是按照比较宽容的Visual C++编写的。又或者你针对iOS用了一些新的代码,Clang可以编译成功,但是才发现这些新的C++语言,Visual C++是还无法支持的,你只能想办法重新实现这个方法而不用这个新的语言特性,或者生成一个单独的能够用Visual C++编译的Windows实现方式。 为了能够更加方便的进行跨平台代码的开发,使在Windows 和其他平台更好的工作, 我们为Visual Studio单独发布了一个额外的编译工具集, 叫带微软代码生成的Clang编译器。这个编译器为C语言和C++语言使用开源的Clang解析,还有Visual C++ 编译工具的代码生成器和优化器。像对其他平台一样,你可以为Windows使用相同的Clang解析你的跨平台代码,还能够充分利用Visual C++优化器先进的优化功能。因为针对非Windows平台,新的工具也使用的是一样的Clang解析,你不需要在代码里写满令人讨厌的#ifdefs,只需要为不同的编译器说明下即可。同时你的代码中可以使用那些还没有被Visual C++ 编译器所支持的语言特性, 包括C99 复杂类型和C++ 14 扩展的constexpr的支持。因为基于Clang的编译器会长生和Visual C++编译器一样格式的调试的信息,所以你能感受到同样很棒的Visual Studio 调试器体验。 用新的编译工具所编译的代码能够和Visual C++ 2015 C和C++编译器所编译的其他代码相链接。通常,你可以使用带微软代码生成的Clang编译器来编译跨平台代码,用普通的Visual C++ 工具集来编译特定的Windows代码(例如,你的UI)。 请注意,带微软代码生成的Clang编译器现在是一个预览功能。 我们知道在很多方面它还不够完善,仍存在一些漏洞。我们希望你可以尝试使用这个新功能,明白它如在应用在你的代码工作上,并给我们反馈。 安装 在Visual Studio 2015 Update 1中,Visual Studio安装时开始进行功能选择时的UI界面,你会看到在“跨平台和手机开发\Visual…

0