C++是一种大约有40年历史的编程语言,它仍然是不可避免的。在本文中,我们将了解它在哪里使用、为什么使用以及它是否有未来。
让我们开始吧!
现在在哪里使用C++?
C++无处不在。用C++编写的代码存在于您的手机、洗衣机、汽车、飞机、银行以及任何地方。
让我们更具体一点。许多图像处理应用程序(如AdobePhotoshop或Illustrator)都是用C++编写的。3D游戏也经常用C++编写。3D动画、模拟和渲染软件也主要用C++编码。图像处理是一个有点复杂和资源密集型的领域,它需要C++的速度和硬件接近性。
但是图像不是唯一的领域,您用来阅读此内容的浏览器很有可能也是用C++编写的,例如Chrome或Firefox。
如果我们更深入地研究编译器或操作系统,它们中的许多都是用C++编写的。如果不是,那很可能是C。
但这只是桌面世界。
在企业软件领域,您当然会找到其他语言,但在性能至关重要的地方,C和C++是默认选择,这是有充分理由的。
在内存和CPU都比台式机更受限制的嵌入式世界中,C++蓬勃发展。无论你是看你的智能手表、手机,还是打开洗衣机,或者钻进车里打开点火开关,你都应该为这位不知名的C++开发人员感到有点欣慰,因为他们设法不让它崩溃启动后立即出现分段错误。
为什么使用C++?
所以我们看到C++仍然在几乎任何地方使用。但为什么?有很多怀疑论者认为这是一种遗产,应该从大多数现代公司的代码库中删除。
因为遗产?
有人声称C++仍然使用,只是因为它是旧应用程序的继承技术。旧的,我通常是指几十年前的软件。
这只是部分正确。
想想Cobol牛仔队。很少有人知道Cobol,所以如果有需要,他们可以赚很多钱。
而且有需要!
Cobol仍然广泛用于金融行业。这些系统是几十年前编写的,它们仍然运行良好。也许它们不支持所有现代需求,但它们健壮、可靠且如此复杂,以至于没有人敢重写它们。
C++并没有那么糟糕,它不像Cobol那样古老,而且有更多的人在学习它并知道-或多或少-如何使用它。
但它有时只是因为公司对其进行了大量投资而被使用。他们的整个生态系统都围绕C++发展。迁移出去的成本很高。即使是那些觉得C++不够性感的决策者也会觉得这种迁移在经济上是无稽之谈。
但是C++是这样的遗产吗?
C++正在发展
一点也不!C++的发展是可以预见的。正如我在之前的一篇文章中详细解释的那样,自2011年以来,C++遵循类似火车的模型。每三年都会发布一个新版本,其中包含新的语言和库功能以及对早期功能的错误修复。
发布时间表和标准化工作保证了版本是经过深思熟虑的添加的结果,而不是临时决定的结果。编译器实现者有时间正确实现它们,社区也有时间适应。
同时,C++的超能力之一是向后兼容。昨天编译的代码很可能会在明天编译。事实上,1985年编译的代码很可能会在2025年编译。
C++的发展一直致力于消除开发人员的痛点并更容易编写更安全的代码。
C++最重要的特性之一是可预测的内存管理。最终(或不)不会发生垃圾收集。何时以及如何释放内存并将其返回给操作系统是确定性的。虽然它总是完全确定性的,但也很容易通过不释放内存或尝试释放内存两次甚至更多次来打自己的腿并将其搞砸……
现代C++引入了智能指针,通过添加可以自行清理的指针,使动态内存管理更不容易出错。
许多开发人员的另一个痛点与模板有关。SFINAE,令人难以置信的长且难以阅读的错误消息越来越少,随着C++20概念的引入,这些概念帮助我们限制模板接受的类型并提供相关且相对易于阅读的错误消息,如果还是有问题。
在过去的几年里,有一些大型工作正在进行中来介绍这个<ranges>库,我们可以用它来用函数式风格替换非常程序化的循环。
经济优势…
C++接近硬件,可以轻松操作资源,提供对CPU密集型功能的过程编程,并且速度快。它还能够处理3D游戏的复杂性,并提供多层网络。C++的所有这些优点使其成为开发游戏系统和游戏开发套件的主要选择。
如果您使用所谓的现代语言,例如Python或Javascript,通常您会退回到用C或C++编写一些关键功能或库,只是为了让它们的速度可以接受。
很少有语言可以在速度方面与C++竞争,其中之一就是C。
但速度并不是一切。
你可能会说,你不太在乎速度。你只想服务那么多交易,你对速度没有这样的限制。您更喜欢易于开发的代码。
可以理解。
正如我们之前看到的,C++正在变得越来越容易开发。当然,编写现代C++的难易程度远不及Python,但事情并非非黑即白。
一些现代语言专注于编写代码的易用性,而另一些则专注于强大的功能。
当您选择汽车时,您不仅会考虑舒适性或速度,尽管这些可能非常重要。通常,您还必须考虑油耗。我们在编写应用程序时会做同样的事情吗?我们是否考虑过它们会消耗多少能量?从这个意义上说,C/C++/Rust三重奏的性能比所有其他语言都要好。基本上,他们玩的是不同的游戏。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292856.html