C++语言的设计与演化
标题党.
C++的目的是成为betterC,所以如果Cpp成功,是因为cpp设计的好,还是因为C本身好?
后者的例子是,object pascal失败了,是因为pascal不如C么?
总之,cpp的成功不能证明它是一个好语言,事实上,它是一个很坏的语言,至少virtual在cpp11里面引入了override,是一个当初的设计失误.
但是cpp11试图以旧代码源码兼容,使得语言越来越复杂,这一点,python3就比较果断,勇于实践不兼容python2.
Anyway,在cpp之后,已经有两代人三位天才explict挑战cpp:
1 java 1995
2. golang/rust 2009/2015
我们把golang和rust归入一代,它们的区别是是否有GC
以下表格列出了每一代设计者的思考:
C++的坏特性
|
java的选择
|
golang的选择
|
c++ 11的特性
|
评论
|
引用类型
|
obj一律在堆上
|
使用C的指针语法
|
|
C的指针语法并不复杂,cpp使用引用语法带给了程序员负担,cpp11引入了右值引用更加使得语言复杂
|
无法返回栈变量
|
|
变量逃逸
|
|
|
异常很难用
|
重新设计
|
不要异常
|
|
|
virtual关键字
|
默认virtual所以不需要关键字
|
|
override
|
override是抄袭了c#
|
需要头文件
|
type信息写入二进制class中
|
同java
|
|
|