最近阅读了 C++ 之父 Bjarne Stroustrup 的 HOPL4 论文的中文版,也就是《在拥挤和变化的世界中茁壮成长:C++ 2006–2020》,翻译质量非常不错。

HOPL 是 History of Programming Languages(编程语言历史)的缩写,是 ACM(Association of Computing Machines,国际计算机协会)旗下的一个会议,约每十五年举办一次。Bjarne 的这篇论文是他为 2021 年 HOPL IV 会议准备的论文,也是他的第三篇 HOPL 论文。在这三篇前后间隔近三十年的论文里,Bjarne 记录了 C++ 的完整历史,从 1979 年到 2020 年。这篇 HOPL4 论文尤其重要,因为它涵盖了 C++98 之后的所有 C++ 版本,从 C++11 直到 C++20。

一方面的收获肯定是说对 C++ 这么年来的发展 - 其中特别是最近10年的发展 - 有了一个虽然概要、但仍然比较全面的了解,毕竟咱也是靠 C++ 吃饭的,后续要全面切 C++ 1x 甚至 2x 的时候,多少有点准备。

对标准委员会、主要编译器厂商以及大多数 C++ 的积极支持者来说已是遥远的过去的东西,对许多人来说,仍然是现在——甚至是未来。

另一方面的感慨也是 C++ 作为难得的一个由标准委员会控制的主流编程语言(不知道 Javascript 情况咋样,我猜测在新标准采用度上会比 C++ 好很多),一路发展过来真不容易,随手摘抄几例(完整的总结可以直接阅读 第三章):

后来者居上:有时经过多年的工作之后,提案已接近投票表决,一些一向未曾关注提案的委员此时进入讨论并提供了替代提案。这样的提案可能与原始提案有戏剧性的差异,或者只是一系列小的请求。这往往导致延迟、混乱、甚至有时是争执。这种时候,已经议定的问题又重被激活,而未经尝试(通常也未实现)的新想法和多年工作的成果获得了接近相等的权重。对老提案而言,瑕疵已经被发现过了,相应的技术折中也已经完成。人们很容易想象新事物的好处而忘记意外后果定律:意外后果总是会出现的。新的和相对未经审查的总是看起来比老的更好。这使得较早提案的拥护者变得具有防御性,从而分散了进一步完善“老提案”的精力。在这里“老”可能只是几年,或者就像概念(§6)那样十几年。

最后,虽然初始的提案并没有被真正拒绝(它被 EWG 所批准,但从未进入全体委员会投票的阶段),但由于缺乏新的输入从而无法在相互竞争的提案中间赢得共识,进一步的进展也就停滞不前了。另外,最初的提议者(Bjarne Stroustrup 和 Gabriel Dos Reis)也被更为重要的提案以及他们的“日常工作”分散了精力,比如概念(§6)和模块(§9.3.1)。我认为点运算符的历程是一个典型案例,体现了委员会成员对于 C++ 是什么和它应该发展成什么样(§9.1)缺乏共同的看法。三十年的时间,六个提案,很多次的讨论,大量的设计和实现工作,最终我们却一无所获。

委员会本来可以更好地处理协程提案吗?也许可以吧;C++20 协程与 Niklas Gustafsson 2012 年的提案非常相似。我们探索了替代方案固然很好,但我们真的需要 7 年时间吗?许多有能力的人所做的大量努力是否可以更多协作、更少竞争?我觉得更好的学术知识在早期阶段会有所帮助。毕竟,协程有约 60 年的历史,例如 [Conway 1963]。人们是知道 C++ 和相关语言中的现代方法的,但我们的理解既未共享,也不系统。如果我们当初花上几个月或一年的时间对基本设计选择、实现技术、关键用例和文献进行彻底审核,我怀疑我们早在 2014 年就可以得出 2019 年 2 月得出的结论。之后的几年本可以花在对我们所选择的基本方法进行增量改进和功能添加上。

读着别人家的编程语言设计,感受着自己家的产品开发,却有一些意料之外的共通之处:

阻碍进步的很少是单纯的无知。相反,重大改进的主要障碍是缺乏方向、缺乏开发资源以及害怕破坏现有代码。

最后,摘录一些值得在日常工作中思考和平衡好的点吧:

人们很容易在细节中迷失而忽略了大局。人们很容易关注当前的问题而忘记长期目标(以十年计)。相反,委员会成员是如此专注于通用的原则和遥远的未来,以至于对迫在眉睫的实际问题视而不见。

一个缺乏历史的组织无法对他们的设计内容保持一致性的观点。

ISO C++ 标准委员会既没有一组得到广泛认可的设计标准,也没有一组得到广泛认可的采纳某个特性的标准。有这个问题的存在,并不是因为没有做过这方面的尝试。问题在于,人们发现要在解释上达成一致太难,而要忽视他们所不喜欢的又太容易。

委员会应起到过滤作用,也就是说,把坏提案挡在标准之外,同时,还要提升最后通过的提案的品质。委员会的存在,是要鼓励大家提出建议,并主动提供帮助。

锲而不舍是在委员会成功的关键要素。

跑题一下,十五年后我厂能有幸列入这个名单吗? ;-)

医疗和生物学:医学监测和成像(例如西门子、通用电气、东芝和飞利浦)、断层扫描(例如 CT)、基因组分析、生物信息学、放射肿瘤学(例如 Elekta 和 Varian)。