分享

出身贝尔实验室,风靡世界40余年,它却差点被C 之父放弃

 山峰云绕 2022-08-04 发布于贵州

https://m.toutiao.com/is/2KeprLP/?=出身贝尔实验室 


在6月下旬的WeAreDevelopers世界大会上,C++之父比雅尼·斯特劳斯特鲁普主持了两场关于C++的讲座。在谈及C++为什么演化的时候,他提到:世界一直在变,我们面对的问题也一直在变;我们本身也在发生变化,在不断地成长过程中我们学会了使用不同的方法去处理问题

同时,他重申了自己一直以来坚持的观点:如果有人声称自己创造出了完美的编程语言,那他要么是一个蠢蛋,要么是一个推销员,当然也可能两者都是。

左边是比雅尼·斯特劳斯特鲁普

右边是著名游戏开发者约翰·罗梅罗

这些观点在他的著作《C++语言的设计和演化》一书中就出现过。这是一本专门回答“C++为什么会成为这样子”和“它是如何成为这样子”的书,它并不是单纯讲如何使用C++,也不是只解释C++是一个什么样语言。

听C++之父讲述如何设计编程语言

今天小异就和大家一起来看看C++是如何演化的。

C++是如何设计的

通过历史去了解一个事物是个比较好的方法,就像我们想去了解一个人会去打听他以前做过什么——面对C++也是如此。

当时的处境

比雅尼·斯特劳斯特鲁普在丹麦胡奥斯大学读书的时候,受教授克里斯汀·尼加德(2001年图灵奖获得者)的影响,学到了不少对面向对象编程的知识。同时对教授发明的编程语言Simula特别感兴趣,并用在了自己的博士研究项目当中。

他1979年从剑桥博士毕业后,进入贝尔实验室开始了自己的职业生涯。当时他们负责的一个项目遇到了不少问题,其中最主要的是分析UNIX的内核时产生的:如何才能将UNIX内核分布在局域网内的计算机网络上。

这个问题又牵扯出另外两个问题,一个是怎么分析由内核分布而产生的网络流量,另一个是怎么将内核模块化。

朴实而又荒谬的目标

好在这些问题他在读博的时候就有遇到过类似的,马上着手使用之前的经验开发一套合适的工具。几个月后这个工具Cpre就做出来了,它帮助C增加了类似Simula的类机制——只不过当时它只是能运行起来,而不能应用到实际项目或者试验中去。

在这个过程中他萌发了从做工具到做一个全新语言的想法,经过几个月的开发,Cpre获得了比较大的改进并且先后应用到16个项目当中。而Cpre处理的语言叫做“C with Classes”(有类的C语言)。

当时的目标很朴实,就是希望这个新的语言既能提供Simula的程序组织功能,又能像C一样高效和灵活。这之间其实不涉及什么创新,Simula、C都是现成的。

但这个目标其实又有点荒谬,因为从最开始想法出来到要用到实际项目中解决问题,只有差不多半年的时间。而且高效与灵活也不是那么简单就能实现和保持。

最终他是成功了。

C++是如何演化的

这一小段历史可以帮助我们更好地认识C++,从中看出它的设计目标,是为了解决什么问题,满足什么需求。然后,才能更容易地去理解它的演化。

始于一个人的想法

比雅尼·斯特劳斯特鲁普

就像我们前面说的那样,比雅尼·斯特劳斯特鲁普当时只是为了解决项目中的问题,准备做一个能够解决那些问题的工具而已。只是在开发过程中,他的想法慢慢从制作工具转变成为构建语言。

C with Classes没有成为只支持特定应用的某种C语言变形,关键在于两点:它能够表述多重并发性概念,但是并不存在一种处于主导地位的并发模型。当有需要的时候,直接使用库就可以满足需求,这就不会出现只支持一种特定形式的并发却排斥其他形式的问题。

正是对于这些关键点的坚持,让C with Classes取得了不小的成功,也可以说C++最初是源于比雅尼·斯特劳斯特鲁普一个人的想法。

发于一群人的努力

也仅仅是不小的成功而已,它使用的是预处理技术,也没有太多的新特性,还不能够吸引投资进行商用——比雅尼·斯特劳斯特鲁普一个人开发实在是搞不过来,忙得要死。当时他有两个选择,一个是放弃C with Classes,让自己脱身去做其他事;另一个是在C with Classes的基础上开发一个更好的语言,能服务更大的群体,获得支撑更大开发团队的收益。

经过思考,他决定在C with Classes的基础上继续开发,做进一步的清理和扩充,并且用传统的编译技术去实现。花了不少的时间C++这个名字才被确认下来,贝尔实验室内部的工具开发者们对其表示了极大的兴趣,参与开发实现了不少C++库。

他和Leonie Rose 一起实现了complex复数库,和Jonathan Shopiro一起设计并实现了string库。计算机中心的许多同事都用上了C++,并且为它的开发做出了很大的贡献。之后很长一段时间内,越来越多的开发者参与到其中。

C++的流行离不开这些开发者的贡献。

成就于全世界的开发者

比雅尼·斯特劳斯特鲁普(站在左边)在 1996 年 3 月的 C++ 标准委员会圣克鲁斯会议上

当C++流行起来之后,标准化被提上了日程。经过多年的准备,C++标准委员会成立并在1998年首次发布C++标准,C++98。之后陆续发布C++03、C++11、C++14、C++17和C++20,帮助C++更好地服务全球用户。

C++标准委员会接收来自全球的开发者的提议,然后通过会议最终讨论是否接受那些新特性或者建议。

标准委员会的成员并没有什么太大的共同点,他们有的代表公司,有的只代表个人;有的人是程序员,有的人甚至没有计算机科学背景;有的人是最终用户,有的人只是提供工具。他们是一群来自全球的形形色色的人,最终组成了标准委员会。同时,基本所有的科技巨头都是成员之一。

正是有着全球开发者与公司的共同贡献,C++才能得到很好的发展,最终演化成为今天的样子。

TIOBE称C++有望超越Java

正如比雅尼·斯特劳斯特鲁普所说的那样,世界在变化,我们遇到的问题也在变化,C++也必须跟着得到演化。

其实写书也差不多是这样的情况,《C++语言的设计和演化》一书从准备写,到初稿,再到最终定稿也是发生了许多演化,受到了多方影响。

一本书是如何演化的

“被迫”写书

最开始,雅尼·斯特劳斯特鲁普只是应ACM的邀请写一篇关于C++历史的文章,用于在关于程序设计语言历史的HOLP-2会议上发表。为了让对C++的成长的观点更全面、更公平,他就向一些朋友咨询他们对于C++早期历史的印象。

没想到越来越多的人听到了这个消息,都跑来和他讲那些故事,导致积累的材料越来越多。最终这个消息就越传越离谱,变成了他准备写一本关于C++设计的书。然后有一天他就收到了朋友的邮件,问这本新书哪里可以买到……

比雅尼·斯特劳斯特鲁普没办法,想着误会已经成这样了,材料也收集了一大堆,那就开始写书吧。就这样,他“被迫”从写文章变成了写书。

众口难调

当他把初稿寄出去之后,收到了许多并不统一的评审意见。不少人说:把那些有关哲学和信仰的废话删掉吧,我们更想要真正的技术细节;同时也有不少人表示:这些无聊的细节放在这是干啥的?你应该增加更多的关于设计哲学方面的信息。

为了满足这两种人的需求,他决定增加所有信息!

而关于C++演化的非技术性信息都集中在了第一部分的章节里面,而第二部分主要集中讨论新特征和高级特征方面。也就是说,不管我们喜欢啥,各取所需,都能看到自己想要看的内容。想看技术细节直接跳过4-9章就行,只想看设计哲学思想的,后面的就不用花心思去看了。

语言的比较毫无意义

当时的审稿意见中有不少是让他去比较一下C++和其他语言,但是他拒绝了,并且表示:语言的比较不公平,也没意义。大多数时候比较都会有倾向性,而且都是拿最新语言实验性的优势去比另一种语言多年前的定义,这种极其不公平。

所以在他把《C++语言的设计和演化》一书定义为一本有关C++的书,讨论它的设计,以及促成它演化的各种因素,不会拿C++的特性与其他相似的语言做比较。

而且,每种语言的设计都是为了解决一系列特定问题,在当时的理解决定了最初的设计。之后它必定会成长,满足新的需求,获得新的理解。也就是说所有成功的语言都是逐渐成长起来的,而不是根据某个第一原则设计出来的,原则是基础,并且也会发展变化。

在这种情况下去拿语言做对比,也没意义。

使用C++解决更多的问题

世界在变,我们理解和处理问题的方法也一直在变,不变的是其中的思想。就像C++,它的目标经过这些年的演化,更精确、更具体了,但是本质没有变:服务用户,解决问题。

我们使用C++也是一样,面对不同的问题有着不一样的解决方式,但使用的还是C++。了解它的设计,认识它的演化过程,能够帮助我们更好地在学习、工作中使用C++。

所以,学习和使用C++来帮助自己更好地解决生活工作中的问题吧!

C++ Primer Plus 第6版 中文版

畅销近30年的C++编程入门教材,数百万程序员学习C++首选图书。

版本升级,购书四合一,现在购买包含一本纸质书,一本e读版电子书,一个在线编程联系环境,一份思维导图学习路径。

C++ Primer Plus(第6版)中文版习题解答

《C++ Primer Plus 第6版 中文版》的绝佳伴侣,北师大名师详细剖析所有习题。

能够巩固章节关键知识,拓展自己的解题思路,养成良好的分析问题习惯。

C++ Primer Plus 第6版 书课包

书课一体,全新升级,上交大名师带领读者立体化地学习C++。

书课包的一体化学习内容,包括一本《C++ Primer Plus 第6版》、一门上交大翁教授讲解的视频课程、一本e读版电子书、一个在线实验环境,还有学习交流社群。做到真正的立体化学习,从读到看,再到听,最后到实践练习,多方位地帮助读者从零开始学习C++。

C++沉思录

作为C++标准委员会的成员,作者对C++的研究颇有成就,发表了超过100篇的C++论文。

作者同时也参与了C++的演化和变革,对C++的变化和发展做出了巨大的贡献。

C++ Templates中文版

本书意在通过基本概念、常用技巧和应用实例三个方面下手,帮助读者打下坚实的C++模板知识基础。

作为C++模板编程的完全指南,这本书既适合初学者阅读,也能够为有经验的C++程序员提供一定参考。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多