Hacker News 中文摘要

RSS订阅

正统C++(2016) -- Orthodox C++ (2016)

文章摘要

文章提倡使用"正统C++"(Orthodox C++),即仅采用能改进C语言的C++必要特性,避免现代C++的复杂功能,保持代码简洁高效。作者认为现代C++过于复杂,而正统C++更适合实际项目开发。

文章总结

正统C++:回归简洁的编程之道

文章概览

本文最初发布于2016年1月16日,作者提出了"正统C++"(Orthodox C++)的概念,主张使用C++语言中最接近C语言的简洁子集,避免现代C++中不必要的复杂特性。

核心概念

什么是正统C++?

正统C++(有时称为C+)是C++的一个最小子集,它在改进C语言的同时,避免了现代C++中所有不必要的特性。这与现代C++的理念完全相反。

为何不用现代C++?

作者回顾90年代使用当时"现代"C++特性的经历,指出许多特性最终被证明是不必要的(如RTTI、异常和流),或导致了不必要的代码复杂性。作者引用一篇题为《为什么我不再使用现代C++》的文章佐证这一观点。

为何使用正统C++?

引用Bjarne Stroustrup的话:"在C++内部,有一个更小更简洁的语言正试图挣脱出来。"使用正统C++限制编写的代码库更易于理解、更简单,并且能用较旧的编译器构建。

实践指南

正统C++的"Hello World"

```cpp

include

int main() { printf("hello, world\n"); return 0; } ```

使用建议

  1. 从类C的C++开始,避免不必要的复杂性
  2. 不使用异常处理机制
  3. 不使用RTTI(运行时类型识别)
  4. 使用C运行时头文件(如)而非C++包装版本(如
  5. 使用printf风格函数而非流(如
  6. 谨慎使用STL中会分配内存的组件
  7. 适度使用元编程,避免学术性滥用
  8. 对新标准特性保持谨慎,通常等待5年后再考虑采用
  9. 不建议使用模块(modules)特性

现代C++特性的采用时机

由于编译器、操作系统等对C++标准的采纳滞后,通常建议在新标准发布5年后再选择性使用其特性。例如,C++11的特性在2016年后使用相对安全。

类似理念

文章列举了多个与正统C++相似的理念: - 嵌入式C++ - 名义C++ - 理智C++ - "保持C++简单"理念

代码示例

提供了多个符合正统C++理念的开源项目示例,包括: - DOOM 3 BFG - Qt(当构建时不使用RTTI和异常时) - dear imgui - bgfx(作者自己的项目) - TheForge - Oryol - Network Next SDK

结语

作者通过bgfx项目的使命声明表达了自己的理念:通过提供跨平台、图形API无关的渲染库来赋能游戏开发者。文末邀请读者通过赞助支持这一使命。

(注:本文保留了原文的主要技术观点和论证逻辑,删减了部分重复性列举和次要的参考资料链接,同时确保了中文表达的流畅性和技术准确性。)

评论总结

以下是评论内容的总结:

支持"正统C++"的观点

  1. 认为C++应保持接近C的简洁性

    • "Basically, stick with C and leave C++ programmers alone." (评论1)
    • "Orthodox C++, to me, is C plus the one good feature of C++: you don't have to type struct all the time." (评论10)
  2. 反对现代C++复杂特性

    • "Don't use exceptions... Don't use RTTI... Don't use stream" (评论8引用原文)
    • "I've been doing embedded systems in C++ since rocks were young, and this is a great summary of what to avoid." (评论14)

反对"正统C++"的观点

  1. 认为限制过多会失去C++优势

    • "That's the core feature of the language. Not using it doesn't make any sense." (评论24关于RTTI)
    • "printf is type-unsafe and bug-prone. Also modern C++ standards have better formatting utilities." (评论24)
  2. 支持现代C++特性

    • "There are many programs that are impossible to write in a finite time without metaprogramming." (评论8)
    • "Smart pointers are good... Lambdas are a good feature." (评论13)

中立/其他观点

  1. 建议使用其他语言

    • "At this point, if you want better C, just use Zig." (评论9)
    • "Might as well use Rust... using C++ over Rust is kind of stupid in 2026" (评论22)
  2. 认为C++子集选择存在分歧

    • "Somewhere within c++ there is a subset of c++ that is a great language. The problem is that no one agrees on which subset that is." (评论18)
  3. 指出文章不足

    • "The point on exceptions I think is also misleading... the happy path inexpensive" (评论20)
    • "Hard to take seriously." (评论23关于模块)

总结显示评论者对"正统C++"存在明显分歧,支持者看重简洁性和可控性,反对者则认为过度限制会丧失C++的现代优势,另有部分评论者建议直接转向其他现代语言。