作为程序开发人员,经常会听到说这种语言是编译型语言,哪种是解释性语言,是不是会搞糊涂,在这里笔者浅谈一下编译器和解释器的认识。首先想谈一些编译器和解释器,如果学过编译原理的朋友都知道,这两者的区别,现在帮读者一起回忆一下。
一、编译器
简单说,就是把源程序翻译成机器语言,源程序一般是高级语言,比如现在主流开发语言C、C++、C#、Java, 机器语言就是机器可以直接读的,一般来说不同的机器语言不同。编译器的主要结构如下:
通过上图可以看到: 整个编译过程主要分为五步骤,如果细分的话,会包括词法分析,语法分析,语义分析等等,下面引用一直以前网友的图片:
这样就可以全面看到了整个编译器的执行过程。现在编译C语言的,gcc 或者javac都属于编译器。
二、解释器
解释器又名直译器, 是一种能够把高级编程语言逐行转译,它不会先一次性把整个程序转译过来。因此执行过程比较慢。像目前流行的python和ruby都是解释性语言。
再引用一张大牛的图片,和大家分享。
由于解释器逐行解释太慢,所以对其进行不断的优化,现在解释器运行程序的方法主要有以下三种:
1.直接运行高级编程语言 (如 Shell 自带的解释器)
2.转换高级编程语言码到一些有效率的字节码 (Bytecode),并运行这些字节码
3.以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序 (例如:JIT)
可以看到第二种方法,解释器会先把高级语言转为字节码,然后再运行。这样效率就有了很大提高。现在python就是用用这种方法。
刚刚学习,有不对之处,请大家指出。。。