虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  听听C++之父怎么看现代C++发展

听听C++之父怎么看现代C++发展

时间:2024-02-10


编者按本文是全球 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 也是一个独特的存在。

2005年举办第一届C++技术大会 我与Bjarne Stroustrup的合影


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++白皮书》。