写点什么

微软宣布开源使用二十余年的 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:406347
用户头像

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

关注

评论 3 条评论

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

架构实战营模块三作业

maybe

直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

Java架构没有996

Java mongodb 程序员 后端 JAVA开发

一萌妹子的面试经历,美团四面三小时,成功拿到Java岗offer

白亦杨

Java 编程 程序员 架构师 计算机

iOS底层面试题(上篇)

程序员 面试

教你如何将二进制文件导入到数据库

华为云开发者联盟

数据库 数据 二进制 GaussDB(DWS) 二进制文件

聊聊数据仓库建设

水滴

数据仓库 数仓 数仓架构 主数据管理 标签体系

阿里大佬的「算法界Offer收割机」火爆Github,一夜获上万star

Java 编程 程序员 架构师 计算机

DataPipeline正式成为信创工委会会员单位!致力于为世界级用户提供更优质产品和服务

DataPipeline数见科技

大数据 数据融合 数据管理

Python开发篇——构建虚拟Python开发环境(Conda+Poetry)

吴脑的键客

Python Anaconda

数据,流通在没有船的港口

白洞计划

异常是怎么被处理的?这题的答案不在源码里面。

why技术

面试 JVM 字节码

Optional 的使用会导致性能下降吗

小技术君

性能优化 Optional

HarmonyOS走进西安电子科技大学国际双创周

科技汇

云图说|ROMA演进史:一个ROMA与应用之间不得不说的故事

华为云开发者联盟

华为云 应用 ROMA 云图说 应用使能

《全国移动App第二季度安全研究报告》

InfoQ_11eaedef67e9

网络安全 移动安全 个人信息安全 APP安全

如何包容他人的多样性

escray

学习 极客时间 朱赟的技术管理课 7月日更

花费近一年时间整理的Android核心知识清单,面试篇

欢喜学安卓

android 程序员 面试 移动开发

微软亚研院:如何看待计算机视觉未来的走向?

百度开发者中心

最佳实践 方法论 计算机视觉 语言 & 开发 文化 & 方法

Axie区块链宠物游戏系统开发搭建

薇電13242772558

区块链

应聘高级Android工程师历程感言,你不懂还不学?

欢喜学安卓

android 程序员 面试 移动开发

SpringBoot中时间格式化的5种方法!

王磊

spring springboot

灵活运用分布式锁解决数据重复插入问题

vivo互联网技术

分布式锁 服务器 并发

三十岁,像培养孩子一样培养自己。

南冥

生产上数据库死锁,是该程序员祭天了

skow

Java MySQL 面试

《MySQL是怎样运行的》读后思考

MySQL

架构之:REST和HATEOAS

程序那些事

架构 系统架构 Rest 软件架构

队列Queue:任务间的消息读写,安排起来~

华为云开发者联盟

鸿蒙 数据结构 队列 Queue 消息

英特尔陈伟:AIoT时代的新思维

E科讯

2021 挚物·AIoT产业领袖峰会召开,EMQ 映云科技喜获双料荣誉

EMQ映云科技

百度 华为 工业互联网 AIOT 边云协同

Linux安装与常用命令

IT视界

Linux linux命令 Linux安装

语言特性实战(一)

南冥

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