儿子和女儿——解释器和编译器的区别与联系
https://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html
菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。
高手说:
“
解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。
编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。
”
菜鸟说:“我还是不明白,能给个形象的比喻么?”
高手说:“给你讲个故事。”
母亲打电话给儿子说:“你爸最近身体不好,家里人少不热闹”。
儿子想,对啊,爸年纪大了,身体不好,买点牦牛骨髓壮骨粉不错,于是儿子就去超市买了牦牛骨髓壮骨粉。
儿子又想啊,最近黄金搭档很火,买点给爸试试。于是儿子又去买了黄金搭档。
从超市回来后,儿子又寻思母亲说的“家里不热闹”,嗯,家里的小皇帝自从上寄宿学校后就比较少回来,估计是老人家想孙子了。儿子于是给上高中的儿子打了个电话,让他周末回来看看。
母亲打电话给女儿说:“你爸最近身体不好,家里人少不热闹”。
女儿就想,应该给爸做点什么呢?于是她拿出张纸开始罗列条目,先写上了壮骨粉和黄金搭档。然后,想着让老人家看看外孙应该不错,于是就在纸上加上了一句,一家人回爸妈那里看望看望。最后纸上就写着:
1.壮骨粉和黄金搭档
2.一家人去看望爸妈
女儿见到女婿后,就将这张纸上的信息编成短信发给了工作的女婿。
女婿一看就明白了,下班后先去超市买了补品,然后开车回家带着妻儿就去看望岳父岳母了。
想到什么了吗?
菜鸟说:
我这样说不知道对不对:儿子就像是解释器,是想到一点做一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出所有要做的事情,女婿就按着指示办事了。
高手说:
就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言--短信,整个由女婿直接执行。后者的执行效率会更高。
从功能上看,解释器和编译器确实不一样。
然而,从流程和结构上看,二者却非常相似。
儿子和女儿听到母亲的话以后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都做出了自己的决定。只不过一个直接去做了,另一个却将所要做的事情翻译成另一种载体--短信--给存储起来。
解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如下图所示:
总之,解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这也是很多人将二者混淆的原因之一。究竟是开发解析器还是编译器?只需要依据功能上的实际需要来做出决定就ok了。
转载于:https://www.cnblogs.com/maidongdong/p/11231538.html
儿子和女儿——解释器和编译器的区别与联系相关推荐
- 解释器和编译器的区别
--------------------------------------------- -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163.com ------------ ...
- 笔记:关于解释器与编译器以及机器语言与机器语言的二进制文件
关于解释器和编译器的区别: 解释器是一种能够读取和执行源代码的软件程序.它可以将源代码逐行翻译成机器语言,并执行这些指令.与编译器不同,编译器是把源代码翻译成机器语言的二进制文件,然后再执行这个二进制 ...
- C++ 笔记(01)— 环境设置(安装g++、g++ 编译 C++、 生成可执行文件流程、解释器与编译器区别)
1. g++安装 在 Linux 或者 UNIX 系统上,可以通过下面命令来查看是否安装了 GCC . $ g++ -v 如果已经安装 GNU 编译器,则有以下输出: wohu@wohu:~/C++$ ...
- JVM解释器和编译器
首先看一个命令 [root@insure ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Enviro ...
- 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器
编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...
- 执行引擎、解释器、编译器、JIT编译器的恩怨情仇
学习宋红康老师的JVM课程已经有一段时间了,学习过程中发现,有些内容遗忘得很快,虽然自己也用印象笔记记录了,但是如果没有输出,知识仍然不能完全地消化.因此,决定在JVM专栏中记录和总结学过的内容,欢迎 ...
- jvm与jit编译器的区别_了解jvm和jit编译器的第1部分
jvm与jit编译器的区别 Hello people!! 大家好!! I can see that the Java community is growing a lot but there are ...
- rasp 系统_RASP研发踩坑之 解释器与编译器
怪力乱神 一般认为开启注入后,http调用栈变长,响应时间变长了,系统的 QPS下降,但是我的组员在对RASP 进行性能压测时发现了一个"奇怪的事情",相比于没有开启注入的场景,开 ...
- 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。
问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步. 问题分析及思路: 本题 ...
最新文章
- JFreeChart DateAxis用法
- 亚洲游戏行业遭遇史上最大DDoS攻击,微软:我给扛下来了
- RecyclerView复杂适配器的终极形态?代码更解耦
- 即时通讯音视频开发(八):常见的实时语音通讯编码标准
- 【网址收藏】kubebuiler中文文档
- 消息队列之RabbitMQ
- Cloud for Customer的设置加载机制
- 20-21-2网络管理quiz5
- 《大数据——大价值、大机遇、大变革》试读
- 强大的日志分析工具AWStats
- 13. Django基础:admin后台管理
- 互联网专用计算机屏保,18个Windows 98屏保,简直怀念!
- 网卡82546驱动linux,Dell服务器常见Linux驱动选择
- SAP UI5 初学 ( 一 )、简介
- Windows快捷键
- SSL证书以及其验证过程
- C++基础面试问题总结
- 让靠谱的人推荐靠谱的人:基于关系链计算的职场社交应用“脉脉”,上线“好友推荐候选人”功能
- 基于android的线上教育app
- append()方法