为了让更多的人能够从本质上理解编译器和解释器的区别,我杜撰了一个小故事

来福与旺财的养牛场

来福和旺财有一个养 牛场。本来养牛不是一件太难的事情,但是偏偏他俩养的牛都有特别的怪癖。奶牛阿圆只吃切成圆形的牧草,而奶牛阿方和阿三(印度来的?)分别只吃切成正方形 和三角形的牧草。如果来福和旺财拿不和奶牛性格的草去喂食,阿X们不但不产奶而且还会鄙视来福和旺财。

于是来福和旺财分别有了自己的主意

来福的方案:
来福发明了三套大型碾碎机:圆圆碾碎机,方方碾碎机和三三碾碎机。每天收割了牧草,就分别放到这三套机器里碾碎给三头奶牛吃。但是一旦被碾碎了,这堆草就只能给某一头牛吃了。很明显阿方是不会吃给阿圆准备的草的。而且来福每天都要操作这三台机器,觉得比较麻烦。

旺财的方案:
旺财在考察了来福的方案后,发现每天操作三台机器真的很麻烦,而且有时有的牛吃不完,有的牛不够吃时,还不能在奶牛之间调配碾碎了的牧草。所以旺财有了不同的想法:口罩型碾碎机。

就像在图上看到的,旺财给每头奶牛装配了一台口罩碾碎机,所以三头牛完全可以在一个槽里吃草了,在吃之前口罩会自动把牧草碾碎成适合该牛食用的类型。旺财就轻松了,他每天只需要割割草就行了。

但是旺财被鄙视了???

是的,被来福鄙视了。来福观察后发现,旺财的口罩碾碎机的效率很低(因为比较小嘛)。阿圆食量大,吃来福的圆圆碾碎机的食物一个小时就饱了,但是戴着口罩吃的时候要吃十个小时!所以来福认为旺财的口罩碾碎机虽然省事,但只能喂喂小牛,完全不适合食量大的牛。

旺财也觉得这样做有问题,但他不想回到来福方案上,他改进了口罩方案:牧草预切割机。

呵呵,看到预切割做了什么吗?它把牧草割得小了一些,所以需要口罩碾碎机做的事情就少多了。(当然口罩碾碎机也要作适当改进适合预切割后的牧草,所以图上用蓝色表示)阿圆以前用口罩不是要吃十个小时吗,现在两三个小时就可以了。

编译器与解释器

好的,谢谢你有耐心看到这里,经过上面那个不太恰当的例子,相信你已经相当的糊涂了。那么我们试着回到技术方面来。
在上面的例子中
牧草 = 我们的各种编程语言,C/C++/C#, Java, Pascal, PHP, Python, Perl, Java Script等等
切割机 = 各种编译器
奶牛 = 各种CPU(不要告诉我Intel和AMD哦),比如x86,ARM,MIPS等等
那你应该知道了为什么奶牛会有吃不同形状牧草的嗜好了,这个奇怪的比喻是为了表示不同的CPU接受的不同的机器语言。

对应上面的奶牛图,编译器的图是这样的

源代码被编译成机器码,在CPU上运行。

而解释器是这样的

用解释器很方便,只需要直接“运行”就好了,不用像C那样有编译链接的工序。

为什么说这些语言是跨平台的?因为你写了程序以后,如果这个平台上有这种语言的解释器,只需要拿到这个平台上直接运行就可以了。你可以理解为:解释器是在“一边编译,一边运行”,它只是把以前程序员手工做的编译过程放在了运行程序的时候进行。

为什么我们一般说解释器的效率比较低?你也可以想象的是,一段程序在解释器中运行时可能会被编译多次,因为每次运行到这段程序时,都会重新编译一次,这样的开销是很大的。

所以诞生了Java,C#这样的预编译语言:

在运行之前,需要手动把源代码编译成中间代码(Java里叫字节码),然后在解释器中执行。
这种架构避免了上面纯解释器中编译源代码的开销,所以相对会有效率一些。

但 是我不能骗你们,其实我画在纯解释器中的Python,Perl,PHP可能都不会是真的纯解释执行的,这样实在是太没有效率。Python在运行时会生 成pyc的二进制临时文件,看起来很像是预编译的结果。只有JavaScript这种真的不会写得太长的语言(Ajax请原谅我)才会采用纯解释的运行方 式。

zz from http://www.cppblog.com/pengkuny/articles/23106.html

width="728" scrolling="no" height="90" frameborder="0" align="middle" src="http://download1.csdn.net/down3/20070601/01184120111.htm" marginheight="0" marginwidth="0">

关于编译器与解释器的区别相关推荐

  1. python编辑器和python解释器的区别_python编译器和解释器的区别

    高级语言不能直接被机器所理解执行,所以都需要一个翻译的阶段,解释型语言用到的是解释器,编译型语言用到的是编译器. 编译型语言通常的执行过程是:源代码--预处理器--编译器--目标代码--链接器--可执 ...

  2. 编译器与解释器的区别

    为了让更多的人能够从本质上理解编译器和解释器的区别,我杜撰了一个小故事 来福与旺财的养牛场 来福和旺财有一 个养 牛场.本来养牛不是一件太难的事情,但是偏偏他俩养的牛都有特别的怪癖.奶牛阿圆只吃切成圆 ...

  3. python常用编译器和解释器的区别_Python常用编译器原理及特点解析

    python要知道怎么用好编译器.当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Pyt ...

  4. 编译型语言和解释型语言区别,编译器,解释器的区别

    http://c.biancheng.net/cpp/view/6994.html 任何代码最终都要被"翻译"成二进制的形式才能在计算机中执行. 有的编程语言,如 C/C++.Pa ...

  5. 【python教程入门学习】详解python编译器和解释器的区别

    高级语言不能直接被机器所理解执行,所以都需要一个翻译的阶段,解释型语言用到的是解释器,编译型语言用到的是编译器. 编译型语言通常的执行过程是:源代码--预处理器--编译器--目标代码--链接器--可执 ...

  6. 斯坦福大学CS143编译原理课程笔记:1.编译器与解释器简介

    目录 前言 第一节课:编译器与解释器简介 线上与线下的概念 线上 线下 编译器与解释器的区别 编译器 解释器 FORTRAN 1结构 它包含五个阶段 1.词法 分析 2.语法解析 3.语义分析 4.优 ...

  7. 看完这篇带你完全理清IDE、编辑器、编译器、解释器和调试器的概念

    IDE.编辑器.编译器.解释器与调试器 写在前面 IDE 编辑器 编译器 解释器 调试器 编译器和解释器的区别和优缺点 编译器和调试器的区别 写在前面 对于这些概念,简单记录一下自己的理解,如果有不对 ...

  8. 超级经典的对编译器和解释器的解释

    为了让更多的人能够从本质上理解编译器和解释器的区别,我杜撰了一个小故事 来福与旺财的养牛场 来福和旺财有一个养牛场.本来养牛不是一件太难的事情,但是偏偏他俩养的牛都有特别的怪癖.奶牛阿圆只吃切成圆形的 ...

  9. 编译器与解释器的不同

    为了让更多的人能够从本质上理解编译器和解释器的区别,我杜撰了一个小故事 来福与旺财的养牛场 来福和旺财有一个养牛场.本来养牛不是一件太难的事情,但是偏偏他俩养的牛都有特别的怪癖.奶牛阿圆只吃切成圆形的 ...

最新文章

  1. Redis 在CentOS 6上的 安装和部署以及redis的主从复制sentinel实现HA
  2. 【Paper】2020_Distributed optimal consensus with obstacle avoidance algorithm of mixed-order UAVs
  3. 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
  4. SAP发布S4/HANA 意义超过R3
  5. oracle定时器在项目中的应用
  6. Chrome开发者工具使用console.trace的一个小技巧
  7. ai 中 统计_AI统计(第2部分)
  8. SublimeText2 快捷键
  9. Linux 零拷贝方案
  10. Python入门--元组的创建,(),tuple()
  11. jQuery常用操作部分总结
  12. WebRTC学习资料大全
  13. python百度文库下载器_真正百度文库免费下载,比冰点文库下载器还更牛x!
  14. PMP和PRINCE2到底有什么区别?哪个含金量更高?
  15. 2022QS榜单发布!计算机专业排名MIT霸榜,清华排15,北大跌出TOP20
  16. PHP学习之如何写一个项目?需求分析
  17. python代码情话_python教你谈恋爱-之-土味情话5000条
  18. Cent OS网络基本配置——修改配置文件
  19. 计算机电池电源转换,图吧小白教程 篇七十七:只需一步,延长MACBOOK电池寿命(硬改电源)...
  20. 蓝桥云课linux入门4:目录结构及文件基本操作

热门文章

  1. 微信公众号批量推送java_微信批量关注公众号、推送消息的方法!
  2. 湖北省加快推进云计算标准化促大数据产业发展
  3. python安装fitz时出问题,解决方案
  4. MapReduce分布式计算框架的优缺点
  5. 【华为OD机试真题 python】VLAN资源池 【2022 Q4 | 100分】
  6. 如何实现一个高效的关键词过滤功能?——DFA算法
  7. 华为app测试软件,测评:华为最新移动应用/APP测试工具MobileTest
  8. 引用网络图片 403拒绝访问
  9. Android开发笔记之简易画画板的制作
  10. SecureFile 和 DBFS