• 也谈编译 VS 解释


    语言发展

     

      计算机的硬件仅仅能识别01组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低。更让人难以理解。

    因此聪明的人类发明了汇编语言。它使用符号来表示指令,比如用ADD表示加法。这就easy理解了。可是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言。所以称它为低级语言。

    对应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言。称为高级语言。比如VB,C++,C#,Java等,大家都挺熟悉的。

      可是计算机不能直接理解这些高级语言。仅仅能直接理解机器语言,所以必需要把高级语言翻译成低级语言,计算机才干运行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释

     

    编译程序

     

      编译过程,是将全部的源码指令一次性翻译成目标程序,然后再运行。这个步骤例如以下:

      编译器将高级语言从源码翻译成与之等价的目标程序(一次性所有翻译完),在随后的某个时刻。用户启动目标程序由操作系统运行。

      

      编译程序具体过程:

      编译器首先对源程序进行词法,语法,语义的分析,将源程序变成一种内部表达形式,叫做中间代码。中间代码是一种结构简单,表意明白的记号系统,能easy的将他翻译成目标代码。

      目标代码分为两类:汇编语言形式和机器指令形式。

      

    解释程序


      解释过程。就是对于源文件里的每一条指令。都依次翻译成目标指令(这是和编译不同的,解释程序没有目标程序)。而且运行的过程。对每条这样的运行过程全然由解释器控制的。

      

      解释程序在词法。语法,语义分析上和编译器的工作原理基本同样。但在执行用户程序时。直接执行源程序或源程序的中间代码程序,中间不会产生目标程序。例如以下图三种方式(C更接近于机器语言)。

      

    编译和解释的比較


    编译:一次编译,多次执行,整体执行较快。效率更高。

    平台依赖性。

    编译好的程序仅仅能在当前平台执行。是个局限性。

    举一个英语翻译的样例:编译过程就是把一遍英文文章所有翻译成中文,然后所有记录在纸上,当我们下次再读这篇英文文章时,直接读已经翻译好的中文文章即可了,速度非常快。

    可是比較依赖这张中文纸。

    解释:解释器实时地解释每一条指令并执行。整体执行比較慢。

    平台无关性。

    不论什么平台仅仅要装上解释器都能够执行全然同样的代码。

    还用英语翻译的样例:解释过程就是没读一个句子就翻译一个句子,下次再读这篇英文文章是,还须要读一读翻译一句。时间慢,效率低,可是这样的方法不须要依赖所谓的中文纸。

     

    发展


      编译和解析相比汇编更加效率,人为理解更加easy。可是编译和解释的优缺点明显,并且还是互补的,有没有更有效率又可移植的编程呢,当然是有的,C#Java,大家都非常熟悉。

      它们是怎样解释的,简单一句话说明吧:

      JAVA:先转换为中间语言,然后在执行时!解释!

      C#:先转换为中间语言,然后在执行时!编译!,且用到多少就编译多少!

     



  • 相关阅读:
    【BZOJ】4636: 蒟蒻的数列
    BZOJ1878 [SDOI2009]HH的项链
    【网络流24题----02】太空飞行计划
    【网络流24题----03】Air Raid最小路径覆盖
    【网络流24题----01】飞行员配对方案问题
    素数判定(米勒测试定理-费马小定理+快速乘)
    一堆模板(丑陋0.0)------数据结构
    丑数(USACO)
    NOI[2001]食物链
    关于Tarjan(2)
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6785842.html
Copyright © 2020-2023  润新知