- 了解编程语言设计原理有什么用?
- 增强表达想法的能力
- 增强选择合适语言的能力
- 增强学习新语言的能力
- 更好地理解语言的实现
- 编程领域
- 科学研究应用 如 Fortran 计算大量的浮点数
- 商业应用 如 COBOL 处理会计报告
- 人工智能领域 如 LISP Prolog
- 计算机系统编程 如 C/C++ 对性能要求非常高
- Web软件应用 如 HTML, PHP , JAVA 等
-
对一个语言评测的标准
- Readability 可读性
- 这个比较好理解,指的是这个语言的代码是否足够好理解,是否存在歧义(比如 不必要的操作符重载? e.g. C的指针与乘法符号),控制语句,数据类型,结构,语法(臭名昭著的 a++ 和 ++a)等。
- Writability 表达性
- 代码写起来是否简易,支持抽象的能力,表达能力(prolog 可以用5行代码写一个prolog的interpreter)
- Reliability 稳定性
- 类型检查,异常处理,别名问题(aliasing),可读性表达性不足也会导致稳定性差。
- Cost 整体代价
- 学习成本,写代码的效率,编译效率,执行效率,维护等
- Readability 可读性
-
编程语言设计的两大影响因素
-
计算机架构
- 即 von Neumann architecture,数据和程序都存在内存中, CPU与内存分开,靠bus传递信息
- 因此,多数语言都有 变量,赋值 这些概念
- CPU和内存直接的信息通道传递速度远比CPU处理速度慢,这成了最大的瓶颈。
-
编程方法论
- 如面向过程,面向对象,函数式编程等
-
-
编程语言的三种实现
- 编译型
- 程序被编译转换成机器代码
- 优点:程序运行速度快,效率高
- 缺点:编译时间相对较长
- 解释型
- 程序运行在解释器中,解释器对于这种语言相当于一个虚拟的计算机。
- 优点:非常易于debug,因为错误信息可以即时显示
- 缺点:执行效率低;无论之前执行过多少次,每个语句都需要被decode后才能执行; 通常需要更多的内存空间
- 混合实现
- 先编译成一个中间语言,再运行在解释器中
- 优点:效率比纯解释型高,因为高级语言被编译成了中间语言,也就是只decode一次 ; 可移植性高 portability,只要有各平台的解释器,程序只需要编译一次,就能在各平台中执行(比如Java)。
- JIT (just-in-time)系统,可以将按需将代码编译成机器码,以便之后反复使用,提高执行效率。
- 编译型