解释型语言python

摘要 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。由于翻译方式的不同,习惯上我们大致把高级语言分为两类,即编译型语言和解释型语言。对于这两种类型的编程语言,很多人在理解层面上存在盲点,本文将对这两种类型的编程语言进行探讨,帮助读者更好的理解这一问题。

文章概览

  • 编译型语言和解释型语言

    • 基本解释
    • 优缺点
  • python

    • python解释器
    • python代码执行过程

编译型语言和解释型语言

基本解释

  对于编译型语言,我们以C语言为例,C语言在执行过程中,先要将源程序编译为目标文件(机器代码),该目标文件是与平台相关的,也就是说ARM生成的目标文件,不能被用于MIPS的CPU,也不能用于x86的CPU。目标文件经过连接操作就可以生成可执行文件,以后我们想再次运行这段代码时,不必进行编译操作,只需要直接执行生成的可执行文件即可。

  对于解释型语言呢,我们不需要执行编译过程,程序在执行时直接由解释器逐句地对程序进行解释,转换为机器可以执行的代码。但是对于有些解释型语言来说,也需要进行编译操作,比如Java。Java程序在执行过程中先要将源代码编译成字节码文件,然后再由解释器对字节码文件逐句进行解释,所以说Java是一种先编译后解释的语言。(注:Java为了实现跨平台的特性,专门在从高级语言代码转换至机器码过程的中间加入了一层中间层JVM(java虚拟机),Java首先依赖编译器将代码(.java)编译成JVM能识别的字节码文件(.class),然后由JVM解释并执行该字节码,也可结合JIT(just-in-time compilation即时编译)技术,将解释生成的机器码转换为更高效的本地机器码,且该机器码可被缓存,来提高重复执行的效率。)

  常见的编译型语言包括:C/C++、Pascal等,常见的编译型语言包括:Java、JavaScript、VBScript、Perl、Ruby、MATLAB 等。

优缺点

  • 编译型语言可以做到一次编译,多次运行,执行效率比较高;而解释型语言在每次执行时都需要解释器进行解释,执行效率较低(但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言)。
  • 编译型语言的执行依赖于平台,生成的可执行文件不能运行在其他平台,需重新编译,跨平台的性较差;而解释型语言的执行依赖于解释器,各个平台都有相应的解释器,解释器会将程序解释成基于当前机器指令集的机器码并执行,所以解释型语言可以很好的移植到其他平台,具有很好的跨平台性。
  • 编译型语言,在编译阶段即可发现常见的语法或者链接等错误,此机制可在运行前帮助程序员排查出可能潜在的语法、语义和类型转换错误,编译型语言一般都有明确的变量类型检测,也被称作强类型语言,即编译型语言至少能确保所生成的可执行文件肯定是可运行的,至于执行的逻辑不对则属于程序员业务逻辑错误范畴了。而对于解释型语言,代码中的错误必须直到运行阶段方可发现,由此造成的困惑是:往往一段程序看不出问题但却在运行阶段错误连连且需要一个个排查:变量拼写错误、方法不存在等。但也正是基于解释是在运行期执行转化的特性,一般的解释型语言通常都有自己的shell,可以在不确定某些执行结果时立即“动手执行”试一下,这就比每次都需要编译后才能运行并看到结果省去不少时间。

python

  通过上面对编译型语言和解释型语言的分析,我们可以得出结论,python是属于解释型语言的一种。python类似于Java,为了效率上的考虑,也提供了编译方式,编译后生成的也是字节码的文件形式,并由Python的的VM(虚拟机)的去执行。不同点在于,Python的编译并非强制执行的操作,确切来说Python的编译是自动的,通常发生在对某个模块(module)的调用过程中,编译成字节码的可以节省加载模块的时间,以此达到提高效率的目的。可见,某些先进的高级语言在对编译和解释方面的拿捏舍去,都采取了一种:两手抓,两手都要硬的态度。

python解释器

  由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器

  • CPython: 这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器,它是使用最广的Python解释器.
  • IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
  • 绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
  • Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

python代码执行过程

  参考这篇博客和这篇博客

坚持原创技术分享,您的支持将鼓励我继续创作!