编译器与解释器的根本区别是什么?

2016-01-31 20:36:27 +08:00
 zxgngl
11508 次点击
所在节点    程序员
30 条回复
tiancaiamao
2016-02-01 12:08:13 +08:00
推荐 《 Lisp in Small Pieces 》
louk78
2016-02-01 14:58:57 +08:00
编译器是将高级语言翻译为二进制文件
解释器是将 PE 二进制翻译为机器指令
rainex
2016-02-01 18:19:56 +08:00
编译器:源代码->中间代码-> [可执行代码] ->操作系统载入自己执行

解释器分两种:
第一种:源代码-> [中间代码] ->操作系统载入解释器执行
第二种:源代码->操作系统载入解释器执行

也有把第二种解释器算作编译的, C#、 Java 乃至 zend 跑的 php 都类似的机制,但本质上还是一种解释执行。
twd2
2016-02-01 19:19:55 +08:00
编译器就是把源代码一起都翻译成机器看得懂的语言,然后这一坨交给机器来运行。

解释器就是读取一段源代码,翻译成机器看得懂的语言,让机器执行,然后再处理下一段......
rainex
2016-02-01 20:04:35 +08:00
修正 23 楼:

编译器:源代码->中间代码-> [可执行代码] ->操作系统载入自己执行

解释器分两种:
第一种:源代码-> [中间代码] ->操作系统载入解释器执行
第二种:源代码->操作系统载入解释器执行

也有把 [第一种] 解释器算作编译的, C#、 Java 乃至 zend 跑的 php 都类似的机制,但本质上还是一种解释执行。


ps :不能修改的 bbs ,嗯
jybox
2016-02-01 20:32:46 +08:00
我现在觉得可能编译执行和解释执行是一个程度问题,取决于语言的设计和实现上,在编译阶段和运行阶段之间建立了多么强的抽象或隔离。
FlowMEMO
2016-02-01 21:09:40 +08:00
Engineering a Compiler 书中的说法是“ An interpreter takes as input an executable specification and
produces as output the result of executing the specification.”,重要的是产生结果。

书中举例将 PostScript 转换成图像的东西是解释器。从这个角度来看,给定 html 和 css ,浏览器的排版过程也可以看作是解释。
libook
2016-02-01 23:36:38 +08:00
我上学的时候理解的是:编译器就是把源代码转换成机器码的软件,运行的时候直接运行机器码就可以了,不再依赖编译器;解释器就是一个懂得源代码的软件,运行这个软件然后直接让它按照源代码做事,每一个源代码指令编译器都懂得是什么具体的操作,并能立即执行。
如果拿人来做比喻,就是:小 A 跟编译器说想吃螃蟹,于是编译器教会了小 A 如何剥螃蟹;小 B 跟解释器说他也想吃螃蟹,解释器就帮他剥好了螃蟹。这大概就是编译器和解释器的区别吧。
当然实际的编译器和解释器的原理比这要复杂得多,你若真想究其毫厘还是要专门拿几个编译器和解释器来研究一下。
cs202
2016-02-02 07:09:30 +08:00
zxgngl
2016-02-03 04:35:42 +08:00
编译是“转换变换”;解释是“赋予意思”。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/254651

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX