跳到正文
IGCSE·Tuition
计算机科学 · 课程

比较解释器与编译器的行为

你记得两者都是翻译代码,但一遇到报错或速度的题目,两者就混在一起。

本页内容
  1. 为什么程序需要翻译?
  2. 两者的行为如何?
  3. 例题详解
  4. 要留意的错误
  5. 自我检测
  6. 接下来学什么

**编译器(compiler)**在程序运行之前,一次把整个程序从高级语言翻译成机器码。**解释器(interpreter)**则一次翻译并运行一条语句。考题要你比较两者,常见角度是报错方式、速度或发布方式。

本课接在操作系统与应用软件的角色之后,属于软件与系统模块。

为什么程序需要翻译?

处理器只懂机器码,也就是二进制指令。人们用 Python 这类高级语言写程序,是因为它容易阅读。翻译器填补了这个差距。

你写的程序是源代码(source code)。编译器生成的是目标代码(object code),也就是可执行文件。解释器不会生成独立文件。

两者的行为如何?

特点编译器解释器
翻译方式一次翻译整个程序运行时一次翻译一条语句
输出独立的可执行文件不产生文件
错误尝试完整个程序后列出错误;修正前什么都不会运行在第一个错误处停止;之前的行已经运行过
再次运行直接运行可执行文件,不需要翻译器每次都重新翻译
运行速度较快较慢
发布用户拿到可执行文件,看不到源代码用户需要解释器和源代码

例题详解

下面的短程序在第 4 行有错误,因为输入了 totl 而不是 total。

1  total ← 0
2  OUTPUT "Start"
3  total ← total + 5
4  OUTPUT totl
5  OUTPUT "Done"

解释器,逐步追踪:

步骤行发生什么屏幕输出
11total 设为 0无
22显示 StartStart
33total 变为 5无
44totl 未定义:报错,运行停止错误信息
55从未执行到无

用户会看到”Start”,然后是指向第 4 行的错误信息。

编译器:编译器先读完全部五行,在第 4 行发现未定义的 totl 并报告。不会生成可执行文件,所以完全不会运行任何东西,“Start”也不会显示。修正第 4 行并重新编译后,可执行文件才会运行,依次显示 Start、5、Done。

要留意的错误

错误答案:“编译器一行一行地翻译程序,遇到错误就停止。”

这描述的是解释器。

编译器处理整个程序,通常会把错误一起报告,所以你可以一次修正好几个。用一个问题检验你的答案:**代码是否在翻译的同时运行?**如果是,那就是解释器。

第二个失误是写”解释器更快,因为它立刻运行”。它确实开始得早,但每次运行都比较慢,因为翻译被重复了。

自我检测

1. 一家公司想出售游戏,又不想让买家看到源代码。哪种翻译器合适?为什么?

显示答案

编译器。它生成由机器码组成的可执行文件,公司可以发布该文件而保密源代码。

2. 一位学生在学编程,想一边写一边逐行测试。哪种翻译器合适?为什么?

显示答案

解释器。它立刻运行每条语句,并在第一个错误处停下,学生马上就能看出哪一行有问题。

3. 用上面的程序,把错字改正(OUTPUT total)后,会显示什么?

显示答案

第 2 行显示 Start。第 3 行使 total 等于 0 + 5 = 5。第 4 行显示 5。第 5 行显示 Done。输出:Start、5、Done。

接下来学什么

接下来看程序运行时处理器如何应对事件,见用情境解释中断。想一步一步观察循环的追踪,可以试试受限伪代码追踪训练器。

比较题奖励精确的对比用语,例如”整个程序”和”一次一条语句”。线上一对一计算机科学补习的老师可以帮你把这些措辞打磨得更利落。

常见问题

编译器会运行程序吗?

不会。编译器把整个源代码翻译成机器码,生成一个独立的可执行文件。程序之后再运行,此时不需要编译器在场。解释器则把两件事一起做,一次翻译并运行一条语句。

为什么写程序时解释器很有用?

解释器立即运行代码,并在第一个错误处停下,所以程序员能很快看到出错的那一行并修正。不需要等待完整翻译。这适合测试和学习,不过每次运行都比较慢。

哪一种执行得更快?

编译后的代码通常运行更快,因为翻译已经完成,处理器直接执行机器码。解释执行的代码每次运行都要重新翻译。请把这写成运行速度的比较,而不是开始测试的速度。

更新于:

下一步

如果编译器与解释器的答案写在纸上仍然听起来一样,一对一的老师可以让你在新情境中分别解释,直到区别成为本能。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生