《架构师》2019年10月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

微软宣布开源使用二十余年的C++标准库

作者:Stephan T. Lavavej 译者:田晓旭

 

2019年9月16日,微软 C++ 团队在官方博客发文称:“在CppCon 2019大会,我们(MSVC 团队)宣布开源 C ++ 标准库(也可称为 STL)。”

据了解,MSVC C++标准库开源之后,新的存储库地址为https://github.com/microsoft/STL,其中包含了所有的产品源代码、新的CMake构建系统和更多信息的自述文件。微软C++团队正在努力将其迁移到GitHub中,目前虽然可以克隆和构建代码,但是在查看拉取请求之前,还需要做一些准备工作,例如添加测试套件等等,具体的迁移状态,可以点击此处查看

微软C++团队在官方博客中,也回答了几个大家都很关心的问题,下面我们就一起来看看吧。

1.为什么要开源C++ STL?

微软C++团队:选择开源主要是因为以下的原因:开源之后,在GitHub中使用STL允许用户跟踪我们的开发,并可尝试使用最新更改,同时还可以通过审查来帮助改进我们的拉取请求;随着C++标准化的加速发展,每年都有很多大型功能都是被大家投票要开发的,我们认为接受开源贡献的主要功能是非常重要的,例如C++ 20的计时和格式库。另外,我们也希望能够通过主要功能的实现来回馈C++社区,例如C++ 13 charconv。

2.STL使用的是什么开源许可?是否会直接影响Visual Studio的客户?

微软C++团队:MSVC STL的开源许可为Apache License v2.0

LLVM Exceptions,是由Clang / LLVM / libc ++项目创建的。

之所以会选择这个较为宽松的开源许可,是因为拥有libc ++相同的许可能够使得库之间共享代码变得更容易。需要注意的是,MSVC STL并没有与libc ++合并,它们仍然是支持具有不同数据结构表示的不同平台的不同库,不过,如果libc ++的维护者有兴趣从MSVC的STL中获取功能实现,或者同时协作开发两个库中的新功能,我们可以提供帮助,不必担心许可。

对于MSVC STL的客户来说,可能会担心开源许可的问题,微软在开源许可中明确指出,客户使用MSVC STL编译自己源代码生成目标代码或类似输出时(例如静态库、动态库、可执行文件等),将已编译的产品发送给最终用户时,无需提供归属信息。这也是我们选择这个开源许可的原因,避免扰乱客户的业务。

(附加说明:MSVC的STL中包含来自Boost的源代码,Math和Ryu可在Boost Software License v1.0下使用。这是另一个开源许可,也包含对象代码的显式异常。我们派生的源代码是在Apache License v2.0 LLVM Exceptions发布的。)

3.是否有打算开源MSVC工具集中的其它工具吗?

微软C++团队:目前没有这样的计划,之所以开源STL,是因为它与其他MSVC库和编译器不同。

具体而言,STL是由C ++标准化委员会快速发展和设计的,与其他MSVC库不同,由委员会设计是开源的一个优势,这意味着我们不需要花费任何时间和精力进行功能设计审查,另外,实施战略和策略受到更多约束,因此更容易审查。STL与编译器不同,相对容易贡献,并且松耦合,能够更好的与其它工具交互。

也许,未来我们可能会开源STL支持库!

4.在开源过程中遇到了哪些难题?

微软C++团队:遇到了一个小问题,因为我们花费了一些时间来检测构建系统、测试基础架构和问题跟踪,因为关于C++ 20库功能的工作有些延迟了。不过,我们刚刚完成了所有C ++ 17库的功能,所以C++ 20库应该不会是问题,我们能够更有效地处理STL,使得其更快地达到C++ 20的完整性。