紫色梦烙印 发表于 2023-10-3 19:20:22

C++过于复杂为什么不被淘汰?

C++过于复杂为什么不被淘汰?

mianyang0831 发表于 2023-10-3 19:20:33

刚刚看到一个热门帖子,“Isn't C++ fun?“,C++ 很 fun,所以没被淘汰,:),玩笑而已。
同样的问题?
Java VM 调优那么麻烦为什么没被淘汰?
Python 那么慢为什么没被淘汰?
Rust 语法那么冗余为什么没被淘汰?
各花入各眼,哪个语言不都有过光辉的时刻?哪门语言都有优缺点,以及它们最适用的场景。只要还有遗留系统需要维护,只要有人用,只要还有人喜欢,就不会被淘汰。

http://pica.zhimg.com/v2-833702bf0514d1abb3c5e0cdccc6e7c4_r.jpg?source=1940ef5c

yuanzhu 发表于 2023-10-3 19:21:01

根本原因还是实际使用C++的人通常都只在使用它的很小的一个子集,这个子集并不复杂

kgb811031 发表于 2023-10-3 19:21:54

“过于复杂”指的是加入了冗余的部分,使得本该简单事情变复杂了。
然而啊。。。C++的复杂并不是如你所想。
C++的核心设计哲学是Zero Overhead。啥意思?说人话就是:你没有用到的特性,不应该给你带来任何负担。
这个哲学的好处在哪里?当你没有学到/用到一个知识点的时候,你不需要为它付出代价。
当你不明白左值右值的时候,单纯地传值就可以玩的很Happy,而当你想要榨取性能,避免拷贝复制的时候,你才需要和复杂的左右值,std::move, 标准 swap 和对象内建swap等听起来就有点晕的概念搏斗一下。
当你不需要自己设计内存分配机制,就完全不需要理会allocator这个听起来就不是很简单的东西,放心地使用STL内置的default部分。但是你在嵌入式环境下或者近实时操作系统里想要确保内存分配的速度和效率,就可以看看怎么重载一下operator new 之类的方法。
当你不需要使用模板工作时,大可以把C++当成一个带类的C玩得飞起。不需要为各种偏特化,类型萃取,integral,std::tuple等高阶咒语头疼不已。但是你需要构建一套需要非常灵活拓展的framework,又不想受限于复杂的继承体制时,variadic template 和 concept 就是你最好的朋友。
在你不熟悉FP的时候,完全可以不去考虑lambda表达式,不去考虑std::function,不去写那些高阶函数。但是当你觉得想把Lisp和Haskell中有些概念比如闭包、monad等搬到C++时,你会觉得其实这些东西蛮顺手的。
这多么人性化!C++为不同的能力阶段的人提供了不同层次的工具,而且它们几乎完全正交!
但是就是有些人要跳出来“太复杂啦!我们需要简单的语言!”
爱因斯坦说过一句话“科学要简单,但不是过于简单。”简单的是概念和概念的层次,却不是概念的数量和概念本身的复杂程度。狭义相对论可以把麦克斯维方程组用一个简单的张量公式表示,却不能避免张量概念本身的复杂性。
经典力学是不是太复杂啦,我们需要简单的!有啊,牛顿力学。只要你不涉及到速度、质量足够大的场景,就不需要相对论;
流体力学是不是太复杂啦?我们需要简单的!有啊,简单流体力学。只要你不涉及湍流,就不要考虑数值求解内维尔-斯托克斯方程。
量子力学是不是太复杂啦?我们需要简单的!有啊,普通量子力学。只要你不涉及复杂多体交换关联势,你就不需要学习高量和重正化群。
C++是不是太复杂啦? 得啦,当你面对的问题还都不涉及到你暂时用不到的内容时,C++够简单啦。。。

gaoyuhao 发表于 2023-10-3 19:22:22

如果你不考虑性能的话,C++写起来挺爽的。不考虑性能就是说,少用右值引用和移动语义,少去优化你的构造函数,能不用const就别去用,少去思考STL的内在实现,vector一招鲜,别去思考里面的内存增长缩放,别去管reserve不reserve的,别去考虑各个模板内在实现的差异,别去管对象的内存数据分布,别去考虑cache miss不miss的问题,别去管inline不inline的问题,别去管万能引用,别去管完美转发,别去管鲁棒性,别去管萃取不萃取的问题,别去管placement new和new有啥区别的问题,别去管各种算法内在实现,一个find走天下,别去思考各种allocater实现有啥差异,别去思考深拷贝浅拷贝的问题,别去管哪些数据该放栈里面哪些数据该放堆里面的问题等等等等。
如果你不考虑这些问题,写C++可以像写python那样,很爽。
但是一旦你需要考虑上面这些问题,需要考虑怎样写出优秀的,高效的,鲁棒性强的代码,任何一个小的点可能都需要费很大的功夫。
所以事实上C++难就难在它可以提供很多种方案来达成我们的目的,但一百个人的实现可能有一百零一种方法,而这里面可能就一两种方法会比较好,其它的方法就是拿起石头砸自己脚。
所以写C++很容易,写好却很困难。

xudongxi 发表于 2023-10-3 19:22:42

你这姿势水平还有待提高啊 C++的类型系统的表达能力和haskell是一个级别的 在主流语言中可以说是数一数二的存在 要碰瓷好歹找个势均力敌的语言好噻 java的类型系统和C++一比简直是个笑话
页: [1]
查看完整版本: C++过于复杂为什么不被淘汰?