1.定义人和计算机沟通的语言2.编程语言的分类Ⅰ 按级别分类①机器语言只由0 和 1组成计算机直接执行不需要翻译优点最快、最省资源缺点极难读、难写、难记、难改②汇编语言用英文助记符代替 0/1如MOV、ADD、SUB本质和机器语言一一对应需要汇编器Assembler翻译成机器语言才能被计算机执行优点比机器语言好懂缺点仍然难用、和硬件紧密相关③高级语言接近人类自然语言英语完全屏蔽硬件细节需要编译 / 解释后运行优点易学、易读、易维护、可移植缺点运行效率略低于低级语言Ⅱ 按翻译方式分类①编译型语言写好代码 →一次性全部翻译成机器语言→生成可执行文件代表C、C、Go特点运行快修改后要重新编译②解释型语言代码边翻译边执行不生成整体可执行文件代表Python、JavaScript、PHP特点简单灵活运行速度稍慢3.高级语言的执行高级语言不能直接被执行必须翻译成机器语言才可以被计算机执行。其中翻译有两种方式编译一次全翻解释边翻边跑Ⅰ 编译方式从源程序到可执行文件步骤如下以C语言为例int a 10; int b 20; int c a b;源文件为.c文件1. 预处理Preprocessing预处理器对源程序中的以#开头的命令进行处理#include、#define展开头文件、宏替换生成.i 文件1.展开头文件#include stdio.h 不是 “导入功能”而是把头文件里的代码原封不动复制粘贴到 .c 文件里举例比如我写的 test.c#include stdio.h int main() { printf(hello); return 0; }预处理时编译器做了一件事找到stdio.h这个文件 → 把它里面几百行代码全部复制过来 → 替换掉 #include 这一行结果变成// 这里是几百行 stdio.h 内容被粘贴进来 int printf(const char *format, ...); // ...其他声明 int main() { printf(hello); return 0; }这就叫展开头文件2.宏替换在编译前把代码里的某段文字简单粗暴替换成另一段文字纯文本替换举例如下#define PI 3.14159把代码里所有出现PI的地方替换成3.14159带参数的宏#define SQUARE(x) x*x把代码里所有出现SQUARE(?)替换成 * 比如int a SQUARE(32); 以为是 5 * 5 25 其实是 int a 3 2 * 3 2 11宏替换的三大特点发生在预处理阶段早于编译纯文本替换无脑替换不计算、不理解逻辑不分配内存没有类型不做语法检查2. 编译CompilationC 代码 → 汇编代码语法检查生成.s 汇编文件例MOV AX,10 MOV BX,20 ADD AX,BX3. 汇编Assembly汇编代码 → 机器码二进制目标文件生成.objWindows或.oLinux这一步已经是 0 和 1但还不能直接运行。4. 链接Linking把多个.o系统库函数合并生成最终可执行文件 .exe二进制机器码→CPU 直接运行不再需要源代码Ⅱ 解释方式源代码 → 解释器 → 逐行翻译 → 立即执行不生成可执行文件不保存翻译结果。以python文件为例.py源代码解释器Interpreter读取一行立即翻译一行成机器码CPU 立即执行一行然后读下一行特点不保存翻译结果下次运行还要重新翻译运行速度慢Ⅲ 现代python文件的执行现代 Python 不是纯解释型而是先编译 → 再解释混合机制完整流程源代码 (.py) → 编译 → 字节码 (.pyc) → 虚拟机 (PVM) → 机器码 → CPU 执行第 1 步源代码.py 文件a 10 b 20 c a b print(c)第 2 步Python 编译器编译成 字节码BytecodePython 会先把整个文件一次性编译编译结果不是机器码是一种中间代码字节码文件后缀.pyc(compile 编译)特点跨平台Windows、Mac、Linux 都能用比源代码运行更快人看不懂但Python 虚拟机看得懂第 3 步字节码交给 Python 虚拟机PVM进行解释执行PVM Python 虚拟机它是一个最终翻译官。它做的事逐行读取字节码逐行翻译成机器码0 和 1立即交给 CPU 执行第 4 步CPU 执行机器码CPU 只认机器码执行后输出结果30