对C++语言的功能取舍的一点想法
C++的一个基本设计,就是在引入高级抽象的同时,尽量在编译期把东西定下来,运行的时候不带任何代价裸奔。所以C++默认不开RTTI,也没有反射机制。
我做了一些玩意之后,感觉这个设计有点不上不下:复杂的项目,几乎肯定需要信号回调、反射、类型识别这些东西。而简单到不需要前述设施的项目,其实用struct裸奔也差不多能搞定。
看Qt架构和Gobject架构,都做出了大量语言扩展:Qt自己定义了关键字,仍然采用C++语言,然后用代码生成器产生实际编译的C++代码。Gtk用一堆恶心的宏做到了类似的事情。前些年估计是受不了恶心了,也搞了个vala,从自定的vala语言生成C代码。
所以,C++和C从功能角度上讲,(不考虑用户粘性)应当重新划分成两个新语言:一个是有模板的C,另一个是有类型meta、信号回调、引用计数的高级语言。