C++ 是否变得比 C 更流行了?

每年都会出现一种新的编程语言。创造一种新语言来解决计算机科学中的挑战的诱惑很难抗拒。一些资料表明,目前有多达 2,500 种语言,这并不奇怪!

对于我们嵌入式软件开发人员来说,这个列表并不长。事实上,我们可以用一只手数出我们实际使用的所有语言:C、C++、Rust、Assembly 和 Python。别误会,还有其他一些语言,特别是如果你在嵌入式 Linux 或 FPGA 上工作,但我只考虑使用微控制器的开发人员会考虑的语言。

在大多数情况下,近 50 年来,C 一直是资源受限系统中的主要语言。如今通用软件计算的有趣之处在于,C 也一直占据主导地位。至少到 2024 年 6 月为止。至少根据 TIOBE 编程社区指数,39 年来 C 的受欢迎程度首次低于 C++!

语言流行度意味着什么

嵌入式软件团队和开发人员是否应该担心 C++ 的流行度已经超过 C?我最初的想法是,不必。这些语言的流行度会随着时间的推移而起起伏伏。事实上,历史上曾有好几次,C++ 似乎会主宰 C,但最终 C 的流行度再次飙升。

我想这次会有所不同。通用软件行业的许多团队正在从 C 转向 C++ 或 Rust。甚至 Linux 内核现在也提供对 Rust 的支持!虽然我们可以争辩说,虽然 C 在通用计算领域可能正在失去人气,但它仍然是嵌入式系统的事实上的语言,并且在可预见的未来仍将如此。然而,我并不这么认为。

回顾过去十年的调查数据,超过 80% 的嵌入式系统项目使用了 C!如今,这些数字在 60% 到 70% 之间。也许更有趣的是,C++ 已增长到嵌入式项目的 20% 到 25% 之间!即使对于嵌入式团队来说,总体趋势也是远离 C 而转向 C++。(我非常感兴趣地观察 Rust 是否开始影响这些数字)。

这些调查中的语言流行度可以帮助团队了解计算机科学的总体趋势,并深入了解未来开发人员可能具备的技能。例如,Rust 的日益流行和使用建议影响了我,让我确保自己的语言技能达到标准。

考虑到几十年来大学里都没有教授过 C 语言,它能保持这么长时间的流行度着实令人惊讶。虽然公司必须不断培训开发人员使用 C 语言,但为什么要继续投资于一种流行度正在下降的语言的技能呢?

虽然遗留的 C 代码多得数不胜数,但这并不意味着我们应该将所有新代码开发都与过时的语言绑定在一起。毕竟,既然现代技能可以让团队走得更远、更快,为什么要扼杀创新并浪费时间呢?我担心微控制器供应商已经陷入了“我们一直都是这样做的”循环。

当然,您可能会说微控制器是资源受限的设备,需要 C,但您是否看过供应商如今推出的资源受限的产品?Cortex-M33 部件具有 2MB 闪存和 768 kB RAM,运行速度为 160 MHz 及以上。这比我的第一台微控制器 PC 的处理能力还要强!

C++ 或 Rust 太慢的论点确实经不起推敲。  

结论

C++ 首次超越 C,成为最受欢迎的编程语言。这一趋势会持续下去吗?只有时间才能告诉我们答案。不过,我认为重要的是要认识到语言的流行程度并不能说明全部情况。

如果嵌入式系统语言选择的正确解决方案是按如下方式使用它们,那么我不会感到惊讶:

  • 启动代码的汇编语言
  • C 用于低级驱动程序和板级支持
  • 应用程序代码采用 C++ 或 Rust

虽然我们经常认为一种语言会主导另一种语言,但我们已经在一个系统中使用了多种语言。为什么不在应用程序级别扩展 C++ 或 Rust 的使用,使其发挥最大的优势,并将 C 代码保留在我们最熟悉的地方呢?

这将使我们能够充分利用 C 的速度和“灵活性”以及 C++ 或 Rust 的现代技术和抽象。

相关推荐

  1. 视觉定位是否GPS精确?

    2024-07-09 23:36:01       20 阅读
  2. c#协

    2024-07-09 23:36:01       15 阅读
  3. c++入门】算

    2024-07-09 23:36:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 23:36:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 23:36:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 23:36:01       57 阅读
  4. Python语言-面向对象

    2024-07-09 23:36:01       68 阅读

热门阅读

  1. 【国产开源可视化引擎Meta2d.js】拖拽

    2024-07-09 23:36:01       19 阅读
  2. 总结:Flink任务执行

    2024-07-09 23:36:01       20 阅读
  3. react v18——env环境变量配置、打包配置(craco)

    2024-07-09 23:36:01       25 阅读
  4. Consul与CoreDNS的对比

    2024-07-09 23:36:01       21 阅读
  5. git 合并多次commit,提交MR

    2024-07-09 23:36:01       17 阅读
  6. Redis中测试Stream的例子

    2024-07-09 23:36:01       21 阅读
  7. 「AIGC」大数据开发语言Scala入门

    2024-07-09 23:36:01       24 阅读
  8. 易保全推动区块链应用与AI融合创新发展

    2024-07-09 23:36:01       22 阅读
  9. 如何在LabVIEW中使用FPGA模块

    2024-07-09 23:36:01       18 阅读
  10. 【FFMPEG基础(一)】解码源码

    2024-07-09 23:36:01       19 阅读
  11. Oracle的RECYCLEBIN回收站:轻松恢复误删对象

    2024-07-09 23:36:01       22 阅读
  12. 0703_ARM7

    0703_ARM7

    2024-07-09 23:36:01      21 阅读
  13. CI脚本的python基础

    2024-07-09 23:36:01       22 阅读
  14. uni-app + vue3项目引入unocss

    2024-07-09 23:36:01       18 阅读
  15. 深度学习 - 模型的保存与部署方式汇总

    2024-07-09 23:36:01       16 阅读