编程语言比较
C 与 C++:界线仍然很重要
C 和 C++ 在求职板上看起来可以互换,但在实践中表现不同。 C 是机器的可移植转录本:微小的运行时间、稳定的 ABI 以及一种为每个操作系统和解释器内核编写的语言,其费用由狭窄的标准库和内存规则完全由您承担。 C++ 添加了 RAII、模板和 STL 等抽象概念,使您可以构建大型系统,而不会到处泄漏,而代价是编译时间、模板错误和功能蔓延。保留的界限:内核、驱动程序、嵌入式固件和库边界仍为 C;应用程序、桌面软件和游戏引擎都采用 C++。
要点
- C 的适合您的标准库并不是嵌入式的诅咒:新微控制器的工具链首先使用 C,而且通常只使用 C。
- C++ RAII 替换了整个 bug 类:与资源获取相结合的析构函数将手动自由代码转换为仅设置代码。
- 保持 ABI 边界 C:插入脚本语言、内核或分布式二进制文件的每个动态库都会导出一个 C 形接口。
- 现代 C++(11 后)是一种不同的语言:智能指针、移动语义和 STL 回答了大多数“带有类的 C”抱怨。
- 两者都有未定义的行为,并且它在实际系统中的事后分析中占主导地位,远远超过功能辩论所暗示的。
- 以安全为中心的风格之所以存在,是因为认证需要规则:MISRA C 和 AUTOSAR C++ 是该需求的形式,而不是民间传说。
- Stroustrup 的理念是“不用为不使用的东西付费”;在拒绝任一方向的主张之前采取措施。
- 招聘分工明确:C++ 办公桌集中在金融、游戏和 HPC 领域;嵌入式、内核空间和系统工具中的 C 桌面。根据您的行业进行选择。
一线手记
我们商店的 C/C++ 边界是由库设置的,而不是哲学:我们编写的每个插件边界和 Python 扩展首先导出一个平面 C ABI,而该规则消除了十个痛苦。
常见问题
C++ 只是具有额外功能的 C 吗?
否:C++ 编译大多数 C 代码,但它是一种具有自己语义的独立语言,并且惯用的 C++ 生成的机器形状与惯用的 C 不同。
系统项目是否应该在 C++ 中使用“C,无类”?
有时;但如果您有 C++ 工具链,请使用 C 进行编译并保持边界诚实,而不是押注于社区都没有测试的方言。
哪个有更好的内存安全故事?
两者都不是原生的,这正是 Rust 得到自己的比较的原因。现代 C++ 通过 RAII 和消毒剂来缓解; C 依赖于纪律和工具(valgrind、UBSan)。
他们之间真正决定的是什么?
您必须链接的生态系统和您可以雇用的团队:固件和内核相关代码仍然是 C;具有复杂领域的大型应用程序采用 C++。
Kinetikatech 如何在编程语言比较方面为您提供帮助
说实话,很多团队都是自己先试过才来找我们:用于系统工作、脚本编写和服务的语言,比较生产中实际重要的内容:安全保证、原始速度、可以雇用的人以及部署和修补所产生的服务的痛苦程度。我们的服务器管理和网站维护服务就是为了让您不必在编程语言比较上交学费:部署、值守与凌晨 3 点的突发状况,都由我们负责。