浅谈编译器和解释器

时间:2022-08-28 17:09:57

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

一、编译器

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

浅谈编译器和解释器

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

浅谈编译器和解释器

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

二、解释器

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

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


浅谈编译器和解释器

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

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


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


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

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


刚刚学习,有不对之处,请大家指出。。。