好的语言是怎么来的? 有人说, 是设计出来的, 有人说, 是抄出来的. newbie 说, 是实践来的.
什么是实践呢? 实践, 就是摸石头过河, 吸收合适的, 抛弃不合适的. 这不就是进化吗?
正如好的物种是进化来的一样, 好的语言也是进化来的.
物种的进化, 首先是要适应已有的环境, 然后才是展望未来, 设法适应未来的环境. 即使某些功能器官已经不再需要, 仍然保留着进化的痕迹. 进化是不可逆的. 如果一开始因为环境因素, 进化出的生物特性在后来的环境变化中是非常有害的, 进化却不能推倒重来. 只能继续在这个不利的基础上改进.
认识到这一点, 再回过头来审视 C++ 语言. C++ 语言的许多缺陷, 来自对 C 的兼容, 或者确切的说, 是因为从 C 语言开始进化的, 对C的兼容, 就是进化的痕迹. 进化不能推倒重来, 只能在 C 这个不利的基础上改进.
但是, C 的不利, 是站在今天的角度看的. 在当时, C 是最成功的语言. 兼容 C, 是最有利于发展的. 从 C 开始进化, 在当时就是最好的选择. 而进化, 就是当年最优秀的物种才得以继续发展演化.
C 当年是最好最成功的语言, 那么进化就会发生在 C 的身上, 而不是其他语言的身上. 正如远古的猿类进化成了人, 同时也进化出了猴子一样, 远古的 C 语言进化出了 C++, 也会有顽固分子选择止步不前, 就有了现在的 C. 猴子当然不如人, 但是猴子也会存在. 所以 C 会继续存在. 但是真正的发展是看C++的.
C++ 的进化, 是采用”遗传学算法” 进行的. 遗传学算法, 需要一个是否更适用的判定函数, 和一个随机发展的过程函数. 每一个发展, 都是在原有的基础上进行迭代, 然后送入判定函数. 每一次迭代, 都会保留既有的成分.
C++的发展函数, 靠的是社区大量提交的提案.而判定, 则交给标准委员会的人投票表决. 提案首先要经过一个硬指标, 就是 C++ 之父设定的 零开销原则和兼容 原则. 而后才能进入是否更符合现代的软件工程实践的讨论中去.
因此, 社会的发展, 对语言的需求, 推动了C++的发展, C++ 一直在适应不断变化的市场, 而唯一不变的, 是 “零开销和兼容上一个版本”. 因此, 零开销和兼容 才是C++的根本, 其他的语法糖, 都是进化的痕迹.
C++ 是进化来的, 不可避免的会携带历史的包袱, 可正是因为他是进化来的, 他会携带的不仅仅是历史的包袱, 还有历史的财富. 丢弃包袱, 常常意味着放弃了财富, 我们的社会从来都不倾向于白手起家. 没有财富, 就要从头积累.
问题是: 谁能积累的有 C++ 多?
Comments