让人爱恨交加的 C++

爱他,恨他

C++是门奇怪的语言,这一秒你爱它的无所不能,下一秒你又会痛恨它的繁杂与神秘。
随着C++11、C++17等新标准的发布,有很多的人不认识C++了。越来越多的新特性被加入C++标准,而且C++标准委员会还嫌这些特性少,仍然在不停的增加各种特性。
为了兼容 C 语言和老标准的C++,现在的C++语言在不断进化的同时,背负着越来越重的历史包袱。负重前行,各位艰辛。当然,艰辛的是各位学习和使用C++语言的同学。
虽然C++同Java、C#等,都被认为是高级程序设计语言,但是显然在对开发人员的使用便捷上没有另外两种语言友好,学习曲线也要陡峭太多。对于C#,可能一个完全不懂得人,几个小时就可以上手了。这放在C++上,是完全无法想象的。C++对程序员不太友好,有多少人被C++的模板稿的晕头转向?
我更倾向于把C++看成一种中级语言,介于高级语言和低级语言之间。C++可以访问底层特性,这提供了无限的可能性,也是C++强大的原因。没有GC的负担,每一块内存都可以被你控制。在操作系统、数据库、游戏引擎等对性能要求高,需要针对硬件进行优化的领域,C++是当之无愧的王者。
但是C++得难以掌握也是出了名的,各种神秘的潜规则。同C语言相比,C++编译器在背后为你做了太多的事情,给C++语言始终蒙着一层模糊的面纱。你要想深入的理解C++,必须从理解C++编译器的工作方式开始。
Facebook 开发了 hiphop 用来把PHP转换成C++;Google 为了 Go 语言用来取代C++,因为Google内部觉着C++太难掌握了;Unity 游戏引擎开发了 IL2CPP 技术把 C# 代码转换成 C++ 代码,为了提高引擎效率。
很明显,大家都着迷于C++的无所不能,却更希望它能更易学易用。

挥刀自宫

我坚信C++应该挥刀自宫。
适当的抛弃掉沉重的历史包袱,在面向未来的道路上才能轻装上阵。简化语法,把一部分特性从标准中移除,以一个精巧的语法集来实现绝大多数的功能。
或许,C++应该从某一个版本开始拒绝支持兼容老标准,我们要面向未来编程。
在强制开发者升级方面,我觉着C++应该多向Apple学习一下,铁腕一点没什么不好。
人如果太胖,就需要减肥,编程语言也不例外。C++现在无疑是一个超级大胖子。