17.1.1 程序设计语言概述
程序设计语言是人与计算机之间的约定:人用它描述计算过程,机器通过语言处理程序把这些描述转成可执行的动作。课程里反复强调“机器真正认识的是二进制指令”,这是理解本章的起点。
语言层次
| 层次 | 表达方式 | 优点 | 缺点 | 典型考点 |
|---|---|---|---|---|
| 机器语言 | 二进制指令 | 机器可直接执行,效率高 | 难写、难读、依赖机器 | “可直接执行”的语言 |
| 汇编语言 | 助记符表示机器指令 | 比机器语言易读,仍能控制硬件细节 | 依赖具体机器,需要汇编 | “助记符”基本指向汇编 |
| 高级语言 | 接近自然语言和数学表达 | 可读性、可移植性、开发效率高 | 需要编译或解释 | C、Java、Python 等 |
为什么需要语言处理程序
高级语言写出来的是源程序,源程序本身不是 CPU 能直接执行的指令序列。语言处理程序的任务就是在“人能理解的表达”和“机器能执行的指令”之间架桥。
mermaid
flowchart LR
A["高级语言源程序"] --> B["语言处理程序"]
B --> C["目标程序或运行动作"]
C --> D["机器执行"]这里的“处理”有两条主要路线:编译和解释。编译偏向先整体翻译再执行,解释偏向运行时边处理边执行。它们的差别会在下一节展开。
低级与高级,不是好坏而是抽象层次
低级语言更接近机器,所以程序员能直接关心寄存器、地址、指令和硬件约束。高级语言更接近问题本身,程序员可以用变量、函数、对象、数据结构来表达业务逻辑。技术迭代的方向大多是提高抽象层次,但抽象越高,运行时、编译器或虚拟机就要承担更多工作。
| 方向 | 为什么出现 | 代价 |
|---|---|---|
| 机器语言 -> 汇编语言 | 二进制太难记,用助记符提高可读性 | 仍然强依赖硬件 |
| 汇编语言 -> 高级语言 | 大型程序需要可维护、可移植、可复用 | 需要编译/解释,底层控制变间接 |
| 高级语言 -> 脚本/托管语言 | 更重视开发效率、跨平台和生态 | 性能、运行环境依赖可能增加 |
考试怎么考
看到“二进制指令、机器可直接执行”,优先判断为机器语言。看到“助记符”,优先判断为汇编语言。看到“源程序需要翻译/解释”,一般在考高级语言与语言处理程序的关系。
小练习
题:高级语言程序为什么通常不能被 CPU 直接执行?
答:高级语言源程序是面向人的符号化描述,CPU 只能执行特定机器指令,需要通过编译程序或解释程序转换为机器可执行的形式或运行动作。
自查
- “可移植性更好”为什么通常对应高级语言?
- 汇编语言为什么比机器语言好写但仍然依赖机器?
- 语言处理程序在本章后续编译流程中扮演什么角色?