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++被有意设计成能够支持各种各样的风格,而不是强调“一条真理之路”