区分编译型语言,解释型语言是否还有意义?

来源:互联网 发布:php常用数组函数 编辑:程序博客网 时间:2024/06/02 06:28

没有意义。编程语言从来没有编译型和解释型之分,只能说一门编程语言的常见执行方式为编译器编译成新代码(交给解释器或者机器码执行),或者解释器解释执行。

  • 什么是编译器?
  • 什么解释器?
  • 总结

什么是编译器?

编译器,简单的说,就是一个程序,它的输入是一种A语言的源代码,输出是一种B语言的源代码,比如C++编译器,将C++源代码编译成为汇编代码。一般来说,A语言和B语言是不同的(但也有相同的情况,一般用于代码优化或者代码混淆)。

编译过程中,并没有要求编译器表现出任何关于源代码定义的行为,它是生成了一个能表现输入源代码行为的新的代码。

什么解释器?

解析器,其实就是一个程序,它的输入是一种语言的源代码,但是它直接执行了源代码(意思是这个程序对外表现了这个源代码定义的行为)

解释器内部的实现一般是一个编译器外加一个虚拟机。
编译器用来将输入的源代码生成中间代码,而虚拟机将中间代码一条条执行(这个执行一般指的是使用C写的执行引擎程序来执行)
一个虚拟机一般是由定义了的中间代码语法,以及一个执行引擎组成,比如JVM和Java字节码。之所以不采用真实的物理机,一是因为物理机的指令集多,各种新架构新增的指令直接写太困难,可移植苦难。俗话说的好计算机领域只要多分几层,没有解决不了的问题。对于一门动态语言(如Java),直接做一个编译器将这门语言和汇编链接到一起,难度太大(尤其是词法分析上),这个时候可以采取间接的定义一套中间码,将源代码编译成为中间码,中间码通过另一个程序(执行引擎,一般是C/C++写的)执行这个中间码,这样效率不会损失太多但大大加快了开发效率。

总结

其实所谓编译型和解释型递归到最后,都是编译型,因为你无论如何都是把代码转换为二进制机器码,而最后的执行,其实就是一个二进制数的第几位所对应ALU的第几号地址引脚的电平高低的变化而已。

本文转载自知乎,有删减1.


  1. 作者:DreamPiggy
    链接:https://www.zhihu.com/question/31695794/answer/53797548
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ↩