现代C++的文艺复兴

广播分享下2022全球C++及系统软件技术大会盛会,不知道的可以提前关注下。

鉴于上海疫情发展,全球C++及系统软件技术大会预计推迟至2022年5月20-21日举办。

2022全球C++及系统软件技术大会 | 官方网站

本文是全球 C++ 及系统软件技术大会联合主席李建忠老师为C++之父最新出版的《现代C++白皮书》中文版撰写的序言。

C++ 作为一门博大精深的语言,其发展演化历程也堪称波澜壮阔。由于教育的原因,很多人对 C++ 还停留在 C++98 之前的版本。殊不知 C++ 在经历从 2006 年之后至今的 15 年“激流勇进式的发展”,在很多人眼里已经近乎变为一个全新的语言。这 15 年间,国际 C++ 标准委员会发布的 4 个版本:C++11/14/17/20 也被统称为“现代 C++”。因为这一时期对 C++ 发展的里程碑作用,我将其称为“现代 C++ 的文艺复兴”。

本书来自于 C++ 之父 Bjarne Stroustrup 为 ACM 国际计算机协会的编程语言历史分会(HOPL)2021 年会撰写的论文。我是在 2020 年全球 C++ 及系统软件技术大会 (Cpp-Summit)前和 Bjarne 沟通大会主题演讲时,听他几次提及本文,捧读后遂一发不可收拾。我当时即判断这个长篇论文显然将是现代 C++ 发展历史上无可替代的、最重要的文献。鉴于其重要性,我迫不及待地想将其引入中国 C++ 社区, 我将这一愿望表达给了 Bjarne。Bjarne 非常慷慨、也非常欣喜地授权我来组织本书的中文翻译工作,并由全球 C++ 及系统软件技术大会以公益的方式在中国 C++ 社区中发行。

本书对现代 C++ 从 2006 年到 2020 年间的发展做了百科全书式的回顾。它并不是典型意义上的教科书,虽然它鞭辟入里地解释了现代 C++ 语言几乎所有的重要特性和功能。更难能可贵的是 Bjarne 花了很多笔墨来交代很多重要特性和功能的来龙去脉,它们的缘起、演化过程中的各种提案、最后的决策考量等——这些看后都让人大呼过瘾,有“知其然、知其所以然”之痛快。

在所有编程语言里,C++ 最为独特、同时也争议极大。一方面,作为一门强大而古老的编程语言,C++ 是当今人类信息基础设施的主要构建者,从航空航天到生物信息,从电信设施到微电子,从互联网基础设施到人工智能,从汽车地铁到万物互联,很难想象离开 C++ 编写的软件这些领域会怎样?在全球 IT 科技巨头中, Google、微软、腾讯等,C++ 也都是当之无愧的首要编程语言。但另一方面,每过一段时间都会有新语言出来号称挑战 C++,引发部分人担心 C++ 的地位会不会被新语言所威胁?特别在对现代 C++ 发展不了解的人眼里,甚至由此产生对 C++ 莫名的危机感。这个问题也经常在 C++ 技术大会上被问起。

Bjarne 对这个问题在书中有着很清晰的回答:C++ 在其近 40 年的发展中取得成功的根本原因是,它填补了编程领域一个重要的“生态位”:需要有效使用硬件和管理高复杂性的应用程序。C++ 的核心精神“直接映射硬件”和“零开销抽象”正是对这一“生态位”恰如其分的支撑。换言之,如果不那么在乎性能开销,那么 C++ 并不是最好的语言选择(Java、Go、Python 等正是填补了这些领域);或者软件规模不大、无需很多抽象手段来管理软件的复杂度,那么 C 语言就足够。但如果性能是软件的关键指标,同时又有越来越大的复杂度,那么 C++ 几乎是独一无二的选择。我们看到 C++ 这些年来的发展,都是紧扣 40 年前 Bjarne 为 C++ 设定的“生态位”与“核心精神”而开展的。只有深刻理解这一点,才能从根本上抓住 C++ 的发展脉络。

全书展示了 Bjarne 带领 C++ 标准委员会对现代 C++ 发展冷静、睿智、而又执着的判断和决策。比如在面向对象大行其道的年代,Bjarne 就冷静地指出“一切皆对象”是一种错误的偏执。面向对象不是 C++ 的所有,而仅仅是其支持的多种编程范式(面向过程、面向对象、泛型编程、函数式编程)中的一种。在很多场合,其他的编程范式要比面向对象更合适。再比如 Bjarne 早在 1994 年就提出需要为泛型编程提供规范化接口这一重要设施:即后来被称为概念(concept)的语言机制。但因为各种原因,概念自 2003 年提出后,遇到各种曲折的协商、争论、实现障碍等诸多羁绊,最终在 Bjarne 呕心沥血的推动下,才正式纳入 C++20 的正式标准。

本书另外一个难能可贵的地方是 Bjarne 对于 C++ 语言发展过程中一些缺失之处也有非常深刻的反思。比如对于标准委员会过于关注语言和库的设计,而忽略“动态链接、构建系统和静态分析等工具设施”,Bjarne 也直言是一大错误。再比如,对于很多专家的各种奇思妙想,Bjarne 甚至在 2018 年写了一篇文章《记住瓦萨号!》来提醒标准委员会,追求大而全的新奇功能,而忽略稳定性对 C++ 是非常危险的,后来为此领导标准委员会“方向组”提出《C++ 程序员的“权利法案”》。Bjarne 还谈到 2006 年是 C++ 发展的最低谷,那时候本来打算推出的 C++0x 标准由于委员会的决策机制和实现问题而变得遥遥无期。另一方面单核处理器的性能停止提高(Herb Sutter 有著名的文章:“The Free Lunch Is Over”),这种环境对C++ 语言的期待其实很高,但 C++ 那时候的发展缓慢,将很多本来是 C++ 的机会拱手让位给了很多其他商业语言。

很多人对于主导 C++ 语言的幕后力量其实不甚了解,Bjarne 在本书中也花费笔墨解释了国际 C++ 标准委员会的机制。这方面,我和 Bjarne 本人也有过几次交流。如果盘点很多编程语言背后的主导力量,大致分以下几类:第一类是公司主导的语言,例如 Go、Swift、C# 等。Bjarne 曾经谈过在 C++ 发展的历史上,有好几家巨头希望说服他加入并将 C++ 纳入公司范畴,但 Bjarne 都清醒地婉拒了。我问为什么?Bjarne 谈到这类语言由于有商业力量把持,有大笔资金投入,所以在一段时间发展看起来非常快,配套支持也非常好。但由于被公司把持,只能为公司的平台战略服务,一旦公司平台战略转向,那么这类语言也会快速衰落。回望编程语言的发展历史,不得不佩服 Bjarne 在这个问题上的睿智和长远眼光。第二类是个人英雄主义+社区主导的语言,比如 Python、PHP 等,这类语言在社区上有非常旺盛的生命力,但 Bjarne 对这种野蛮生长的方式也有着天然的警觉,从长远来看,他担心这种“一盘散沙”的方式会让一个语言错失方向和一些重大功能。Bjarne 早在 1989 年就为 C++ 语言选择了第三种方式,即“基于共识建立的国际标准委员会”,这种机制使得要将一个特性纳入标准,首先要说服绝大多数的人同意。“共识流程”固然使得 C++ 标委会的决策速度缓慢,但它带来的是 C++ 语言惠及所有人的、长期的繁荣和稳定。我个人认为,这种决策机制,也是使得 C++ 在所有编程语言中显得非常独特的一个幕后原因。

最后我要特别谈谈本书的作者,广受尊敬的 C++ 之父 Bjarne Stroustrup。我和Bjarne 相识于 2005 年,那是我们第一次邀请他来上海举办首届 C++ 技术大会并发表主旨演讲。在相识相交的 16 年间,Bjarne 对待技术问题时的睿智和犀利、与人相处时的平易近人,都给我留下极其深刻的印象。如果对比其他编程语言的发明者,你会发现 Bjarne 也是一个独特的存在。

1979 年,在贝尔实验室发明 C++ 时, Bjarne 当时年仅 29 岁,正可谓风华正茂。后来当各路编程语言天才被各大公司重金招至麾下,Bjarne 选择放弃各种公司诱惑,力排众议将 C++ 纳入 ISO 国际标准,成立标准委员会,为 C++ 的百年发展大计殚精竭虑。在 C++ 语言发展的每一个关键节点,从 C++98、C++11、C++14、C++17,一直到今天的 C++20,Bjarne 既亲力亲为、勇于开拓,也广开言路、从谏如流,在一些重大问题上发挥他无与伦比的影响力和智慧。Bjarne 本人对 C++ 在中国的发展也非常热心,接受我的邀请长期担任全球 C++ 及系统软件技术大会的联合主席,不辞辛劳地为中国 C++ 社区播撒他的智慧,关心现代 C++ 在中国的教育,其情殷殷,其心切切。他对本书中文版的发布也非常关心。

本书中文版的发布也要感谢由吴咏炜、杨文波、张云潮等组成的翻译团队(译序中一一列出了他们的名字),他们都是来自中国 C++ 社区的热心贡献者。当然,最要感谢的还是作者本人Bjarne Stroustrup,他不仅是C++的发明者,也是现代C++ 文艺复兴的缔造者。希望本书的智慧能够引领我们一起前进! 

李建忠 

全球 C++ 及系统软件技术大会联合主席 

2021 年 10 月 于上海浦东

原文链接:

现代C++的文艺复兴

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22653.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们公司没销售 - 疫情下企业软件的互联网营销

瘟疫似乎没完没了了,两年前写的文章,现在看起来竟然还有意义,再翻出来改改。 说到没销售,其实有很多商业形态都没有销售人员,运转得都挺好,这没什么可大惊小怪的。 不过,我们是个做企业软件的公…

42岁码农今年找工作记录

作者:胡说 | 编辑:对白的算法屋 https://zhuanlan.zhihu.com/p/461526410 给自己记录一下。32岁的时候还在硅谷大厂做架构师,35岁的时候回国在阿里P8,然后自己任性的去挑战各种奇葩的方向。现在一个大型外企里面做着一些不疼不痒的…

代码随想录算法公开课!

关注代码随想录的录友,基本都是跟着代码随想录一起刷题的。 目前代码随想录的内容是完全开放在代码随想录网站,Github,和Gitee上,同时也出版了《代码随想录》纸质版。 这套刷题顺序和题解帮助了非常多的录友。 而现在我打算将《…

广州搬砖第三年,从一枚小菜鸡到架构师

theme: cyanosis 前言 在广州搬砖三年,我觉得蛮有意思的,真真正正有所成长的,也让我从一名小菜鸡成长为一名架构师,当然中间也遇到很多艰辛,当我回过头去看的时候,这些都是我成长的垫脚石,雕刻…

35岁程序员面试时被嫌弃年纪大,被婉拒了,太扎心了

老张是一名java程序员,35岁,有丰富的开发经验。 最近老张到一家互联网创业公司面试,去面试前,张工在电话里就先和HR表明自己的期望薪资范围,免得最后技术面通过了,而薪资方面达不到要求,浪费彼此…

计算机研究生考426分单科多少,考研初试426分,第一名的成绩,只因为是跨考,却被老师婉拒?...

某个考生,考研初试426分,第一名的成绩,只因为是跨考,却被老师婉拒? 跨专业考研到底又有多难? 最近,有个江苏南京的家长,拿着这张图片来问我,是不是说跨专业考研的学生&am…

一个 SAP 开发工程师的 2022 年终总结:四十不惑

儿时对于一年四季,我最中意的便是冬季,因为冬季意味着即将到来的寒假,可以回到老家,和多日不见的玩伴们痛痛快快玩上一段时间。冬季也总是和春节联系在一起,过年就意味着可以从长辈那拿到一笔压岁钱,把自己…

程序员加班回家,被快递小哥误当小偷

(给程序员的那些事加星标) 综合自:浙视频、微博 【导读】:最近有个和程序员相关的视频火了,一快递小哥(小董)在深夜投快递时遇上一位加班到深夜回家的程序员,由于快递小哥不了解程序…

非对口专业测试人,婉拒猎头、放弃6份高薪offer,你敢信?

从非对口的国贸专业,步入测试之路;从红色旅游小城湘潭,迈入国际化都市上海。“明确方向-及时实践-谨慎选择-踏实扎根-计划未来”。她的每一步,都走得格外坚定有力......话不多说,让我们一起来看看这位小姐姐的成长故事…

【offer来了】成功上岸美团、字节、华为(婉拒)

这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。 今天来分享一位码友的 2022 春招面经,拿到了美团、字节、华为等公司的 offer。面经中涵盖的问题&#xf…

offer来了:成功上岸美团、字节、华为(婉拒)

这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。 今天来分享一位码友的 2022 春招面经,拿到了美团、字节、华为等公司的 offer。面经中涵盖的问题&#xf…

保研夏令营与考研复试联系导师、婉拒导师的语言模板与注意事项

本文介绍在保研夏令营、考研复试等环节进行时,一些常用的联系导师、婉拒导师话术模板。 前期我们用三篇文章讲述了保研夏令营与考研复试时材料准备、面试等的细节要点与模板,大家可以直接点击以下文章进行查看。 文章1:天大、中南、中山、北师…

JavaScript 数值转大写金额

为什么80%的码农都做不了架构师?>>> 此方法的参考位置记不清了,只做了一点儿修改 封装进个人工具库中,支持小数点后 3 位,使用方法参考 uses ;(function(win) {use strict;// 构造var Util function() {this.version…

基于 Docker 搭建 LAMP 环境(一 传统虚拟机形式)

为什么80%的码农都做不了架构师?>>> 1.获取镜像,启动容器 这里使用官方镜像 Ubuntu 16.04,采用加速器 daocloud.io 以解决国内访问 docker-hub 慢的问题,也可以采用阿里云镜像加速器 $ docker pull ubuntu:16.04 $ do…

基于 Docker 搭建 LAMP 环境(二 dockerfile)

为什么80%的码农都做不了架构师?>>> 此种方式将镜像的构建过程通过 Dockerfile 记录下来,并通过构建命令,构建最终镜像,便于对镜像的修改和管理。 但是此种方式,仍热是 Fat Container 形式,产生…

基于 shell 使用 expect 实现 SSH 自动登录远程服务器

为什么80%的码农都做不了架构师?>>> 相关知识点 expect expect 是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。 说白了,expect 就是一套用来实现自动交互功能的软件。 在实际工作中,我们…

使用docker安装lamp

docker search - s 10 lamp #搜索被收藏或使用较多的LAMP镜像,小伙伴们都推荐使用tutum/lamp docker pull tutum / lamp #下载镜像 #使用默认方式启动LAMP docker run - d - p 8080 : 80 - p 3306 : 3306 tutum / lamp #友提,如果报bind:addr…

centos7安装最新版git_https://my.oschina.net/antsky/blog/514586

whoru 发表于 2年前 阅读 5961收藏 10点赞 1评论 1 腾讯云 普惠云计算 0门槛体验>>> 摘要: 介绍yum和源码包安装的具体方式 方式一、yum安装 # yum install git 通过yum方式安装,版本比较旧,CentOS6.5上安装好是1.7.1版。如果想安装最新版或…

vim 基础版配置

为什么80%的码农都做不了架构师?>>> 只包含一些最常用的基础配置,以改进 vim 的初始状态。 使用:拷贝以下内容到 ~/.vimrc 文件中,没有此文件请自行创建。 """""""""&q…

tmux 基本配置

为什么80%的码农都做不了架构师&#xff1f;>>> 将以下内容拷贝到 ~/.tmux.conf 文件中&#xff0c;没有此文件的请自行创建。 ############################################################ # Author: whoru.S.Q <whorusqiang.net> # Link: https://githu…