精华内容
下载资源
问答
  • 2019-02-13 08:15:03

    最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++、Java,甚至有的支持javaScrpit和Pascal,就是不支持Python。让一直以来用惯了Python的我直吐血,于是今天痛定思痛还是熟悉一下Java,免得继续被虐。学习的过程中,看到这样一个争论“Java、Python谁是编译型语言,谁是解释性语言?”。我在网上查了很多资料,也结合了自己的理解,下面与大家分享一下。

    总的来说,如今编译型语言、解释性语言的分界线不再那么明显,应该避免把语言简单归类为“编译型”和“解释型”。

    我们最开始说C/C++是编译型语言,原因是相对于Ruby这样的解释性语言,C/C++需要通过编译器,把源代码编译成中间文件(.o和.obj),然后通过连接器和汇编器生成机器码,即一系列基本操作序列,可以直接让计算机执行。这些机器码也就是我们通常的exe文件。

    我们以Ruby为例谈一下解释型的语言,程序从源代码到被计算机执行,也要经历上述步骤。不同的地方在于,C/C++会把那些从源代码“变”来的机器码(即exe文件)保存起来,而Ruby直接将这些生成的基本操作序列(Ruby虚拟机)指令丢给Ruby虚拟机执行然后产生动作了。这就是我们所说的解释型语言。

    所以我们看到的现象是,编译型语言要先编译再运行,而解释性语言直接“运行”源代码。

    回到最开始的问题,如果以是“否保存机器码为exe文件”为区分,那么Java和Python都属于解释型语言。

    但具体来讲,Java和Python是有很大不同的。Java代码从源程序到执行,要经过的过程是:编译器(javac)把源代码转化为字节码,然后解释器(Java.exe)把字节码转换为计算机理解的机器码来执行,其过程中没有把“机器码保存为exe”的行为(这样讲也不完全准确,下面会讲到)。其中编译器和解释器都是Java虚拟机(JVM)的一部分,由于针对不同的硬件与OS,Java解释器有所不同,因此可以实现“一次编译、到处执行”。所以JVM是Java跨平台特性的关键所在。

    Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域

    对于Python,其源代码到执行也要经过如下过程:源代码—>字节码—>机器码。跟Java相同的是,其过程中也没有把“机器码保存为exe”的行为。与Java不同的是,Python使用的虚拟机是基于其他语言实现的,比如我们一般使用的Python实际为Cpython,也就是其虚拟机由C实现,这个虚拟机负责把Python源码编译为字节码,再解释执行。另外,还有Jypython、Ironpython等。

    那为什么要这样实现?

    因为CPython中很容易为你的Python代码写C扩展,因为最终都是由C解释器执行的。另一方面,Jython则使得和其他java程序共同工作很容易:无需其他工作,你就可导入任何Java类,在你的Jython程序中使用其他Java类。

    通过以上分析,显然,每种语言都有自己的优缺点。

    另外需要说明的是Python是种强类型的语言。有人可能会问,在python中,可以这样写而不报错,所以是弱类型的:

    i=1
    print(i)
    i=“hello world”
    print(i)
      显然,这样的同学搞错了python的实现。实际上述代码中,i仅仅是一个指向,每次赋值,实际上只是改变了i的指向。

    实际上,这里python表现出的特性为,他是一种动态类型语言。动态类型语言是一种在运行期间才去确定数据类型的语言,与静态类型相反。VBScript 和 Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。静态类型语言是一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java 和 C 是静态类型语言。

    Python 是强制类型定义的。指的是加入我们有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串,所以显然,C/C++和Java都是强类型语言。 弱类型语言与强类型相反。VBScript 是弱类型的。在 VBScript 中,我们可以将字符串 ‘12’ 和整数 3 进行连接得到字符串’123’,然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。

    总结起来,Python是一种动态的,强类型语言。

    现在回到“关于解释和编译的界限也不是特别清晰了”的问题。

    Java需要预先把代码编译成虚拟机指令的,然后在运行这些虚拟机指令,有的教科书上会成为混合型或者半编译型。
    像Python和lua这样就更不好分了,可以直接解释源代码运行,也可以编译为虚拟机指令然后再运行。
    php编译之后的结果可以被Web Server缓存起来,甚至还可以先被翻译为C++,然后再编译。
    .NET 的CLR运行时是Windows的组成部分,编译好的.NET 系列语言的代码直接生成可执行文件,然后被“直接”执行,看起来跟C没有什么太大的差别。
    JavaScript可以被V8引擎编译为机器码然后执行,如果在node.js下,这个编译结果被缓存起来了,你说这跟编译好再执行的C有什么区别
      我们再回到”Java编译、执行过程中没有把机器码保存为exe的行为“的话题。

    有些答案对JAVA的理解还停留在上古时代或者教科书里。
      其实,现在用编译型、解释型来分类编程语言已经有点力不从心了。
      JAVA的第一道工序是javac编译,当然目标文件是BYTECODE。后续可能有三种处理方式:
      1. 运行时,BYTECODE由JVM逐条解释执行,
      2. 运行时,部分代码可能由JIT翻译为目标机器指令(以method为翻译单位,还会保存起来,第二次执行就不用翻译了)直接执行;
      3. RTSJ。继JAVAC之后执行AOT二次编译,生成静态的目标平台代码(典型的就是IBM WEBSHPERE REAL TIME)。

    有的时候,可能是以上三种方式同时在使用。至少,1和2是同时使用的,3需要程序员手工指定。显然,生成了静态的目标平台代码,按照之前的定义,就属于编译型语言了。
      所以讨论语言得更细化一点了,强类型的、弱类型的,静态的、动态的,GC-based的、手工管理内存的,有没有VM…

    更多相关内容
  • JavaScript是解释型语言--V8、JIT

    千次阅读 多人点赞 2021-05-25 20:11:49
    编程语言的发展大概经历了以下几个阶段: 汇编语言 ==> 面向过程编程 ==> 面向对象编程 汇编语言是编程语言的拓荒年代,它非常底层,直接和计算机硬件打交道,开发效率低,学习成本高; C语言是面向过程的...

    编程语言

    可以通过”语言“来控制计算机,让计算机为我们做事情。(类似于中文、英文)

    编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。

    编程语言的发展大概经历了以下几个阶段: 汇编语言 ==> 面向过程编程 ==> 面向对象编程

    • 汇编语言是编程语言的拓荒年代,它非常底层,直接和计算机硬件打交道,开发效率低,学习成本高;
    • C语言是面向过程的编程语言,已经脱离了计算机硬件,可以设计中等规模的程序了;
    • Java、C++、Python、C#、PHP 等是面向对象的编程语言,它们在面向过程的基础上又增加了很多概念。

    在这里插入图片描述

    编程语言的从执行原理上分为两类:解释型语言和编译型语言

    计算机不能直接理解机器语言以外的语言,因此需要将我们写的代码编译成机器语言,然后再交给计算机去执行。

    编译型语言

    程序在执行之前需要一个专门的编译过程,把程序编译为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。

    解释型语言

    程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。如 Python、Shell、JavaScript 等。

    Java 语言

    编译器(javac)把源代码转化为字节码,然后解释器(Java.exe)把字节码转换为计算机理解的机器码来执行。其中编译器和解释器都是 Java 虚拟机(JVM)的一部分,由于针对不同的硬件与OS,Java 解释器有所不同,因此可以实现“一次编译、到处执行”。所以 JVM 是Java 跨平台特性的关键所在 – 引入 JVM 后,Java 语言在不同平台上运行时不再需要重新编译。

    对于前端开发同学使用的 JavaScript 语言,属于典型的解释型语言

    JavaScript

    JavaScript 作为编程语言的一种,直接输送给计算机(CPU)是不认识的(上面有提及),需要将其转换为指令集。不同类型的 CPU 的指令集是不一样的。JavaScirpt 引擎可以将 JavaScript 代码编译为不同 CPU(Intel, ARM 以及 MIPS 等)对应的机器码,同时引擎还可以执行代码、分配内存以及垃圾回收等。

    Google V8 是开源高性能 JavaScript 和 WebAssembly 引擎,被用于 Chrome 和 Node.js 等。其中包括重要的四个模块:

    1. Parser:将 JavaScript 源码转换为 Abstract Syntax Tree (AST);
    2. Ignition:解释器,将 AST 转换为 Bytecode,解释执行 Bytecode;同时收集 TurboFan 优化编译所需的信息,比如函数参数的类型;
    3. TurboFan:编译器,利用Ignitio所收集的类型信息,将Bytecode转换为优化的汇编代码(计算机可识别);
    4. Orinoco:垃圾回收,负责将程序不再需要的内存空间回收。

    整个转换过程:JavaScript ==> AST ==> Bytecode ==> Machine Code

    关于 v8 引擎是如何工作的,可以看 这篇文章

    V8 出现之前,所有的 JavaScript 虚拟机所采用的都是解释执行的方式,这是 JavaScript 执行速度过慢的主要原因之一。而 V8 率先引入了即时编译(JIT)双轮驱动的设计(混合使用编译器和解释器的技术),这是一种权衡策略,给 JavaScript 的执行速度带来了极大的提升。

    绝大多数编译器以预先编译(AOT)或实时编译(JIT)形式工作。

    • 使用命令行或者集成开发环境(IDE)调用预先编译(AOT)的编译器,如 gcc
    • 实时编译器通常是用来提高性能的,令你没有感知的,如 V8

    即时编译 JIT(Just-in-time)

    解释器的工作方式:边解释,边执行。 对于循环等会存在解释多次的情况。从而导致运行速度变慢。

    for (let i = 0; i < len; i++) {
      doSomething(i)
    }
    

    整体来说,为了解决解释器的低效问题,后来的浏览器把编译器也引入进来,形成混合模式。最终,结合了解释器和编译器的两者优点。

    They added a new part to the JavaScript engine, called a monitor (aka a profiler). That monitor watches the code as it runs, and makes a note of how many times it is run and what types are used.

    关于 JIT 的原理,大部分来自 这篇文章,英文好的同学可自行跳转查阅。

    基本思想: 在 JavaScript 引擎中增加一个监视器(也叫分析器)。监视器(monitor)监控着代码的运行情况,记录代码一共运行了多少次、如何运行的等信息。后续遇到相同代码时,跳过解释,直接执行。

    执行步骤

    第一步:Interpreter

    使用解释器执行,当某一行代码被执行了几次,这行代码会被打上 Warm 的标签;当某一行代码被执行了很多次,这行代码会被打上 Hot 的标签

    第二步:Baseline compiler

    被打上 Warm 标签的代码会被传给 Baseline Compiler 编译且储存,同时按照行数 (Line number)变量类型 (Variable type) 被索引。当发现执行的代码命中索引,会直接取出编译后的代码给浏览器执行,从而不需要重复编译已经编译过的代码。

    第三步:Optimizing compiler

    被打上 Hot 标签的代码会被传给 Optimizing compiler,这里会对这部分带码做更优化的编译(类型假设)。在执行前会做类型检查,看是假设是否成立,如果不成立执行就会被打回 interpreter 或者 baseline compiler 的版本,这个操作叫做 “去优化”。

    JIT 会增加多余的开销:

    • 优化和去优化开销
    • 监视器记录信息对内存的开销
    • 发生去优化情况时恢复信息的记录对内存的开销
    • 对基线版本和优化后版本记录的内存开销

    所以,整体来看是一个空间换时间的优化方案。当然,通过上述三个步骤,可得知,虽然 JavaScript 是弱类型语言,随意修改变量的类型会导致 JIT 编译效率下降(命中索引概率低)。

    说在后面

    对于整个解释型语言及现有的相关优化方式(JIT)了解之后,对于后续文章要提到的 esbuild 会有更好的理解。esbuild 也被称为下一代构建工具(使用 Go 语言编写,基于 ESM)。coming soon~~

    esbuild:An extremely fast JavaScript bundler
    Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way.

    展开全文
  • 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解释器为我们提供了一个特别常见而且有效的解决方案。
    展开全文
  • JAVA到底是解释型语言还是编译型语言是属于编译型语言。因为需要编译成位元组码以后才能在jvm上执行。JavaScript到底是解释型语言还是编译型语言编译型语言是把原始码先编译为机器码(也就是所谓的可执行程式,比如...

    JAVA到底是解释型语言还是编译型语言以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    6225942883b81dde163304ace998fdc7.png

    JAVA到底是解释型语言还是编译型语言

    是属于编译型语言。因为需要编译成位元组码以后才能在jvm上执行。

    JavaScript到底是解释型语言还是编译型语言

    编译型语言是把原始码先编译为机器码(也就是所谓的可执行程式,比如windows系统的exe档案),执行的时候电脑只需直接把机器码交给CPU执行即可。编译型语言的特点是执行速度快,效率高。缺点是可移植性差。

    解析型语言则是直接以原始码的形式出现,执行的时候再实时解析为机器码并执行。所有的指令码语言(当然也包括JavaScript)都是解析型语言。这类语言有个最大特点就是它们都不能独立存在,必须寄生在其他程式(比如浏览器)内。

    请问C#是编译型语言还是解释型语言?

    1、编译型语言在程式执行之前,有一个单独的编译过程,将程式翻译成机器语言,以后执行这个程式的时候,就不用再进行翻译了。

    2、解释型语言,是在执行的时候将程式翻译成机器语言,所以执行速度相对于编译型语言要慢。

    C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。

    Python谁是编译型语言,谁是解释型语言

    python是解释型语言,c,java是编译型语言。(一般而言)

    python也可以编译,但以解释为主。c也可以解释,但以编译为主。其中关系比较复杂。

    如何区分编译型语言,解释型语言

    编译型语言的程式在执行之前会经过编译生成一个可执行档案,在磁碟的某个资料夹里面可以看到有一个EXE档案;而解释型语言的程式不需要编译,是边解释边执行

    C/C++,Java,Python谁是编译型语言,谁是解释型语言

    总的来说,如今编译型语言、解释性语言的分界线不再那么明显,应该避免把语言简单归类为“编译型”和“解释型”。

    我们最开始说C/C++是编译型语言,原因是相对于Ruby这样的解释性语言,C/C++需要通过编译器,把原始码编译成中间档案(.o和.obj),然后通过联结器和汇编器生成机器码,即一系列基本操作序列,可以直接让计算机执行。这些机器码也就是我们通常的exe档案。

    我们以Ruby为例谈一下解释型的语言,程式从原始码到被计算机执行,也要经历上述步骤。不同的地方在于,C/C++会把那些从原始码“变”来的机器码(即exe档案)储存起来,而Ruby直接将这些生成的基本操作序列(Ruby虚拟机器)指令丢给Ruby虚拟机器执行然后产生动作了。这就是我们所说的解释型语言。

    所以我们看到的现象是,编译型语言要先编译再执行,而解释性语言直接“执行”原始码。

    回到最开始的问题,如果以是“否储存机器码为exe档案”为区分,那么Java和Python都属于解释型语言。

    但具体来讲,Java和Python是有很大不同的。Java程式码从源程式到执行,要经过的过程是:编译器(javac)把原始码转化为位元组码,然后直译器(Java.exe)把位元组码转换为计算机理解的机器码来执行,其过程中没有把“机器码储存为exe”的行为(这样讲也不完全准确,下面会讲到)。其中编译器和直译器都是Java虚拟机器(JVM)的一部分,由于针对不同的硬体与OS,Java直译器有所不同,因此可以实现“一次编译、到处执行”。所以JVM是Java跨平台特性的关键所在。

    Java虚拟机器(JVM)一种用于计算机装置的规范,可用不同的方式(软体或硬体)加以实现。编译虚拟机器的指令集与编译微处理器的指令集非常类似。Java虚拟机器包括一套位元组码指令集、一组暂存器、一个栈、一个垃圾回收堆和一个储存方法域

    对于Python,其原始码到执行也要经过如下过程:原始码--->位元组码--->机器码。跟Java相同的是,其过程中也没有把“机器码储存为exe”的行为。与Java不同的是,Python使用的虚拟机器是基于其他语言实现的,比如我们一般使用的Python实际为Cpython,也就是其虚拟机器由C实现,这个虚拟机器负责把Python原始码编译为位元组码,再解释执行。另外,还有Jypython、Ironpython等。

    编译型语言与解释型语言分别有哪些

    编译型程式语言需要把原始码编译成可执行档案,解释性程式语言只要把原始码编译成中间程式码,用虚拟机器解析就行了.

    c#和Java哪个是是编译型语言?哪个是解释型语言?

    C#是编译,JAVA是解释

    解释型语言和编译型语言的区别与不同

    1.编译型语言在程式执行之前,有一个单独的编译过程,将程式翻译成机器语言,以后执行这个程式的时候,就不用再进行翻译了。

    2.解释型语言,是在执行的时候将程式翻译成机器语言,所以执行速度相对于编译型语言要慢。

    3.C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。

    4.虽然Java程式在执行之前也有一个编译过程,但是并不是将程式编译成机器语言,而是将它编译成位元组码(可以理解为一个中间语言)。

    在执行的时候,由JVM将位元组码再翻译成机器语言。

    5.指令码语言一般都有相应的指令码引擎来解释执行。 他们一般需要直译器才能执行。JAVASCRIPT,ASP,PHP,PERL,Nuva都是指令码语言。C/C++编译、连结后,可形成独立执行的exe档案。

    解释型语言跟编译型语言的区别在哪里?

    编译型就是编译的时候直接编译成机器可以执行的程式,但不能跨平台吧

    解释型语言就是编译成中间程式码程式,在执行时靠翻译程式一起执行,可以跨平台,中间程式码一样,翻译程式只要各平台一个,就可以。

    .的framework,java的jre就是这类翻译程式

    分页:123

    展开全文
  • python解释型语言的说明

    千次阅读 2018-04-22 00:51:26
    为什么称python为解释型语言?为什么python相比C执行会慢?什么是解释型语言?Python 是怎么实现动态类型的呢?从小白的角度来解释这些问题。首先,大部分语言为编译型或解释型,如C/C++等为编译型,python为解释型...
  • 以下叙述正确的是: Python 3.x与Python2.x兼容|Python是解释型语言|Python语句只能以程序方式执行|Python语言出现的晚,具有其他高级语言的一切优点答:Python是解释型语言航行及操纵设备、应急设备等属于_________...
  • Python是一门脚本解释型语言

    千次阅读 2018-08-03 16:42:30
    以Python为例,一个.py文件,从执行到输出要经历以下过程: step1 : .py文件编译成.pyc文件(字节码文件) step2 : .pyc文件发送至Python虚拟机(Python Virtual Machine,PVM),由其解释运行并输出结果 详细可...
  • python语言属于以下哪种语言?

    千次阅读 2021-01-13 13:48:51
    python语言属于以下哪种语言?答:高级语言软骨的慢性损伤包括___和___的慢性损伤答:关节软骨 骨骺软骨The _____ could be stereotyped as disciplinary.答:Germans《卧虎藏龙》捧获了第73届奥斯卡包括最佳外语片...
  • python是解释型的强类型动态语言

    千次阅读 2021-03-31 11:42:41
    文章目录python是解释型的强类型动态语言一、 编译型or解释型编译型解释型(python属于解释型)二、强类型or弱类型强类型语言(python属于强类型)弱类型语言三、动态型or静态型动态语言(python属于动态语言)静态...
  • python语言是一种什么类型

    千次阅读 2020-12-30 10:53:31
    Python是一种面向对象、解释型、动态类型计算机程序设计语言;最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。解释型:程序无需编译...
  • 以下哪项不属于Python语言的特点

    千次阅读 2020-11-20 18:34:42
    简单Python是一种代表简单思想的语言复。2. 易学Python有极其简单的语法。3. 免费、制开源Python是FLOSS(自由/开放源码软件)之一2113。4. 高层语言使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层...
  • Python语言的特点有哪些Python 是目前最...Python 语言主要有以下特点:1) 容易:Python 是一种代表容易主义思想的语言。阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python ...
  • java语言属于什么语言?

    千次阅读 2021-03-05 16:46:07
    JAVA语言是一种介于解释型语言和编译型语言之间的面向对象语言,属于高级混合型语言。Java代码需要先编译成class,然后交给JVM执行。而JVM在执行class代码时是解释执行的,所以Java不是一门单纯的编译型或解释型语言...
  • python属于什么类型的语言

    千次阅读 2020-11-30 02:38:45
    python属于什么类型的语言发布时间:2018-07-30 20:24,浏览次数:276, 标签:python* 编译型和解释型*编译型和解释型各有利弊,随着设计技术与硬件不断发展,编译型与解释型两种方式的界限正在不断变得模糊。...
  • 关于Python语言的特点,以下选项中描述错误的是答:Python语言是非开源语言为《素问》补充了“天元纪大论”等7篇大论的医家是:答:王冰中国大学MOOC: ( )由佛手、桃、石榴组成,寓意多福(佛)多寿(桃)多子(石榴,子多)...
  • 编译型语言和解释型语言的区别

    千次阅读 2021-10-28 07:14:22
    而因为不同语言转换的时机不同,但总体上可分为两类,因而将高级编程语言分为了编译型语言和解释型语言。两者在以下方面存在一定的区别(但不仅限于以下方面): 1、编译型语言在程序在执行之前需要一个专门的编译...
  • 编译型语言的执行效率更高 解释: 编程语言:是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义 计算机所需要使用的数据,并精确地定义...
  • JavaScript是解释型语言。 是不需要编译的,浏览器直接解释源代码,并执行在内存中创建变量等操作。 不需要编译,即不存在什么语法不语法的,因为没有编译阶段,直接在运行的阶段才进行语法校验,即在浏览器中执行...
  • 编译型语言与解释型语言

    千次阅读 2011-08-15 14:11:40
    对程序来说,计算机需要一个"翻译",即把程序代码变成计算机可以理解的语言:0和1组成的包含信息的序列。目前存在两种翻译类型:一个是编译,一个是解释。两种方式都需
  • java是什么语言 ?是什么系统?

    千次阅读 2021-03-05 16:45:33
    JAVA语言,其实是混合的一种语言,Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点。下面来介绍一些Java的主要特征:1) Java语言是简单的。Java语言的语法与C语言...
  • python语言属于-python属于哪种语言

    千次阅读 2020-11-01 12:04:45
    python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,可以应用于科学计算和统计、Web开发、人工智能、桌面界面开发、网络爬虫等领域。Python是一种跨平台的计算机程序设计语言。python是一个高...
  • 以下选项的叙述中,正确的是循环队列有队头和队尾两个指针,因此,循环队列是非线性结构在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况在循环队列中,只需要队尾指针就能反映队列中元素的动态变化...
  • 今天听到同事在讨论java是哪...这里先给出编译型语言和解释型语言的定义。定义: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 解释型语言:把做好的源程序翻译一句,然
  • python不属于开源语言,对么

    千次阅读 2021-01-12 09:37:57
    python是一种跨平台的计算机程序设计语言,是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。python属于开源语言。像Perl语言一样,Python源代码同样遵循 GPL(GNU General Public License)开源协议...
  • 高级语言的运行方式有两大类,一类是直接把我们的高级语言的代码...另一种就是再为我们的高级语言专门写一个程序,这个程序的作用就是解释执行我们的高级语言的代码;采用这种方式运行的语言我们称之为解释执行的语言
  • 一、python是什么编程语言编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢?1.1、编译型与解释型编译器:是把源程序的每一条...
  • 原因是:编译和解释是将高级语言636f70793231313335323631343130323136353331333366306466编写的程序翻译成机器语言程序的两种方式。解释方式是将源程序逐句解释执行,即解释一句执行一句,因此在解释方式中不产生...
  • 【多选题】以下属于分类算法的应用是?【判断题】要调用一个函数,需要知道函数的名称和参数。【单选题】以下关于Python的说法中正确的是哪一项?【判断题】Python语言是一种面向对象的高级程序设计语言。【简答题】...
  • 属于Python语言特点的是A、面向对象B、运行效率高C、可读性好D、开源2、以下叙述正确的是A、Python3.x和Python2.x兼容B、Python语言只能以程序方式执行C、Python是解释语言D、Python语言出现的晚,具有其他高级...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 159,972
精华内容 63,988
关键字:

以下属于解释型语言的是