Dismiss Notice

Register now to be one of the first members of this SharePoint Community! Click here it just takes seconds!

Dismiss Notice
Welcome Guest from Country Flag

微软C++标准的一致性

Discussion in 'Official Microsoft News' started by DevDivChina, Mar 29, 2017.

Thread Status:
Not open for further replies.
  1. DevDivChina

    DevDivChina Guest

    Blog Posts:
    0
    [原文发表地址] C++ Standards Conformance from Microsoft

    [原文作者] Andrew Pardoe

    [原文发表时间] 2017/3/7

    当我们第一次发布VS2015时,我们已经讨论了关于C++编译器和标准库的一致性的提升在此博客中。我们的团队一直致力于MSVC编译器工具集的提升,为了客户在windows系统上更好的开发程序,而且一开始就完全符合现有的C++标准。这一次的发布将会回顾过去我们对VS做的进展和对下一个版本计划的的期盼

    我们不仅仅要实现C++标准,同时希望帮助去开发它。我们的MSCV团队是开发C++标准的主要角色。除了我们的参与以外还有标准委员会的加入,和来自三个主要技术支持(Coroutines, Modules, and Ranges)在MSVC团队的贡献。我们也支持Ranges开源项目, 这个已经在我们的编译器上实现了。

    创建一个标准的工具集

    在VS2015我们的编译器就开始对一个工程进行了根本性的改变,就是如何剖析语法和分析代码。我们把这个叫做“编译器的更新换代”,这个术语来自2015年9月Jim发表的一篇杰出的博客。我们第一次发布这个更新是在VS2015,但是直到今天我们任然致力于此。对我们来说展现当前编译器的价值、维护与现存代码的兼容性一直是很重要的,还准备在将来完全实现MSVC所有的标准。

    我们编译器一致性的进步展现了更新进度和其他一致性进程的优势。我们已经实现了大多数来自C++11和C++14标准中的功能。但还是有遗留问题,当然,仅仅只有三个功能依然没有实现。我们还没有实现来自于C++98的two-phase name lookup,还没有一个符合标准的预处理机制和未完成的表达式SFINAE。

    这一改进我们对编译器投入很多,但是我们在表达式SFINAE中得到特别巨大的收获,同时也致力于扩展constexpr表达式: 我们现在已经实现了C++14标准中关于constexpr的扩展。我们非常感谢我们客户很热情的告诉我们哪里我们还存在问题。尤其是关于constexpr, 有大约150个关于constexpr的缺陷代码片段来自于你们,它们确实存在于我们编译器中的。所有来自于你们的代码片段在调查中被用作测试用例。它们都已经在VS2017编译通过。

    我们还知道很多来自客户的声音,在IDE界面报告问题,发邮件,推特上@visualc,微软C++的脸书,还有很多其他的渠道。我们已经解决了200到300开发者报告的bug在每一次的更新中。谢谢你们帮助我们发现问题!

    解决一致性bug在我们的工具集中不可避免的需要改变你的源代码。这不是很容易一次就将你所有的代码迁移到编译器新功能中。我们去年介绍了标准版本的转换,这就是让你们选择性的使用来自于最新的C++标准(比如C++17)的功能。而且我们已经在编译器中创建了新的一致性的模式,/permissive-,这个编译选项就只让你选择性的屏蔽掉一些微软自定义的模式。最后一点就是,我们已经开始更新每一次编译器工具集的宏_MSC_VER(编译器版本的宏) 和每一次build的_MSC_FULL_VER宏。这就是让你们在编程的时候测试哪一个版本的编译器去编译您的代码。

    编译器中的一些遗留的bug和非标准行为将会不经意的发生运行时的影响和不正确的行为。在编译器默认的模式下解决这些bug是必要的,为了能让编译器有更好的一致性。当这些改变被引进的时候,我们仔细的跟踪这些变化,而且为了这些改变我们还提供合理的改变前(或者改变后)的代码测试片段。

    有时候,比如最近TF准则中标准关键字的改变, 我们不能控制所需代码的改变。重要的是,当编译器移动到一个新的工具集上时你可以最小化的改变你的代码。

    现行的新功能

    虽然我们已经花费了很多的时间在一致性的问题上,但是我们还没有赶上进度。时间允许的情况下我们一直在实现C++17标准的新功能。我们已经发布了一些草拟的标准功能和一些其它计划中的功能将会发布在下一版本的VS2017。我们的目标是当C++17标准被C++标准委员会通过的的时候去完成C++17标准。我们目前的计划是完成2017年历计划中的标准。

    我们依旧继续工作在完善如标准中提到的库功能. 你或许还记得我们在VS2015.2发布的时候我们已经完成了C++17的标准的一部分在VS2015.2中。我们期待在C++17标准发布之前我们已经实现了C++17的主要功能。

    我们首先会关注MSVC一致性的标准中还没有实现的部分。这里有两大功能任然没有在MSVC中实现: C++98中的two-phase name lookup和C++11中的C++预处理机制。我们依旧重点工作在SFINAE表达式实现上。我们已经开始在新的一致性模式(/permissive-)下着手实现two-phase name lookup功能,而且预计会2017年中期支持two-phase name lookup。同时我们也在计划开始实现依照标准的预处理功能。我们依旧期待实现C++17剩下的所有功能,能像一些显著的技术规范中那样,如Concepts。

    我们一直在维护MSVC工具集的编译规则和标准库的语法。你可以使用这个列表去跟踪我们实现C++17标准的进展。

    准则之外的,我们认为这对于当前的C++编译器是有风险的,我们依旧继续重点关注编译性能、安全、build的吞吐量、诊断和代码分析,这样我们才会成为windows平台上最好的编译工具。

    一致性集成到VS界面

    我们不仅仅提供了一致性到编译器工具集中,而且还做了相同的改变在Visual Studio C++界面。你或许记得我们使用的分离式编译器、EDG,IDE界面的属性。我们很谨慎的在EDG下开启新功能,为了一致性模式和我们的工具集有很好的匹配。

    举个例子,在VS2017编译器中当鼠标悬停在一个constexpr变量上时会显示当前变量的值。

    [​IMG]

    结语

    一如既往,我们欢迎你们的反馈。您可以随时通过邮件发送任何想法到[email protected],也可以通过推特@visualc, 或者在Microsoft Visual Cpp的脸书上反馈。

    如果您在VS2017上遇到了其他问题,也请让我们知道你的问题,可以通过VS界面反馈给我们。我们会在开发者交流论坛跟踪你的反馈。对于建议,也请让我们听到你们的心声。谢谢!

    Continue reading...
     
Thread Status:
Not open for further replies.

Share This Page

LiveZilla Live Chat Software