Unix技术发展与C语言、软件工具的崛起
1. egrep的优化与Unix精神
在Unix的发展历程中,egrep的优化是一个典型案例。最初,将其编译成识别器需要约30秒,但之后采用了一种巧妙策略:在需要时才惰性生成识别器的部分,而非提前全部生成。这样,指数级数量的状态中只有极小一部分被构建,这一改变让egrep无论处理多么复杂的模式,运行速度都很快。这体现了Unix解决问题的一贯方式:从实际用户的真实问题出发,运用相关理论知识,通过有效的工程实践让理论在实际中发挥作用,并持续改进。这一切得益于团队的广泛专业知识、开放的环境和勇于尝试新想法的文化。
2. C语言的诞生与发展
- 早期语言尝试:Multics尝试用高级语言PL/I编写操作系统,但该语言过于庞大复杂,难以编译,其简化版EPL也仍不简单。而BCPL是为系统编程设计的语言,相对简单,适合编写操作系统代码,Bell Labs参与Multics项目的人员对其很熟悉。
- B语言的出现:当Bell Labs退出Multics后,Ken Thompson想为PDP - 7编写Fortran编译器,但因PDP - 7 Unix用户程序主内存有限而失败。他不断重新设计,最终创造了B语言。B语言可看作无类型的C语言,更准确地说,是经过Thompson大脑过滤并适配8K内存的BCPL。
- 从B到C:早期计算机多是“字导向”的,处理字节不方便。而PDP - 11是“字节导向”的,B语言不适合,于是Dennis开始改进B语言,新语言最初叫“NB”,最终演变成C语言。C语言支持与P