程序的编译与解释的区别

知乎上的神比喻:


各自特点:

编译型是使用编译器编译后生成计算机硬件可直接执行的指令,解释型是在运行时才由解释器逐语句去执行。编译型代表:C&C++,C#,Java,解释型代表:html,javascript。区别有很多,说说常见的几个:
1 编译型语言的源代码有错误编译不通过,无法生成可执行代码,更无法执行程序;解释型语言只有执行时才会判断是否出错,即使一句出错,也可以继续执行下一句。
2 编译型语言都为强类型,即必须说明数据的类型,如int a;解释型语言多为弱类型,如js中var a,a可以为字符串也可以为整形。
3 编译型语言执行效率上大大优于解释型,主要因为编译器在编译过程中会根据不同平台自动优化目标代码,且特点为1次编译,N次运行,另外强类型的程序安全性高;解释型语言无上述过程,逐语句翻译造成执行效率低下,每次执行都会重复解释一遍,并且安全性低。
4 编译型程序适合对通用性,重复性,高效性有要求的系统,如开发操作系统;相比解释型语言更具灵活性,如开发网站前台页。


附:一博主的分析:


 作为程序开发人员,经常会听到说这种语言是编译型语言,哪种是解释性语言,是不是会搞糊涂,在这里笔者浅谈一下编译器和解释器的认识。首先想谈一些编译器和解释器,如果学过编译原理的朋友都知道,这两者的区别,现在帮读者一起回忆一下。

一、编译器

     简单说,就是把源程序翻译成机器语言,源程序一般是高级语言,比如现在主流开发语言CC++C#Java, 机器语言就是机器可以直接读的,一般来说不同的机器语言不同。编译器的主要结构如下:


通过上图可以看到: 整个编译过程主要分为五步骤,如果细分的话,会包括词法分析,语法分析,语义分析等等,下面引用一直以前网友的图片:


这样就可以全面看到了整个编译器的执行过程。现在编译C语言的,gcc 或者javac都属于编译器。

二、解释器

 解释器又名直译器, 是一种能够把高级编程语言逐行转译,它不会先一次性把整个程序转译过来。因此执行过程比较慢。像目前流行的python和ruby都是解释性语言。

再引用一张大牛的图片,和大家分享。



由于解释器逐行解释太慢,所以对其进行不断的优化,现在解释器运行程序的方法主要有以下三种:

1.直接运行高级编程语言 (如 Shell 自带的解释器)


2.转换高级编程语言码到一些有效率的字节码 (Bytecode),并运行这些字节码


3.以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如:JIT)

可以看到第二种方法,解释器会先把高级语言转为字节码,然后再运行。这样效率就有了很大提高。现在python就是用用这种方法。





附:https://www.zhihu.com/question/21486706

http://blog.csdn.net/sxb0841901116/article/details/21351725

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读