C++ 的梦想可能已经死去了很多年:分崩离析还是死中求活

223 阅读6分钟

微信图片_20241204142034.png

Hi,大家好我是敖行客,这几天敖行客和大家介绍了许多C++的现状和争议,和一些朋友聊了一点自己的生活和苦恼,各位实在是辛苦了。有朋友说自己干了 15 年程序员,一直把学习使用 C++ 当作生活的本能,也以为自己超爱写代码。但现在工作加副业的代码量让他感觉自己一样都吃不消了。他想继续搞业余项目,工作上却想少写或不写代码,想要转更其他行业岗,但是在某些时候C++却不能挪窝。这种情景其实感觉很符合许多朋友的从业现状,曾经有多信仰,如今就有多迷茫。

我们先来剖析一下C++目前的一些新情况

前段时间在美国有多个部门发布文件、报告和建议,警告行业不要使用内存不安全的语言,如 C 和C++。关键基础设施软件的开发商被要求在 2026 年 1 月 1 日前制定内存安全发展路线图,就未来行情来看会给C++带来巨大的压力。CISA 在其报告中列举了 C/C++的多种安全隐患,称其在国家安全、经济安全以及公共安全方面均存在重大风险。尽管 C++在许多领域发挥着重要作用,但内存管理机制使得开发者难以保证程序的安全性,使用非内存安全编程语言在产品开发中被视为不良实践。如微软、谷歌、AWS 等都在逐步采用 Rust。微软显然正在用 Rust 重写核心库,谷歌致力于 Rust,开发双向 C++/Rust 互操作工具,同时还在探索自己的 C++后继语言 Carbon。AWS 也在重度使用 Rust,将其用于性能和安全性是首要关注点的关键应用程序。这表明科技巨头们在面对更高性能和安全保障的需求时,对 C++的信心有所下降。

微信截图_20241204134607.png

CISA的报告单页

在明天就要迎来C++ 之父的年末演讲了,当前情况来看C++ 标准委员会基本放弃了对工具的任何责任(它侧重于 C++ 语言的规范,而不是具体实现的规范)但是他们在采纳 P3466 R0 达成共识,确认未来 C++演进的设计原则,不允许 ABI 中断,保持与 C 和早期 C++版本的链接兼容性,不引入“病毒式注解”。这表明 C++标准委员会在努力维护向后兼容性的同时,也在探索新的发展方向,C++ 委员会似乎非常致力于维护向后兼容, 不惜一切代价地保住它在当前行业内的固定地位,但是却又在矛盾中努力寻求其他出路,C++26 即将添加一系列影响深远的新特性,尤其是针对反射和安全性方面的重大改进。Herb Sutter 将 C++26 誉为自 C++11 以来最具影响力的版本,此次更新将为开发者提供默认的安性设置和更优秀的编译时反射特性,极大提升程序的安全性和可维护性。这虽然满足了很多人的需求,但也限制了 C++的发展。这导致许多朋友都存在着不同的观点和派系,对于 C++的未来发展方向存在本质上的分歧。

我们再来切分一下C++的实际痛点,基本上可以分为四大项

  1. 性能优势。

首先C++作为一种编译型语言,可以将程序直接编译成计算机的本机指令,无需通过解释器进行解释。因此,C++程序的执行速度通常比解释型语言快得多。同时,C++还提供了许多对内存管理的底层控制,使得我们可以更好地管理程序的内存使用,进一步提高程序的效率。在低级系统程序设计、高级系统程序设计、嵌入式程序设计、数值科学计算等领域,C++有着根本性的优势。例如,在操作系统核心、网络管理系统、编译系统、电子邮件系统等高级系统程序设计中,C++的高效性能能够满足复杂系统的需求。在嵌入式系统中,C++的高效性和对硬件的直接控制能力使其成为首选语言,能够快速处理大量的数据和复杂的计算。

  1. 可进化性。

C++是一种非常灵活的语言,具有可进化性。它支持面向对象编程、泛型编程等多种编程范式,可以根据不同的需求和场景进行灵活的设计和开发。在实际的项目开发中,开发团队可以根据自己的需求和业务特点,进化出本团队顺手的类库。通过不断地优化和改进类库,提高代码的可复用性和可维护性,从而提高开发效率。例如,在游戏开发中,开发团队可以根据游戏的特点和需求,开发出专门的游戏引擎类库,提高游戏的开发效率和性能。

df86400589a68f9f1a06292124d3b520.png

再来说说它的问题和未来面对的困局

  1. 难学,不同阶段的开发者易被不同部分搞死。

C++是一门非常非常复杂的语言,学习曲线陡峭。新手容易被指针搞死,中手容易被 STL 标准库和模板搞死,高手容易被 Boost 搞死。指针是 C++中比较难掌握的部分,新手在使用指针时容易出现内存泄漏、空指针引用等问题。STL 标准库是 C++中非常强大的一部分,但也非常复杂,中手在使用 STL 时容易出现理解困难、使用不当等问题。Boost 是 C++中非常强大的库,但也非常复杂,高手在使用 Boost 时容易出现理解困难、使用不当等问题。由于 STL 难懂,大量的项目禁用 STL。例如,有一个真实的案例,某个项目有了较多的 Boost,那人离职后,项目就废掉了,请一个 Boost 高手的成本比重写项目还高。

  1. 可理解性差。

“难学”的特点也导致了 C++的可理解性差。对于不熟悉 C++的人来说,看 C++代码可能会感到非常困惑和难以理解。但是,对于熟悉 STL 的人来说,看熟悉 STL 的人代码很好理解。为了解决可理解性差的问题,可以采取一些措施,将代码分成若干个库,新手参与的库,禁止或少用 STL。对于 STL 中的常用功能,可以重写在一个新库中,此库以可理解性为最重要的目标。

总的来看,C++在面对其他语言竞争和行业压力下,其未来发展方向充满了挑战。虽然 C++具有不可替代的优势,但也需要不断地创新和改进,以适应不断变化的市场需求。这也与我们的前景不谋而合,让我们拭目以待明天的年末演讲,敖行客会第一时间跟进新消息与大家分享,觉得有思考的话就给敖行客点个赞吧~

科技脉搏,每日跳动。

——敖行客Allthinker与您共享未来之声

640.gif

-智慧链接 思想协作 -