开源MSVC的STL

今天 CppCon公司 2019年,我们 MSVC公司 团队)宣布我们将C++标准库(也称为STL)的实现作为开放源代码发布。

null

https://github.com/microsoft/STL 是我们的新存储库,包含所有产品源代码、新的CMake构建系统和包含更多信息的自述文件。正如它所解释的,我们仍在努力迁移到GitHub。虽然您现在可以克隆和构建代码,但在开始检查pull请求之前,我们需要做一些事情(比如添加测试套件)。

问答

问:你为什么这么做?

答:有几个原因。在GitHub中处理STL将允许我们的客户跟踪我们的开发,尝试我们的最新更改,并通过查看它们来帮助改进我们的pull请求。随着C++标准化的加速,随着每年投票的规模越来越大,我们相信接受主要的开源功能是很重要的。例如,C++ 20的时间和格式库是潜在的候选。)我们还希望通过使我们能够实现主要特征的实现来回馈到C++社区。例如,C++ 17的查尔康夫。

问:您使用的是什么许可证,这是否直接影响到VisualStudio的客户?

答:MSVC的STL是在 带LLVM例外的Apache许可证v2.0 ,它是最近由Clang/LLVM/libc++项目创建的。我们选择这个允许的开源许可证是因为它与 伦敦银行++ 将使我们的库之间更容易共享代码。很明显,MSVC的STL并没有与libc++合并;它们仍然是不同的库,支持具有不同数据结构表示的不同平台。但是,如果libc++的维护人员对从MSVC的STL(例如浮点charconv)获取特性实现感兴趣,或者对同时在这两个库中开发新特性进行协作感兴趣,我们就可以提供帮助,而不必担心许可问题。

作为MSVC的STL的客户,您可能想知道这个新许可证是否为您带来了新的义务。微软的立场是,带有LLVM例外的Apache许可证v2.0的文本(特别是LLVM例外的措辞)明确指出,当您使用MSVC的STL编译自己的源代码以生成目标代码或类似的输出(例如静态库、动态库和可执行文件)时,将编译后的产品发送给最终用户时,不需要提供属性。这是我们选择此许可证的另一个原因:避免干扰客户的业务。

(另请注意,为了完整性:MSVC的STL包含源代码 助推。数学 ,根据Boost软件许可证v1.0的条款使用。这是另一个允许的开放源码许可证,它也包含一个明确的目标代码例外。我们派生的源代码在Apache许可证v2.0下分发,但LLVM除外。)

问:你打算在MSVC工具集中打开其他的源代码吗?

A:我们没有这样的计划。我们选择STL是因为它不同于其他MSVC库和编译器。具体来说,STL是快速发展和设计的C++标准化委员会,不像其他MSVC库。由委员会设计是开源的优势!这意味着我们不需要花费任何时间和精力在特性设计评审上。实现策略和策略受到的约束要大得多,因此更容易检查。)STL也相对容易参与,而且有点松散耦合,不像编译器(一般来说,在编译器中,所有东西都与其他东西交互)。

(有一个例外:STL有一些支持库,我们将来可能会开放源代码,但我们现在没有什么要宣布的。)

问:有什么问题吗?

答:一个相当小的问题:我们将花一些时间来检修我们的构建系统、测试基础设施和问题跟踪,这将延迟一些C++ 20库特性的工作。我们刚刚完成了所有C++ 17库的功能,所以这不应该太麻烦。这将使我们能够更高效地在STL上工作,最终更快地达到C++ 20的完整性。

致谢

MSVC团队要感谢 纯粹的器皿 以及P.J.普劳格让这成为可能。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享