C++语言的设计和演化——C++的史前时代
1. Simula语言
- C++语言的诞生诸多借鉴自当年的Simula语言
- Simula语言的一些典型特征:
- 类的机制(class)
- 协程的机制(co-routine)
- 广泛而深入的类型检查
- Simula语言的设计很优秀,但Simula的编译器实现很糟糕,性能极低
2. Pascal语言
- Pascal的类型系统比没有还要坏,它是一件枷衣,所产生的问题比解决的要多
- Pascal的僵硬和Simula的灵活形成鲜明的对比
- 【注】我上大学时学习的第一门语言就是Pascal语言,作为教学用的编程语言,Pascal的规范性极好,适合训练学生规范的编程习惯,但Pascal的语法太过死板
3. 合适的工具
- 在没有合适的工具的情况下绝不去冲击一个问题,不然只会让自己陷入泥潭
- 什么才算是一个好的编程工具:
- 具有Simula那样对程序组织的支持——例如类这种形式的分层结构,对并发的某种形式的支持,以及对基于类的类型系统的强检查(静态检查)
- 编译快,运行效率高。可以通过简单的机制把不同程序编译好的模块连接到一起。
- 移植性好,对宿主系统的依赖性小。
4. 深入C语言
- 1975年开始接触C,对它很欣赏
- 到贝尔实验室后,开始深入了解C语言
- 曾经梦想过基于Simula和Algol68构建自己的语言,后来还是选择了C,因为基于C更容易构建出一个实用的好工具,但诞生的C++中很多的编程思想和策略来源于这两种语言
5. 一般性背景
- 一个系统的结构反映了创建它的那个组织的结构,随之而来的,当一个系统基本上是一个人的工作时,那也应该反映这个人的个人观点
- C++创始人Stroustrup的个人观点
- 原先学习纯数学和应用数学,非常崇尚数学之美,但也抱着解决实际问题的务实态度
- 长期爱好是历史,而且还花了很长时间研究哲学
- 更喜欢实用主义者
- 尊重人群而不尊重人群中的个体,实际上就是什么也不尊重
- 我觉得齐克果对个人的几乎狂热的关心以及敏锐的心理洞察力,这比黑格尔和马克思的抽象的宏伟蓝图和对人性的关心更具感染力
- C++的许多设计决策根源于我对强迫人按某种特定方式行事的极度厌恶
- 对文学的热爱更增强了我的认识:仅根据理论和逻辑做决策是没有希望的
- 如果我试图去取缔一个我个人不喜欢的语言特性,我总抑制住自己这样做的欲望,因为我不认为自己有权把个人观点强加给别人
- 不同的人们却是会按不同的方式思考,喜欢按不同的方式做事情,对这些情况的高度容忍和接收是我最愿意的事情
- 我更喜欢怀疑论者,而不是“真诚的信徒”
- 人们的思维方式是如此的丰富多彩,企图推行一种单一的理念总是弊多于利
- C++被有意设计成能够支持各种各样的风格,而不是强调“一条真理之路”