QCon北京|3天沉浸式学习,跳出信息茧房。 了解详情
写点什么

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

  • 2019-09-17
  • 本文字数:1386 字

    阅读完需:约 5 分钟

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

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 的完整性。


原文链接:


https://devblogs.microsoft.com/cppblog/open-sourcing-msvcs-stl/


2019-09-17 11:406356
用户头像

发布了 497 篇内容, 共 329.6 次阅读, 收获喜欢 1925 次。

关注

评论 3 条评论

发布
用户头像
好事情啊,C++社区越来越热闹了。
2019-09-18 08:07
回复
用户头像
其实是想大家帮他review bug
2019-09-17 19:15
回复
也有这层意思,哈哈哈,不过开源总归是件好事情。
2019-09-20 10:44
回复
没有更多了
发现更多内容

搞定MySQL安装难安装贵问题

MySQL从删库到跑路

MySQL 安装 Windows 10

Java Parser应用介绍

maijun

Week8总结

lggl

架构师训练营第 12 周课后练习

叶纪想

极客大学架构师训练营

别费心了,K8s根本甩不掉Docker

亨利笔记

Docker 云原生 k8s Harbor image

架构师训练营第12周课后练习

脸不大

大数据

架构师训练营第十二周作业

月殇

极客大学架构师训练营

架构师训练营第一期第十二周作业

Leo乐

极客大学架构师训练营

架构师训练营 1 期 -- 第十二周作业

曾彪彪

极客大学架构师训练营

使用 Docker 部署 canal 服务,实现 MySQL 数据库 binlog 日志解析

AlwaysBeta

Python MySQL 数据库 Docker Binlog

运维数字化

春如夏花

企业架构 DevOps 数字化运维

作业-第八周

ray-arch

volcano使用必知: 从vcjob创建到pod运行

托内多

Volcano

LeetCode题解:433. 最小基因变化,DFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

第十二周作业

fmouse

组合设计模式实现绘图Pannel

我们新四军不拿群众一针一线

极客时间架构师培训 1 期 - 第 12 周作业

Kaven

week12作业

龙卷风

架构师一期

架构入门感悟之八

笑春风

架构师训练营第十二周总结

月殇

极客大学架构师训练营

极客时间架构师训练营 1 期 - 第 12 周总结

Kaven

天下武功,唯“拆”不破之MECE原则二| 技术人应知的创新思维模型 (6)

Alan

个体成长 技术人应知的创新思维模型 28天写作

架构师训练营 1 期第 12 周:数据应用(一)- 总结

piercebn

极客大学架构师训练营

架构师训练营 -week12-总结

大刘

极客大学架构师训练营

第十二周总结

fmouse

架构师训练营第 1 期 week12 总结

张建亮

极客大学架构师训练营

如何更简单的使用Polly

八苦-瞿昙

随笔杂谈 aop

架构师训练营第一期第十二周总结

Leo乐

极客大学架构师训练营

测开入门篇《环境管理、编码规范、项目结构》

清菡软件测试

测试开发

北海游记:日出、日落与海鲜

北风

摄影 游记 大海

架构师训练营第十二周作业

Shunyi

极客大学架构师训练营

微软宣布开源使用二十余年的C++标准库_语言 & 开发_Stephan T. Lavavej_InfoQ精选文章