写点什么

40 岁 C++ 没有中年危机

2020 年 12 月 14 日

40岁C++没有中年危机

强大、灵活、复杂:C++ 的起源可以追溯到 40 年前,但它仍然是当今使用最广泛的编程语言之一。为了找出原因,TechRepublic 采访了 C++ 之父 Bjarne Stroustrup。


C++ 的起源可以追溯到 1979 年,那时编程语言的创造者 Bjarne Stroustrup 第一次开始研究 C++ 这门语言,当时被称为“带类的 C”(C with Classes)。该语言的设计初衷是作为对 C 编程语言的改进,添加了一些基于面向对象编程的功能。


Stroustrup 告诉 TechRepublic 说:“C++ 的成功显然令人吃惊。我认为 C++ 的成功在于其最初的设计目标:高效地使用硬件,再加上强大的抽象机制,并在实际使用反馈的基础上谨慎地改进”。如今,它已经成为最受开发人员欢迎的语言之一,支撑着世界各地的系统和服务。


Stroustrup 解释道:“我想建立一个多计算机系统,它有一个通信系统,既可以是共享内存,也可以是网络。”


“我的重点是软件。我需要编写接近硬件的低级代码,例如内存管理器、进程调度器和设备驱动程序来分离软件组件,以便它们能够在通信方式定义明确的不同计算机上运行。”


在那时,还没有一种语言能够胜任这项任务,因此 Stroustrup 致力于构建一种语言来胜任这项任务。他这样描述这种语言:“带类的 C 应该结合了 C 接近硬件工作的能力和类似 Simula 的抽象和代码组织能力。”


从相当早的时候起,Stroustrup 就认识到,他不能在控制语言方面实行“专制”。尽管早期 C++ 的工作仅仅涉及到他和贝尔实验室(Bell Labs)的几个同事,但当 C++ 语言标准化的努力开始时,这方面的工作才迅速增加到几十人。


如今,C++ 的标准委员会中有大约 400 名成员,以及关注并试图影响该语言发展方向的广大用户社区。


那么,在面对满怀热忱的人们时,该如何使编程语言保持连贯性呢?“这是一个机遇,也是一个巨大的问题,”Stroustrup 说。


“最困难的部分是确定重要内容并保持连贯性。一旦你知道自己想要什么,最终,你就会发现一种很好的技术方法来达到目的。”


记住 Vasa


1998 年,C++ 正式实现了标准化,并成为可靠的主力军。至此,C++ 已成为世界上最常用的编程语言之一,并且一直保持到今天。


Stroustrup 说,正是 13 年后 C++11 的到来,这才为该语言未来的发展奠定了基础。他说:“C++11 使 C++ 感觉像是一种全新的语言。”


“对并发类型的安全支持是必不可少的。C++11 提供了一个密集的网络,其中包含相互支持的功能,如用于编译时计算的(常量表达式)函数、lambdas、自动类型推导以及可变模板。”


尽管 C++11 引入了一些新的特性和功能,使得该语言变得更简单,更快速,更具表现力,但这种语言仍然以难以掌握而著称,Stroustrup 也承认了这一点。


Stroustrup 说:“C++ 确实很复杂,要想学好用好它,需要付出很多努力。不幸的是,人们不只是想要简单,他们还想要某种不可能的东西:一种更简单的语言,拥有更多的特性,并且还不会破坏他们现有的代码。”


Stroustrup 对这个“三难问题”的回应,正如他所说的那样,就是增加一些特性,“让简单的事情变得简单”,举例来说,通过对常见的用例进行泛化或直接支持——同时还要保持兼容性和稳定性。


对于像 C++ 这样的“庞然大物”,或者任何主流编程语言来说,这件事说起来容易做起来难。Stroustrup 解释说,在决定采用哪种新特性还是省去哪种特性方面,达成共识是一个巨大的挑战,需要大量的努力、讨论、时间和耐心。


即便如此,也并不是所有的优秀特性都能被接受。他解释说:“你必须试着只加入那些真正能帮助人们的东西,然后再加入一些这样的东西——因为如果我们接受那些能够帮助人们的特性,语言就会不堪其重而倾覆。”


Stroustrup 指的是Vasa,这是 17 世纪瑞典的一艘大型战舰,由于设计不佳,在处女航时就在斯德哥尔摩港沉没了。


他说:“在国王——最高管理者的坚持下,这艘战舰满载漂亮的雕塑和大炮,这与技术人员的专业判断相悖,造成这艘战舰头重脚轻,结果被一阵风给掀翻了。”


“我反复谈论并撰写关于 Vasa 的文章,来提醒和警告那些渴望通过添加特性来改进 C++ 的人:记住 Vasa!因此到目前为止,C++ 还没有‘倾覆’。”


这么多年来,是什么秘密使 C++ 保持活力?“从小处着手,阐明基本原则,明确长期目标,并根据现实世界中实际使用的反馈进行开发。”


事实上,C++ 在诞生 35 年后,依然保持着强大的生命力。今天的 C++ 远比早期的 C++ 更强大,更具表现力。但即使在今天,最初的设计依然可见。


Stroustrup 说:“40 年前编写的一些简单的程序,到今天还可以运行。”


“对必须工作几十年的语言来说,稳定性是一种重要的特征。实际上,许多早期的想法只有在 C++20 中才能实现。我从一开始就知道,我不可能构建理想的语言,因此我必须以渐进式发展为目标:改进。说真的,我并不相信完美语言的想法:要怎样就算是完美呢?对谁来说(是完美的)?”


他补充说:“为了应对不断变化的世界的挑战,融入新思想,改进是必须的。”


实践中的 C++


截至 2020 年 9 月,C++ 是全球第四大流行的编程语言,仅次于 C、Java 和Python,而且根据最新的 TIOBE 索引来看,它也是增长最快的语言


作为一种通用的编程语言,C++ 以其强大的功能和灵活性而受到开发人员的青睐,这使得它成为操作系统、网络浏览器、搜索引擎(包括 Google 的)、游戏、企业应用等的理想选择。


Stroustrup 总结道:“如果你有一个问题需要高效地利用硬件,同时还需要处理高度复杂性,那么 C++ 显然是一个不错的选择。如果你没有这两种需求的话,那么低级高效的语言或者高级但不高效的语言都是可以的。”


然而,即使 C++ 广泛流行,Stroustrup 也指出,要想准确地确定 C++ 确切的用途和用处,是非常困难的。


“对这两个问题的答案,估计是‘无处不在’,”他说。


“在任何大型系统中,你通常会在低级和性能关键部分发现 C++ 的影子。系统的这类部分往往不会被最终用户看到,甚至不被系统其他部分的开发人员看到,所以我有时把 C++ 称为一切的无形基础。”


同时他也强调了在评估特定编程语言的流行程度时,开发人员调查相对不可靠:“计算程序员的人数既困难又简单。网络调查通常只是测量‘噪音’,也就是说,统计的是人们都在谈论的,而非他们实际使用过的。”


C++ 的未来


如今,Stroustrup 是 Morgan Stanley 的技术研究员。他与国际标准化组织(ISO)合作制定 C++ 标准和 C++ 核心指南的工作,这被认为是他在这家金融巨头公司的角色的一部分,他仍然非常积极地参与 C++ 的开发。


最值得注意的是,Stroustrup 是方向小组的成员,该小组提出并讨论关于编程语言未来的建议。他还关注改进小组,并参与有关新语言特性的讨论。


然而,当涉及到 C++ 的日常运行方面时,Stroustrup 更乐意担任次要角色。“我关注行政工作,但尽量少做。我并不是一个伟大的管理者,”他承认。


在新冠肺炎疫情之前,Stroustrup 会经常四处授课,并通过他的书籍、文章和采访向全世界解释 C++,但和世界其他地方一样,这一工作在 2020 年暂告一段落。


Stroustrup 说:“在我的工作中,我非常依赖于与人们交谈,了解他们的问题,并且倾听我的想法是如何帮助他们的。”


“在这个新冠肺炎疫情期间,我得不到急需的反馈。而虚拟会谈和现实不一样,在讨论设计和想法时,Zoom 会议的效果并不如真正的面对面会议。”


新冠肺炎疫情阻碍了 C++ 编程语言的下两个迭代版本:C++20 和 C++23 的开发。但 Stroustrup 确认,“几乎所有”的C++20 将在 2020 年发布


“除此之外,还有 Unicode、数字、游戏开发和低延迟、工具、人工智能等方面的工作都要去做。”他说。


“当一个特性(语言和库)准备就绪时,我们就会进行发布,并且我们每三年会发布一个修订的标准。已按时发布的有 C++14、C++17 和 C++20。值得一提的是,标准的制定与主要实现者是高度同步的。”


“让 C++ 保持连贯性,并作为一个稳定的开发平台,这一点至关重要。”


作者介绍:


Owen Hughes,ZDNet 和 TechRepublic 驻伦敦记者。


原文链接:


https://www.techrepublic.com/meet-the-team/uk/owen-hughes/

2020 年 12 月 14 日 13:592918
用户头像
刘燕 InfoQ记者

发布了 554 篇内容, 共 174.2 次阅读, 收获喜欢 1055 次。

关注

评论 3 条评论

发布
用户头像
C++ 现在最缺少的就是官方的包管理器。做到类似go module, rust crago的程度,C++ 才有可能再度成为王者,否则堆叠再多的功能也是枉然。
2021 年 01 月 24 日 22:51
回复
用户头像
中年危机肯定有的,每个编译器实现都没有实现完全部特性,实现还慢,这个情况在现代语言里可能是独一份了。没有Rust的安全特性,等微软启用Rust代替C++,很大可能VS就对C++编译器实现投入少或不实现了。
2020 年 12 月 15 日 15:03
回复
目前还没看出这个苗头。C++编译器三巨头在标准支持上咬得很紧, MS的还略胜clang++一点点
2020 年 12 月 15 日 17:21
回复
没有更多了
发现更多内容

OpenResty 部署配置和日志切割

wong

centos log openresty

使用docker-compose部署单机RabbitMQ

Kevin Liao

Docker Docker-compose RabbitMQ

IO多路复用整理

戈坞昂

Linux io

《零基础学 Java》 FAQ 之 15-Java范型做了两件事

臧萌

Java

程序员如何阅读英文资料

brave heart

学习

写给产品经理的信(3):抗压能力需要多强?

夜来妖

生涯规划 产品经理 进阶 压力 工作方式

记:mybatis <foreach> 语法错误

Kevin Liao

mybatis foreach SQL语法 SQLSyntaxErrorException

Android实现人脸识别(人脸检测)初识

sar

android OpenCV renlianshibie

线程的取消和关闭

tison

Java 线程 并发

Git内部原理介绍

戈坞昂

git

一文道尽 Excel 的 Criterion

张利东

Excel

ARTS week 1

锈蠢刀

重学 Java 设计模式:实战建造者模式

小傅哥

设计模式 小傅哥 重构 代码质量 优化代码

【摘】Git-从零单排 01期

卡尔

git 效率工具 工具 开发工具

机器学习-有监督学习入门

第519区

学习 产品经理

在 Go 中使用并发编程 - 第一部分

TuringTuring

golang 并发编程 线程模型

JAVA AGENT 学习

zane

Java

RabbitMQ发送消息步骤&源码

云淡风轻

读书笔记 RabbitMQ

介绍一款文本分析工具

黄大路

数据挖掘 数据分析 nlp

《零基础学 Java》 FAQ 之 13-编程里的两个特殊的值

臧萌

Java

《零基础学 Java》 FAQ 之 14-访问控制符总结

臧萌

Java

回“疫”录(25):被颜色攻占的地方

小天同学

疫情 回忆录 现实纪录 纪实

"第1天,读以太坊白皮书 | 5天掌握以太坊 dApp 开发"

陈东泽 EuryChen

区块链 以太坊 dapp Ethereum blockchain

唯技术论坏处都有啥?如何跳出唯技术论思维?

KAMI

方法论 思考 思维方式 开发 唯技术论

《零基础学 Java》 FAQ 之 16-范型引用的通配符再解

臧萌

Java

IDEA 插件开发实战

李孟

Java 工具 IDEA 插件 idea插件

RestTemplate 配置手册

zane

Spring Boot HTTP

团队快速扩张时期的组织架构演进

Breeze

团队管理 团队协作 团队 团队组织

zabbix实战指南(1)

橙子冰

zabbix

MySQL查询优化一般步骤

HQ数字卡

MySQL sql 查询优化

ARTS - 第一周打卡

陈文昕

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

40岁C++没有中年危机-InfoQ