2019 年 9 月 16 日, 微软 C++ 团队在官方博客发文称:"在 CppCon 2019 大会, 我们 (MSVC 团队) 宣布开源 C ++ 标准库(也可称为 STL)."
据了解, MSVC C++ 标准库开源之后, 新的存储库地址为 https://github.com/microsoft/STL , 其中包含了所有的产品源代码, 新的 CMake 构建系统和更多信息的自述文件. 微软 C++ 团队正在努力将其迁移到 GitHub 中, 目前虽然可以克隆和构建代码, 但是在查看拉取请求之前, 还需要做一些准备工作, 例如添加测试套件等等, 具体的迁移状态, 可以点击 此处 https://github.com/microsoft/STL 查看.
微软 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 ++ https://libcxx.llvm.org/ 相同的许可能够使得库之间共享代码变得更容易. 需要注意的是, 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 的完整性.
来源: http://www.tuicool.com/articles/ieqeyai