精华内容
下载资源
问答
  • 什么是编译型语言和解释型语言

    万次阅读 多人点赞 2018-08-01 21:42:16
    什么是编译型语言和解释型语言 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。 ...

    什么是编译型语言和解释型语言

    计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。

    这里写图片描述

    计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:

    1. 编译

    2. 解释

    由此高级语言也分为编译型语言和解释型语言。

    编译型语言

    使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

    特点

    在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

    总结

    1. 一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;

    2. 与特定平台相关,一般无法移植到其他平台;

    3. 现有的C、C++、Objective等都属于编译型语言。

    这里写图片描述

    解释型语言

    使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。

    特点

    解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

    总结

    1. 解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;

    2. 只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;

    3. Python等属于解释型语言。

    这里写图片描述

    展开全文
  • Python程序的执行过程(解释型语言和编译型语言)

    万次阅读 多人点赞 2018-03-30 11:41:10
    Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的.pyc文件的是什么呢?c应该是...

    Python是一门解释型语言?

    我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现*.pyc文件的存在,如果真是解释型语言,那么生成的*.pyc文件的是什么呢?c应该是compiled的缩写才对啊!
    为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清一下这个问题,并且把一些基础概念给理一理。

    解释型语言和编译型语言

    计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
    编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了,最典型的例子就是C语言。
    解释型语言就没有这个编译过程,而是在程序运行的时候,通过解释器对程序逐行做出解释,然后直接运行,最典型的例子是Ruby。
    通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
    此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹的分成解释型和编译型这两种。
    用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
    再换成C#,C#首相是通过编译器将C#文件编译成IL文件,然后在通过CLR将IL文件编译成机器文件。所以我们说C#是一门纯编译语言,但是C#是一门需要二次编译的语言。同理也可以等效运用到基于.NET平台上的 其他语言。

    Python到底属于哪一种类型?

    其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单的了解一下Python程序的运行过程吧。
    当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
    熟悉Java的同学可以想象一下我们在命令行中如何执行一个Java的程序:
    javac hello.java
    java hello

    只是我们在用eclipse之类的IDE时,将这两步给融合成了一步而已。其实Python也是一样的,当我们执行python hello.py时,它也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

    简述Python中程序的运行过程

    在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
    我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
    当Python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
    当Python程序第二次运行时,首先程序会在硬盘中寻找对应的pyc文件,如果找到,则直接载入,否则就重复上面的过程。
    所以我们应该这样来定位PyCodeObject和pyc文件:pyc文件其实是PyCodeObject的一种持久化保存方式。

    我们先来简单看两个例子

    写一段简单的程序运行一下:
    1
    运行结果:
    2
    我们发现在运行完test.py这个程序后,当前路径下并没有生成相应的pyc文件。那是为什么呢?
    我们再来做一个小测试,将test.py当做模块导入到test888.py文件中,然后在这个程序中运行print_hello这个程序:
    3

    4

    然后运行程序:
    5

    我们可以发现运行完test888.py文件后在当前路径下出现了一个名叫__pycache__的文件夹,里面包含了一个pyc文件,下面我们来分析一下这个过程到底发生了什么。

    pyc文件的目的

    回想上面我们在分析编译型语言和解释型语言的优缺点时,编译型语言的优点在于,我们可以在程序运行时不用解释,而直接利用已经翻译过的文件。也就是说,我们之所以要把py文件编译成pyc文件,最大的优点在于我们在运行程序时,不需要重新对该模块进行再次解释。
    所以,需要编译成pyc文件的应该是那些可以重用的模块,这于我们在设计类时是一样的目的。所以Python的解释器认为:只有import进来的模块,才是需要被重用的模块。
    这个时候也许有人会有疑问,我的test.py不是也需要运行吗,虽然不是一个模块,但是以后我每次运行也可以节省时间啊!
    OK,我们从实际情况出发,思考一下我们在什么时候才可能运行python xxx.py文件:

    1. 执行测试时;
    2. 开启一个Web进程时;
    3. 执行一个脚本时。

    我们来逐条分析,第一种情况就不多说了,这个时候哪怕所有的文件都没有pyc文件都是无所谓的。
    第二种情况,试想一个web.py的程序,通常是这样执行的:
    6
    然后这个程序就类似于一个守护进程一样一直监视着8000端口,而一旦中断,只可能是程序被杀死或者其他的意外情况,那么你要做的是把整个Web服务重启,那么既然一直监视着,把PyCodeObject一直放在内存中就足够了,完全没有必要持久化到硬盘上。
    再来看看最后一个情况,执行一个程序脚本,一个程序的主入口其实很类似于Web程序中的Controller,也就是说,他负责的应该是Model之间的调度,而不包含任何的主逻辑在内,只是负责把参数转来转去而已,那么如果做算法的同学可以知道,在一段算法脚本中,最容易改变的就是算法的各个参数,那么这个时候将它持久化成pyc文件就未免有些画蛇添足了。

    所以我们可以这样理解Python解释器的意图,Python解释器只是把我们可能重用到的模块持久化成pyc文件。

    pyc文件的过期时间

    说完了pyc文件,可能有人会想到,每次Python解释器都把模块给持久化成pyc文件,那么当我的模块发生改变的时候,是不是都要手动的把之前的pyc文件remove掉呢?
    当然Python的设计者是不会犯这样的错误的,这个过程其实取决于PyCodeObject是如何写入pyc文件中的。
    我们仔细看一下Import模块的源码其实不难发现,它在写入pyc文件的时候,写了一个Long型变量,变量的内容则是文件的最近修改日期,同理,在pyc文件中,每次在载入之前都会检查一下py文件和pyc文件保存的最后修改日期,如果不一致则重新生成新的pyc文件。

    总结

    其实了解Python程序的执行过程对于大部分程序员来说意义都是不大的,那么真正有意义的是,我们可以从Python解释器的做法上学到一些处理问题的方式和方法:

    1. 在Python中判断是否生成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,到底什么是值得扔在缓存里面的,什么是不值得的。
    2. 在运行一个耗时的Python脚本时,我们如何能够做到稍微压榨一些程序的运行时间呢?就是将模块从主模块分开。(虽然往往这都不是瓶颈)
    3. 在设计一个软件系统时,重用和非重用的东西是不是也可以分开来对待,这是软件设计原则的重要部分。
    4. 在设计缓存系统(或者其他系统)时,我们如何来避免程序的过期,其实Python解释器为我们提供了一个特别常见而且有效的解决方案。
    展开全文
  • Python语言是编译型语言还是解释型语言? 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Python是一种解释型语言 Python程序源码不需要编译,可以直接从源...

    Python语言是编译型语言还是解释型语言?

    我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言

    什么是编译型语言和解释型语言?

    Python是一种解释型语言

    Python程序源码不需要编译,可以直接从源代码运行程序。Python解释器将源代码转换为字节码,然后把编译好的字节码转发到Python虚拟机(PVM)中进行执行。

    下面用一张图来解释这个过程:

    在这里插入图片描述

    当我们运行Python文件的时候,Python解释器会执行两个步骤:

    1. 把源代码编译为字节码(以.pyc文件保存)

    2. 把编译好的字节码转发到PVM中加以执行

    这样,Python程序的执行过程就清楚了

    所以,Python是一种典型的解释型语言

    另一种解释型热门语言:Java

    展开全文
  • 解释型语言和编译型语言的区别

    万次阅读 多人点赞 2013-11-24 17:58:28
    解释型语言和编译型语言的区别 首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级...

    解释型语言和编译型语言的区别

    首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。
         说到翻译,其实翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
         用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源高级程序编译成为机器语言文件,比如windows下的exe文件。以后就可以直接运行而不需要编译了,因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
       
        一个完整的编译系统与 一个用C编写的程序hello.c的编译过程 
          解释则不同,解释型语言编写的程序不需要编译。解释型语言在运行的时候才翻译,比如VB语言,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。
         编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
         但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。
          说到这里,我们有必要说一下java与C#。解释型语言和编译型语言的区别
          JAVA语言是一种编译型-解释型语言,同时具备编译特性和解释特性(其实,确切的说java就是解释型语言,其所谓的编译过程只是将.java文件编程成平台无关的字节码.class文件,并不是向C一样编译成可执行的机器语言,在此请读者注意Java中所谓的“编译”和传统的“编译”的区别)。作为编译型语言,JAVA程序要被统一编译成字节码文件——文件后缀是class。此种文件在java中又称为类文件。java类文件不能再计算机上直接执行,它需要被java虚拟机翻译成本地的机器码后才能执行,而java虚拟机的翻译过程则是解释性的。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行,是由java虚拟机完成的。而在现实中,java开发工具JDK提供了两个很重要的命令来完成上面的编译和解释(翻译)过程。两个命令分别是java.exe和javac.exe,前者加载java类文件,并逐步对字节码文件进行编译,而另一个命令则对应了java语言的解释(javac.exe)过程。在次序上,java语言是要先进行编译的过程,接着解释执行。
       C#语言是编译型语言,但其“编译”过程比较特殊,具体说明如下:
       C#程序在第一次运行的时候,会依赖其.NET Frameworker平台,编译成IL中间码),然后由JIT compiler翻译成本地的机器码执行。从第二次在运行相同的程序,则不需要再执行以上编译和翻译过程,而是直接运行第一次翻译成的机器码。所以对于C#来说,通常第一次运行时间会很长,但从第二次开始,程序的执行时间会快很多。
       那么,C#为什么要进行两次“编译”呢?其实,微软想通过动态编译(由JIT compiler工具实现)来实现其程序运行的最优化。如果代码在运行前进行动态编译运行,那么JIT compiler可以很智能的根据你本地机器的硬件条件来进行优化,比如使用更好的register,机器指令等等,而不是像原来那样,build一份程序针对所有硬件的机器跑,没有充分利用各个机器的条件。
       另外,还有我们经常用到的脚本语言,比如JavaScript、Shell等语言都是脚本语言,本质上来说,脚本语言就是解释型语言。
       对于以上内容,如果有什么地方说的不妥的,敬请指出!
         
    展开全文
  • JAVA是解释型语言还是编译型语言

    千次阅读 2016-06-12 16:24:14
    JAVA是解释型语言还是编译型语言 Under J2SE | 三月 10th, 2010 1 comment   Java是解释型语言还是编译型语言 概念: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后...
  • 编译型语言与解释型语言的区别

    千次阅读 2016-05-19 14:53:11
    编译型语言编译性的语言指使用专门的编译器、针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个...
  • 编译型语言、解释型语言、脚本语言的区别

    千次阅读 多人点赞 2016-04-11 10:11:28
    1.编译编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一
  • 编译型语言与解释型语言的区别及各自的优缺点

    万次阅读 多人点赞 2017-04-18 15:19:21
    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是...
  • JavaScript是解释型语言--V8、JIT

    千次阅读 多人点赞 2021-05-25 20:11:49
    编程语言 可以通过”语言“来控制计算机,让计算机为我们做事情。(类似于中文、英文) 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守...
  • 而这些语言根据运行的方式不同,大体分为两种:编译型语言和解释型语言。 其中,编译型语言包括C\C++、Pascal、Go等。这里说的编译是指在应用源程序执行之前,就将程序源代码编译成汇编语言,然后进一步根据软硬件...
  • 引言:计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。...2、解释型语言:没有这个编译的过程,而是在程序运行...
  • 解释型语言特性

    千次阅读 2016-03-08 15:56:53
    高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可 将它们分为两类:  1.解释类:执行方式类似于我们日常生活中的“同声...以动态地调整、修改应用程序,典型解释型的高级语言有BAS
  • 编译型语言和解释型语言区别

    千次阅读 2017-03-24 09:18:01
    翻译程序:是一种系统程序,它将计算机编程语言编写的程序翻译成另外一种计算机语言的一般来说等价的程序,主要包括编译程序和解释程序,汇编程序也被认为是翻译程序。 程序的最初形式称为源程序或者源代码,翻译后...
  • 1、C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才能够执行...
  • python 解释型(函数写在调用前)java 编译型(请求次数多)+解释型(请求次数少)解释性语言定义:程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行...
  • 解释型语言 || 按照客观系统的描述可分为两类:1.面向过程语言; 2.面向对象语言 || 按照编程范型可分为:1.命令式语言; 2.函数式语言; 3.逻辑式语言; 4.面向对象语言) 三种语言的优缺点: 机器语言: 可读性、...
  • 编译型语言、解释型语言与脚本语言三大类型详解

    万次阅读 多人点赞 2015-12-27 19:52:28
    一、编译型语言 定义:指用专用的编译器,针对特定的操作平台(操作系统)将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码(具有操作数,指令、及相应的格式),这个过程叫做编译;编译好的可...
  • 1 高级语言 汇编语言 机器语言机器语言是最原始的语言, 是由01代码构成的, cpu在工作的时候只认识机器语言, 即01代码汇编语言是一种低级语言, 他用人类容易记忆的语言和符号来表示一组01代码, 例如AND代表加法高级...
  • (1)解析器(parser):前者是编译器/解释器的重要组成部分,也可以用在IDE之类的地方;其主要作用是进行语法分析,提取出句子的结构。广义来说输入一般是程序的源码,输出一般是语法树(syntax tree,也叫parse ...
  • 高级语言与低级语言 最低级的,是机器码。。。也就是1和0。。。而CPU所能识别并计算的,也只有1和0。。。因此无论你用什么语言编写程序,最终都会被转换成1和0。。。但中间需要被转换的次数,以及转换的复杂度,却...
  • 1、什么是计算机语言 计算机就是一台用来计算机的机器,人让计算机干什么计算机就干什么。我们需要通过计算机的语言来控制计算机,所谓计算机的语言就是编程语言。 计算机语言其实和人类的语言没有本质的区别,不同...
  • ? 1、我们都知道一个程序的运行过程主要分为三个步骤:编译->链接->执行; 2、什么是面向对象语言,这就不多说了;...Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言...
  • 最近各大互联网公司线上笔试,编程题目里的编译器...学习的过程中,看到这样一个争论“Java、Python谁是编译型语言,谁是解释性语言?”。我在网上查了很多资料,也结合了自己的理解,下面与大家分享一下。 总的来说...
  • 1、动态语言和静态语言 通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。 (1)动态类型语言:动态...Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类
  • 1、我们都知道一个程序的运行过程主要分为三个步骤:编译->链接->执行; 2、什么是面向对象语言,这就不多说了; 3、什么是动态语言?...Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBSc
  • 简述解释型和编译型编程语言

    千次阅读 2019-06-22 18:24:46
    解释型语言:可以直接运行,逐条翻译逐条运行 编译型 把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序 总结 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi...
  • python 解释型(函数写在调用前) java 编译型(请求次数多)+解释型(请求次数少) 解释性语言定义: 程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行...
  • 计算机编程语言:编译型与解释型区别 原文地址:https://blog.csdn.net/danpi1hao/article/details/64121610 计算机编程语言种类非常多,根据与计算机硬件的贴近程度和抽象程度大致可分为3类,自顶向下分别是 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,524
精华内容 25,809
热门标签
关键字:

典型的解释型语言