C++ 越写越爽还是越写越头大?
Ask HN: Do you still enjoy coding in C++?
近年来 C++ 因复杂度和特性膨胀饱受争议,但我自 C++11 起就享受其严格类型系统、智能指针和模板的强大。不过,编写正确的迭代器、处理 rvalue 引用或解读模板错误确实棘手。大家现在还享受写 C++ 吗?为什么?
享受!C++ 的零开销抽象和手动内存控制让我能写出极致性能代码,虽然学习曲线陡峭,但掌握后那种掌控感无可替代。
不享受了。模板错误信息像天书,每次调试都要花几小时猜编译器在想什么,现在能不用 C++ 就绝不用。
看场景。做游戏引擎或高频交易时,C++ 是首选;但写业务逻辑时,Python 或 Rust 更省心,效率更重要。
C++20 的模块和概念让开发体验提升不少,但团队里新人上手太难,维护老代码更是噩梦。
喜欢它的灵活性,但讨厌它的陷阱。比如 const 正确性容易忽略,导致运行时 bug,需要极度小心。
HN 评论区
70- simonask
噢,C++。
C++ 就像一位我满怀眷恋的老情人。我们相伴多年,直到 C++20 左右,无论风雨。那段时光令人兴奋——速度快得惊人,甚至可以说有些不负责任,但天哪,那旅程真是狂野。它教会了我太多东西,塑造了今天的我。但当我们各自的短处变得无法忍受,其行为——太频繁地未定义——已不再值得原谅时,我们便分道扬镳了。
我依然关注它,因为我对它仍有爱意,但我必须承认,我对其做出的许多人生选择深感担忧。我本该早就看出它有多成问题,因为我了解它的历史,但我曾抱有它能改变的希望,现在看来它似乎永远不会变。
我依然为 C++ 加油,尽管我对我的新主力语言 Rust 非常满意。我希望它能变得更好,因为我真心希望它好,但目前我还没看到迹象。它不断重蹈覆辙(例如,每个新特性都带来更多未定义行为的陷阱),却未能解决任何重大缺陷(构建稳健软件的工具不足)。
我有时还会写 C++,但已不再像过去那样充满热情。当我写 C++ 时,是因为不得不写。如果让我选,Rust 几乎是我所做的一切的更好选择。目前,我看不到 C++ 和我之间有未来。
- chris_j
我对 C++ 真的感到左右为难。我爱 C++,但也有很多我不喜欢的地方。在很多方面,它是一门出色的语言,但它背负了 40 多年的陈年包袱,那些东西如果你今天从头设计一门编程语言,根本不会那样做。
事实上,我已经很多年没有专业地编写 C++ 了,我对专业使用它的回忆(C++11 之前)并不愉快:不得不商定一个严格受限的语言子集,只允许使用其中一部分,从而避开任何编译器支持不佳的特性,或者我的团队成员不喜欢的特性。可悲的是,当时被禁止的特性列表中包括了模板和命名空间。
但在个人项目中使用 C++ 时,能够自由选择使用语言的哪些部分、又避开哪些部分,要愉快得多。老实说,从 C++11 开始,这门语言确实进步了很多。
- adev_
用一个词概括:力量。
C++ 无疑是当下最强大的语言。这既是它的优点,也(经常)是它的缺点。
在泛型编程、硬件控制、抽象能力以及更广泛的表达力方面:没有任何语言,哪怕是今天,能接近 C++。
它是一门充满陷阱的语言,也有其合理份额的遗留问题。
但如果你能通过经验和痛苦学会避开这些陷阱,你就能在 C++ 中达到一种生产力和性能水平,这是其他任何东西(包括 Rust)都很难超越的。
讽刺的是,在人工智能时代,我发现这一点尤其正确。
因为 C++ 的代码量如此庞大,只要引导得当,AI 代理目前处理 C++ 已经相当出色。
- mort96
我喜欢编写 C++ 代码。
我承认 C++ 在很多方面是一门糟糕的语言,但它是一门我非常熟悉的糟糕语言,而且它契合我思考代码的方式。它让我能毫不费力地通过内存管理做一些“巧妙”的事情,以避免不必要的分配等。我已经掌握了它的大部分怪癖,处理右值引用/移动语义,如何实现迭代器和容器等契约等。
我也喜欢写 Rust,喜欢 Rust 如何确保我不犯错。我认为 Rust 在很多方面是一门更好的语言,我认为它是底层编程的未来(而且我觉得很疯狂,竟然花了数十年才出现一个像样的 C++ 竞争对手!)。但我也喜欢 C++ 不在乎的态度,它不充当保姆,让我随心所欲。我绝不敢用 C++ 写一个面向公众的 Web 服务器,但写个游戏?当然可以!