zoukankan      html  css  js  c++  java
  • ios开发 解释器和编译器

    儿子和女儿——解释器和编译器的区别与联系

     

      菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。

      高手说:

      解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。  

      编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。

      菜鸟说:“我还是不明白,能给个形象的比喻么?”

      高手说:“给你讲个故事。”

      母亲打电话给儿子说:“你爸最近身体不好,家里人少不热闹”。

          儿子想,对啊,爸年纪大了,身体不好,买点牦牛骨髓壮骨粉不错,于是儿子就去超市买了牦牛骨髓壮骨粉。

      儿子又想啊,最近黄金搭档很火,买点给爸试试。于是儿子又去买了黄金搭档。

      从超市回来后,儿子又寻思母亲说的“家里不热闹”,嗯,家里的小皇帝自从上寄宿学校后就比较少回来,估计是老人家想孙子了。儿子于是给上高中的儿子打了个电话,让他周末回来看看。

      

      母亲打电话给女儿说:“你爸最近身体不好,家里人少不热闹”。

      女儿就想,应该给爸做点什么呢?于是她拿出张纸开始罗列条目,先写上了壮骨粉和黄金搭档。然后,想着让老人家看看外孙应该不错,于是就在纸上加上了一句,一家人回爸妈那里看望看望。最后纸上就写着:

      1.壮骨粉和黄金搭档

      2.一家人去看望爸妈

          女儿见到女婿后,就将这张纸上的信息编成短信发给了工作的女婿。

      女婿一看就明白了,下班后先去超市买了补品,然后开车回家带着妻儿就去看望岳父岳母了。

          想到什么了吗?

      菜鸟说:

      我这样说不知道对不对:儿子就像是解释器,是想到一点做一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出所有要做的事情,女婿就按着指示办事了。

      高手说:

      就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言--短信,整个由女婿直接执行。后者的执行效率会更高。

      从功能上看,解释器和编译器确实不一样。

      然而,从流程和结构上看,二者却非常相似。

      儿子和女儿听到母亲的话以后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都做出了自己的决定。只不过一个直接去做了,另一个却将所要做的事情翻译成另一种载体--短信--给存储起来。

          解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如下图所示:

      总之,解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这也是很多人将二者混淆的原因之一。究竟是开发解析器还是编译器?只需要依据功能上的实际需要来做出决定就ok了。
  • 相关阅读:
    Eclipse 导入项目乱码问题(中文乱码)
    sql中视图视图的作用
    Java基础-super关键字与this关键字
    Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解
    Android View和ViewGroup
    工厂方法模式(java 设计模式)
    设计模式(java) 单例模式 单例类
    eclipse乱码解决方法
    No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
    【转】使用 Eclipse 调试 Java 程序的 10 个技巧
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/4090047.html
Copyright © 2011-2022 走看看