一、C++之争议
关于 C++ 为何不加入垃圾回收机制的争论一直都在进行。
这里我才疏学浅,不敢妄言,直接粘贴出 《C++语言的设计和演化》的作者原文。
二、C++之父所说
这里翻到了《C++语言的设计和演化》的英文原版语录,在书籍的第 60 页(英文原版):
The possibility of automatic garbage collection was considered on serveral occasions before 1985 and deemed unsuitable for a language already in use for real-time processing and hard-core systems tasks such as device drivers. In those days, garbage collectors were less sophisticated than they are today, and the processing power and memeory capacity of the average computer were small fractions of what today’s sys-collection-based systems convinced me that garbage collection was unaffordable by me and my colleagues for the kind of applications we were writing. Had C with Classes (or even C++) been defined to require automatic garbage collection, it would have been more elegant, but stillborn.
英文原文看不懂,也可以看看裘宗燕翻译的版本原话,此文在中文版的第 34 页:
在 1985 年之前的一段时间里也考虑过自动废料收集的可能性,但后来还是相信,对一个已经被用在实时处理和硬核心系统(例如设备驱动程序)的语言而言,这种特征是不合适的。在那段日子里废料收集还没有今天的复杂,而与今天的系统相比,一般计算机的处理能力和存储容量也是非常低的。我自己使用 Simula 的个人经验以及其他关于基于废料收集的系统的报告都使我相信,对于我和我的同事所要写的这类应用系统而言,废料收集是无法承受的东西。如果带类的 C (甚至是 C++)被定义成需要自动废料收集的语言,它一定会更优雅些,但也会是一个死胎。
三、总结
记得之前看 《Sqlite权威指南》的时候,作者说过这么一句话(意译):
Sqlite 的优点即是精心设计的结果
Sqlite 的缺点也是各方权衡精心设计出来的结果
也就是说,对于设计者来说,他能考虑到的基本都考虑到了,但是他还是选择了这样的设计,那就是考虑了各个因素之后的权衡,其中最重要的,当然还是该设计的最终目标是什么。
脱离了设计目标,谈一切的设计问题都是空话。