2020 年的 C++
我们来查看一下在二十一世纪的第二个十年里,C++ 如何被使用,以及用来做什么:
C++ 的使用领域绝大部分与 2006 年相同(§2.3)。虽然有一些新的领域,但在大多数情况下,我们看到的 C++ 还是在相同或类似的领域中被更加广泛和深入地使用。C++ 没有突然成为一种面向 Web 应用开发的语言,虽然即使在那种场景下仍有人用 C++ [Obiltschnig et al. 2005]。对于大多数程序员来说,C++ 依然是某种隐没在后台的东西,稳定、可靠、可移植、高性能。最终用户是看不见 C++ 的。
编程风格则有更加巨大的变化。比起 C++98,C++11 是门好得多的语言。它更易于使用,表达能力更强,性能还更高。2020 年发布的 C++20 则在 C++11 的基础上做出了类似程度的改进。
2020年,C++的应用领域非常广泛,其在多个行业和技术领域中都发挥着重要的作用。以下是一些具体的应用实例:
- 爱立信、华为和西门子:
这些电信行业的巨头在其产品中大量使用C++。例如,它们的电信设备、网络基础设施和解决方案,往往需要处理大量的数据,执行复杂的计算任务,C++的高效性和底层控制能力使其成为理想的选择。 - SpaceX:作为一家领先的航天公司,SpaceX在其火箭和航天器的开发中可能使用了C++。飞行软件和其他关键系统需要高效、稳定的编程语言,而C++正是满足这些需求的理想选择。
- TensorFlow:虽然TensorFlow主要使用Python作为前端语言,但其底层实现可能涉及C++。C++的高效性和控制能力使得它在构建和优化机器学习库和框架时非常有用。TensorFlow是一个开源的机器学习库,用于各种机器学习和深度学习应用。
- LLVM:LLVM是一个编译器基础设施项目,其本身就是用C++编写的。LLVM提供了一套完整的工具链,用于开发编译器前端和后端,支持多种编程语言和平台。
- 嵌入式系统:C++在嵌入式系统领域也有广泛的应用。由于嵌入式系统通常需要高效、紧凑的代码,以及直接访问硬件的能力,C++的这些特性使其成为嵌入式系统开发的理想选择。
- 元编程:C++支持元编程,即在编译时执行计算和操作。这使得程序员能够在编译阶段生成和优化代码,进一步提高程序的性能和效率。
- 编码指南和静态分析:在C++项目中,编码指南用于确保代码的一致性和可读性,而静态分析则用于在编译阶段检测代码中的错误和潜在问题。这些工具和技术都有助于提高代码的质量和可维护性。
总的来说,2020年的C++在各个领域都发挥着重要的作用,无论是电信、航天、机器学习还是嵌入式系统等领域,C++都以其高效、灵活和强大的特性得到了广泛的应用。
10.1
C++ 用来做什么?
大致而言,C++ 可谓无处不在、无所不用。但是,大象无形,大多数 C++ 的使用并不可见,被深深隐藏在重要系统的基础设施内部。
C++ 被用在哪里,是如何被使用的,没人能够完整了解。2015 年,捷克公司 JetBrains 委托进行了一项研究 [Kazakova 2015],结果显示在北美、欧洲、中东以及亚太地区 C++ 被大量使用,在南美也有一些使用。“在南美的一些使用”就有 40 万开发者,而 C++ 开发者的总人数则达到了 440 万。使用 C++ 的行业有(按顺序)金融、银行、游戏、前台、电信、电子、投资银行、营销、制造和零售。所有迹象表明,自 2015 年以来,C++ 的用户数量和使用领域一直在稳步增长。
在这里,我将对 2006 到 2020 年期间内 C++ 的应用领域给出一个可能有些个人化的、印象派的、非常不完整的概览:
- 工业界:电信(例如 AT&T、爱立信、华为和西门子)、移动设备(基本上是所有,信号处理、屏幕渲染、对性能或可移植性有重大要求的应用)、微电子(例如 AMD、英特尔、Mentor Graphics 和英伟达)、金融(例如摩根士丹利和文艺复兴)、游戏(几乎所有)、图形和动画(例如 Maya、迪士尼和 SideFx)、区块链实现(例如 Ripple)、数据库(例如 SAP、Mongo、MySQL 和 Oracle)、云(例如谷歌、微软、IBM 和 Amazon)、人工智能和机器学习(例如 TensorFlow 库)、运营支持(例如 Maersk 和 AT&T)。
- 科学:航空航天(例如 Space X、火星漫游者、猎户座载人飞行器、詹姆斯·韦伯太空望远镜)、高能物理(例如 CERN 欧洲核子研究中心、SLAC 国家加速器实验室、费米实验室)、生物学(遗传学、基因组测序)、超大规模计算。
- 教学:全球大多数工程院校。
- 软件开发:TensorFlow、工具、库、编译器、Emscripten(从 C++ 生成 asm.js 和 WebAssembly)、运行期代码生成、LLVM(许多新语言的后台支柱,也大量用于工具构建中)、XML 和 JSON 解析器、异构计算(例如 SYCL [Khronos Group 2014–2020] 和 HPX [Stellar Group 2014–2020])。
- Web 基础设施:浏览器(Chrome、Edge、FireFox 和 Safari)、JavaScript 引擎(V8 和 SpiderMonkey)、Java 虚拟机(HotSpot 和 J9)、谷歌和类似组织(搜索、map-reduce 和文件系统)。
- 主要 Web 应用:阿里巴巴、Amadeus(机票)、Amazon、苹果、Facebook、PayPal、腾讯(微信)、Yandex。
- 工程应用:达索(CAD/CAM)、洛克希德·马丁(飞机)。
- 汽车:辅助驾驶 [ADAS Wikipedia 2020; Mobileye 2020; NVIDIA 2020]、软件架构 [Autosar 2020; Autosar Wikipedia 2020]、机器视觉 [OpenCV 2020; OpenCV Wikipedia 2020]、宝马、通用、梅赛德斯、特斯拉、丰田、沃尔沃、大众、Waymo(谷歌自动驾驶汽车)。
- 嵌入式系统:智能手表和健康监控器(例如佳明)、相机和视频设备(例如奥林巴斯和佳能)、导航辅助设备(例如 TomTom)、咖啡机(例如 Nespresso)、农场动物监控器(例如 Big Dutchman)、生产线温度控制(例如嘉士伯)。
- 安全:卡巴斯基、美国国家安全局、赛门铁克。
- 医疗和生物学:医学监测和成像(例如西门子、通用电气、东芝和飞利浦)、断层扫描(例如 CT)、基因组分析、生物信息学、放射肿瘤学(例如 Elekta 和 Varian)。
虽然这只是冰山一角,但它展示了 C++ 使用的广度和深度。大多数 C++ 的使用对其(间接)用户不可见。某些对 C++ 的使用早于 2006 年,但也有很多是之后才开始的。没有一个主要现代系统只用单一语言写就,但是 C++ 在所有这里提到的应用场合中发挥了重要作用。
我们常常忘记那些平凡的却在我们的生活中起着重要作用的应用。没错,C++ 可以帮助运行美国国家航空航天局的深空网络,但也可以在人们日常熟悉的小设备中运行,例如咖啡机、立体声扬声器和洗碗机。让我惊讶的是,C++ 竟然也被应用于运转现代养猪场的先进系统中。
10.2 C++ 社区
与 2006 年相比,2020 年的 C++ 社区更加壮大,不断蓬勃发展、积极向上、富有成效,并且急切地想看到未来的进一步改进。
与大多数编程语言社区相比,C++ 社区一向是出奇地无组织和分散。这个问题早已有之,因为我就没有建立组织的才能。当时我的雇主 AT&T 贝尔实验室并不想建立一个 C++ 社区,但是似乎其他所有人都非常感兴趣,并且愿意花钱来建立他们的用户群。最终的结果是,许多公司,例如苹果、Borland、GNU、IBM、微软和 Zortech 都建立了以其客户为中心的 C++ 社区,但是却没有总体的 C++ 社区,社区没有中心。有杂志,读的人不多(相对于 C++ 社区的规模)。虽然有会议,但它们倾向于被一般的“面向对象”的会议或“软件开发”的会议所吸收或者就演变成了那些一般性会议。没有总体的 C++ 用户组。
如今,世界上有数十个本地、国家和国际 C++ 用户组,这些用户组之间也经常进行一些合作。除此之外,还有数十个 C++ 会议,每个会议都有数百人参加:
- C++ 基金会——成立于 2014 年,是一家非盈利性组织,旨在推广 ISO C++(而不是任何特定供应商的 C++),它主办 CppCon 年度会议。
- Boost——成立于 1999 年,它是一组经过同行评审的库、以及建造使用它们的社区。Boost 举行年度会议。
- Meeting C++——成立于 2012 年,是一个非常活跃的用户团体网络,定期举行会议(最初在德国活跃)。在不同地方有数十个 Meeting C++ 的会议和聚会。
- ACCU——成立于 1984 年,最初作为 C 用户组而建立,是所有现存 C++ 组织中的爷爷辈了;它出版两本杂志,并举行年度会议(主要在英国活跃)。
- isocpp.org——C++ 基金会的网站,其中包含与 C++ 有关的新闻,标准化进程相关的信息,以及有用的链接。
- cppreference.com——出色的在线参考资料;它甚至有一个历史部分!
- 会议——CppCon、ACCU、Meeting