关于 解释型语言 和编译型 语言的理解

编译型语言与解释型语言

编译型语言:源程序编译后即可在平台运行。使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。其特点如下:

  • 一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
  • 与特定平台相关,一般无法移植到其他平台;
  • 现有的C、C++、Objective等都属于编译型语言

解释型语言:在运行期间才翻译和执行,使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行(也需要编译但是并没有生成目标代码),而不是在执行之前就完成翻译。解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。其特点如下:

  • 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
  • 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
  • Python等属于解释型语言(python 使用的虚拟机是基于其它语言实现的,最常见的是Cpython,也就是其虚拟机由C实现,这个虚拟机负责把Python源码编译为字节码,再逐行的执行字节码 【python经过编译后会生成.pyc 或.pyo文件,这样做出于两个目的:1.由于.py文件时可以直接看到源码,所以开发商业软件就需要将.py文件编译为看不到源码的.pyc字节码文件再发布 2. 将.py文件编译为.pyc或.pyo文件可以提高python程序的加载速度,且.pyc是一种跨平台的字节码,由python虚拟机执行】)。

总结:

编译型语言运行速度快,解释型语言跨平台性好,在更新时,编译型语言语言重新编译而解释型语言 仅解释更新的内容。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

对于解释型语言在更新过程中的补充(以linux平台下python运行为例):

Python test.py
# test.py中的内容
# --------------------------------------------------------
#!/usr/bin/env python
import mymodule
mymodule.say("hello")

Python解释器其实并不一定会读入 mymodule.py 文件,它会尝试读取 mymodule.pyc 文件或者 mymodule.pyo 文件。如果都失败了,或者 mymodule.py 文件比 mymodule.pyc/mymodule.pyo 新,才转而读入 mymodule.py 文件。Python只懂得解释执行字节码,所以 mymodule.py 文件读入后第一件事就是先进行编译。编译的结果会被尝试保存到 mymodule.pyc 文件中。Python的编译实际上主要是进行文法分析,生成一个抽象语法树,然后转储成字节码形式。这一点与Java有些相似,因为它们都生成字节码。

特例: JAVA既可以看作编译型语言也可看作解释型语言

因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。 但java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了(java解释器是java虚拟机的一部分)。 但JVM为了效率,都有一些JIT(just in time 即时编译技术)优化。它又会把.class的字节码代码编译为本地的代码直接运行【这点还存在疑惑,待日后解决】,所以,又是编译的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ref:什么是编译型语言和解释型语言? - 简书 (jianshu.com)
ref:https://zhuanlan.zhihu.com/p/141212114
https://blog.csdn.net/whatday/article/details/107940987

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值