当前位置: 首页 > 科技观察

为什么我看到这么多人不推荐C++?

时间:2023-03-14 18:16:41 科技观察

2000年前后是C++的鼎盛时期,游戏、图形界面、科学计算、后台服务、各种新语言的实现语言,甚至在操作系统中侵入了C的领地。一个技术,当火势开始涌上来,泥沙落下,稳定下来后,发现体力不足,或者出现另一个风口,就会像一棵树一样倒塌。进化是个好东西。在进化的过程中,我们要总结经验,避免返祖。C++之父写了一本神书《C++语言的设计与演化》。我孤陋寡闻。似乎只有这本书解释了语言的设计理念和妥协的艰辛。Bjarne在Designconcepts一书中提出了很多智慧,比如C++的继承者Rust的“零成本抽象”也备受推崇。回到正题,为什么C++不再被推崇?客观原因很明显:(1)C++语法非常复杂,优秀的C++程序员难找。在语法上,从C++14开始的“后现代C++”有了很大的改进。过去的一些招数和招数可以舍弃,可惜为了向下兼容,历史包袱不能丢。(2)历史上机器的性能很弱,编译器注重生成代码的效率,不太重视语法陷阱的警告——没有足够的分析资源,C++编译已经很慢了,所以C++的开发者友好性严重不足。就像JS类的v8,在C++类的LLVM之后,GCC被迫继续完善。也是大微软开源了好用的vcpkg。有了CMake,C++的开发体验比以前有了很大的提升。至少比NodeJS折腾了一个星期还不一定能拿到编译工具链要好。(3)Web2.0乃至移动web时代,连老实贤德的Java都被鄙视,更何况是C++。C++在科学计算中的地位依然不可动摇。别看Python风靡一时的红屁股,其实只是一层皮。没有C/C++的加持,Python不是个屁。澄清这一点:您不必使用C++,但它值得了解。顺便说一句,您不必使用Rust,但值得学习。最后贴个Go例子,编译没问题,但是运行出错,而在C++中,编译的时候就能发现问题,根本不允许编译。packagemainimport("fmt""sync""time")funcmain(){varwgsync.WaitGroupwg.Add(1)gofoo(wg)fmt.Println("beforewait")wg.Wait()fmt.Println("afterwait")}funcfoo(wgsync.WaitGroup){fmt.Println("beforesleep")time.Sleep(2*time.Second)fmt.Println("aftersleep")wg.Done()