java解释器和编译器的区别,Java,Python谁是编译型语言,谁是解释型语
java解释器和编译器的区别,Java,Python谁是编译型语言,谁是解释型语详细介绍
本文目录一览: 编译器和解释器的区别
即时编译器和JAVA解释器的区别?运行环境不同 解释程序可跨平台使用,因为解释器已经做好了对不同平台的交互处理,用户写的源代码不需要再考虑差异性,源代码所有平台都可以直接执行。
编译型语言最大的优势之一就是其执行速度。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%-70%。编译型程序比解释型程序消耗的内存更少。不利的一面——编译器比解释器要难写得多。
对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
Javac编译器读取Java源代码,并将其编译成字节代码,调用Javac的命令行示例如下:C:javac options filename.java 值得注重的是,和Java解释器不同,Javac 编译器期望它正在编译的文件具有扩展名.java。
每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
AVAEE是指java enterprise edition,java企业版,多用于企业级开发,包括web开发等等很多组建;Java和JavaEE区别: Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
...就一劳永逸循环使用?编译器和解释器有什么区别?代码经过编译器编译过后,以后就不需要再编译了,但是现在好多开发系统为了实现跨平台,可能编译输出的不一定是最终可执行代码,由其他平台负责处理执行。解释器一般是程序执行时才工作,每一条指令先由解释器处理然后再执行。
运行环境不同 解释程序可跨平台使用,因为解释器已经做好了对不同平台的交互处理,用户写的源代码不需要再考虑差异性,源代码所有平台都可以直接执行。
但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。
解释型语言和编译型语言的区别是在于翻译的时间点不同。编译型语言是在代码执行之前进行编译,生成中间代码文件。解释型语言是在运行时进行及时解释,并立即执行,当编译器以解释方式运行的时候,也称之为解释器。
编译器是把你代码汇编成二进制文件,可以执行的程序。这个跟vb的那种解释器是不一样的。调试器是对已经存在的二进制文件进行调试的软件,目的在于查找性能的瓶颈和跟踪软件的bug。
你好!编译器(在windows下,javac.exe)将源代码(java文件)编译为字节码(bytecode),存放在class文件中。字节码不能直接在机器上执行,而是通过虚拟机(windows下是java.exe)执行。
解释和编译有什么区别1、读音不同 解释:读音是jiě shì。编译:读音是biān yì。意思不同 解释:意思是指在观察的基础上进行思考,合理地说明事物变化的原因,事物之间的联系,或者是事物发展的规律。
2、编译是将源程序翻译成可执行的目标代码;解释程序不产生目标代码。解释程序可跨平台使用;编译程序跨平台性不好。解释程序可以随时修改,立刻生效;编译程序不行。解释程序运行效率低;编译程序执行速度快。
3、处理方式区别 ①编译过程与解释挺像,区别就在于编译是将所有的源代码指令一次性成翻目标代码并执行。②汇编过程就是把汇编指令一对一地翻译成01机器码的过程。而采用这种处理方式的语言只有一类:汇编语言。
4、编译型语言的优缺点:执行效率高,缺点是跨平台能力弱,不便调试。解释型 解释型语言:解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。执行时才翻译执行。程序每执行一次就要翻译一遍。
5、其区别主要为:解释程序直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如basic解释程序。编译程序是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。
6、编译程序是整体编译完了,再一次性执行。而解释程序是一边解释,一边执行。 解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。
编译型语言和解释型语言的区别程序控制权不同:对于解释性语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。
编译型语言和解释型语言的区别是翻译的时间点不同。编译型语言:编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件,比如exe。因为翻译只做一遍,以后都不需要翻译,所以执行效率高。
解释型语言和编译型语言的区别是在于翻译的时间点不同。编译型语言是在代码执行之前进行编译,生成中间代码文件。解释型语言是在运行时进行及时解释,并立即执行,当编译器以解释方式运行的时候,也称之为解释器。
编译型语言 优点:运行速度快,代码效率高,编译后的程序不可修改,保密性较好。缺点:代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行 。
解释性语言是指它常用的执行机制是使用一个“解释器”来执行,解释器对于程序是一句一句“翻译”成机器语言来执行,例如shell脚本语言。
编译器和解释器的区别和联系1、编译和解释的区别是与计算机的交流方式不同、运行环境不同、运行速度不同。与计算机的交流方式不同 编译是将源程序翻译成可执行的目标代码,执行可执行程序文件,翻译与执行是分开的。
2、解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。
3、这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。
4、②汇编过程就是把汇编指令一对一地翻译成01机器码的过程。而采用这种处理方式的语言只有一类:汇编语言。
编译和解释的区别是什么?1、读音不同 解释:读音是jiě shì。编译:读音是biān yì。意思不同 解释:意思是指在观察的基础上进行思考,合理地说明事物变化的原因,事物之间的联系,或者是事物发展的规律。
2、处理方式区别 ①编译过程与解释挺像,区别就在于编译是将所有的源代码指令一次性成翻目标代码并执行。②汇编过程就是把汇编指令一对一地翻译成01机器码的过程。而采用这种处理方式的语言只有一类:汇编语言。
3、编译是将源程序翻译成可执行的目标代码;解释程序不产生目标代码。解释程序可跨平台使用;编译程序跨平台性不好。解释程序可以随时修改,立刻生效;编译程序不行。解释程序运行效率低;编译程序执行速度快。
4、编译程序能生成目标程序,而解释程序不能。补充:编译程序是整体编译完了,再一次性执行。而解释程序是一边解释,一边执行。 解释一句后就提交计算机执行一句,并不形成目标程序。
5、Delphi)等都是编译语言。而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB等等。
编译器和解释器的主要区别是什么?他们相对于对方各自的优点?
解释器
是
解释执行
的源代码,
编译器
是将源代码编译成
目标代码
他们最大的区别是程序运行时需要解释器边解释边执行,而编译器则在运行时是完全不需要的
解释器的优点是比较容易让用户实现自己跨平台的代码,比如java,php等,同一套代码可以在
几乎所有的
操作系统上执行,而无需根据操作系统做修改;
编译器的目的就是生成目标代码再由连接器生成可执行的
机器码
,这样的话需要根据不同的操作系统编制代码,虽然有像Qt这样的源代码级跨平台的编程工具库,但在不同的平台上仍然需要重新编译连接成可执行文件,但其执行效率要远远高于解释运行的程序。
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)
即时编译器和JAVA解释器的区别?
即时编译器预先把程序编译完成,当执行时就直接调用。
而JAVA解释器则是当需要调用该代码时才临时编译解释,而且没执行一次就要编译一次,而即时编译器则是一次编译多次执行。
即时编译器预先把程序编译完成,当执行时就直接调用。
而JAVA解释器则是当需要调用该代码时才临时编译解释,而且没执行一次就要编译一次。
所以即时编译器好一些。
Java的编译方式有两种,一种是和C++等语言一样的,把源代码编译成和本地机器平台相关的机器语言,叫即时编译。另一种是编译成一种中间的字节码,与机器平台无关的,这种也是常用的,叫解释型的。
即时编译器因为产生的是本地机器的机器码,能直接执行;不像字节码还要在JVM(Java虚拟机)上解释运行,所以执行得更快些。
jdk中的编译器是什么,解释器是什么
编译器是指java程序运行时对java代码进行语法检查和代码规范的一种机制,若不符合代码规范和语法有错误编译器将会报错,代码将无法运行。解释器我很少听说,是不是编译器报错的时候出现的错误提示?
javac:Java编译器,将Java源代码换成字节代;
java:Java解释器,直接从类文件执行Java应用程序代码;
Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
Java源代码---->编译器---->Java字节码(即虚拟指令)---->jvm---->解释器----->二进制机器码
编译和解释的区别是什么?
区别如下:
编译是指将源语言转化为目标计算机的可执行二进制代码。
如将C、C++编译为Windows上的可执行2进制文件。
这种编译一旦完成,那么就只能在特定平台上运行了。
由于程序执行的是编译好的二进制文件,因此速度比较快(相对下面的解释)。
解释是指程序不做任何变动,以源代码的形式提供在目标计算机上执行。
但是源生代码计算机是不识别的,因此要边解释边执行,解释一条执行一条。
这样的话就比编译要慢了。
由于程序要在运行时动态解释语言,因此往往需要特定的平台。
例如Java需要目标机器上安装JRE,但是这种方式也有一个好处就是可以跨平台。
源代码不变,在运行时根据不同的平台,解释成不同的二进制执行。
两者互有优劣
后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。二、编译与解释编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.1、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM; 2、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM; 3、连接:用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下:LINK LX.OBJ; 4、执行:如果结果在屏幕在显示,则直接执行可执行文件。 5、调试:用调试程序(DEBUG.EXE)对可执行文件进行调试,格式如下:DEBUG LX.EXE1. 在具体计算机上实现一种语言,首先要确定的是表示该语言语义解释的虚拟计算机,一个关键的问题是程序执行时的基本表示是实际计算机上的机器语言还是虚拟机的机器语言。这个问题决定了语言的实现。根据这个问题的回答,可以将程序设计语言划分为两大类:编译型语言和解释型语言。2. 由编译型语言编写的源程序需要经过编译、汇编和链接才能输出目标代码,然后机器执行目标代码,得出运行结果,目标代码由机器指令组成,一般不能独立运行,因为源程序中可能使用了某些汇编程序不能解释引用的库函数,而库函数代码又不在源程序中,此时还需要链接程序完成外部引用和目标模块调用的链接任务,最后输出可执行代码。C、C++、Fortran、Pascal、Ada都是编译实现的。3. 解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。对于解释型Basic语言,需要一个专门的解释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。4. Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。)
程序编译(compilation
,
compile)是指利用编译程序从源语言编写的源程序产生目标程序的过程。
程序解释是高级语言翻译程序的一种,它将源语言书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。
编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。
用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
简单,举个例子
解释就像边吃饭,边喝汤。
编译就像吃过饭了,再喝汤。
解释执行一句就能看到一句效果。
而编译是把全部的语句执行完,才能看到结果。
1.定义区别
①编译原理旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。
②汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
2.处理方式区别
①编译过程与解释挺像,区别就在于编译是将所有的源代码指令一次性成翻目标代码并执行。
②汇编过程就是把汇编指令一对一地翻译成01机器码的过程。而采用这种处理方式的语言只有一类:汇编语言。
3.特点区别
①编译语言的特点就是不需要解释器的参与,所以运行比较快,但是编译好的程序只能在当前平台运行,是个局限性。
②汇编语言是当今世界上历史最早,应用最广,功能最强大,运行速度最快的编程语言。但是汇编语言开发工期长,可读性差,并且不能跨平台编程。
参考资料:百度百科-编译
参考资料:百度百科-汇编
Java 是编译型语言还是解释型语言?
在回答这个问题之前,我们先要搞清楚基本概念,什么是编译型语言,什么是解释型语言。
我们都知道,计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。
所谓编译型语言就是把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。解释型语言就是把做好的源程序翻译一句,然后执行一句,直至结束!
那么两者之间的区别是什么呢?解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
对于Java来说,其实它是很特殊的,java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。
高级计算机语言主要有两种类型:编译和解释。
编译语言:在程序运行之前,它有一个单独的编译过程,它将程序转换成机器语言,以后不再需要翻译。
解释语言:运行时将程序翻译成机器语言,因此速度比编译语言慢。
因此,两者之间最大的区别是是否保存目标机代码:编译器会在一些单位输入源程序(如基本块/函数/方法/微量)生成目标机代码,都放下(无论是在磁盘或内存)的后续执行可重复使用;解释的的解释,一个实现在一个源程序指令的解释,没有目标代码的存在,没有后续执行可重用信息。
所以,java是一种解释性的语言
像C和C++,他们可以直接编译成操作系统识别的类型编译后,就可以直接执行,所以他们是编译语言。未经治疗的二倍,他不是为java首先被编译成相同。类文件,这是java的文件类型,然后通过虚拟机(JVM)的解释和执行读一行的类文件,所以他是解释型的语言,和java的各种操作系统不同的JVM,java实现跨平台的真正意义!
因此,java的解释器的优点是,它是用户实现自己的跨平台的代码更容易,和代码相同的设置几乎可以在所有操作系统执行。
这是一个跨平台的java,并可在任何地方运行:跨平台的java是基于JVM。Java虚拟机是由软件或硬件模拟的计算机程序,java,计算机所有的.class文件是运行在JVM,即JVM *。只有Java类文件,以适应不同的操作系统,让操作系统的安装按照不同只要JVM的类型,然后程序无论哪个操作系统的JVM可以纠正窗口/其他...... JVM的Unix / JVM的实现因此,如果没有JVM,就不能跨平台。
关于“编译型语言”和“解释性语言”的区别
解释性语言和编译型语言的区别与不同之处如下:
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种:
一个是编译
一个是解释。
两种方式只是翻译的时间不同。
编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。
1、程序控制权不同:
对于解释性语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。
2、运行速度不同:
一些网页脚本,服务器脚本以及辅助开发接口这样的对速度要求不高,对不同系统的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、Matlab等等。
编译语言由于程序执行速度快,同等条件下对系统的要求比较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++,Pascal/Object Pascal(Delphi)等都是编译型语言。
3、移植性不同:
解释型语言,例如Java语言,Java程序首先通过编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机(VM)进行解释。如果运行在Linux平台上,则通过Linux平台上的Java虚拟机进行解释执行。
所以说能跨平台,前提是平台上必须要有相匹配的Java虚拟机。如果没有Java虚拟机,则不能进行跨平台。
编译型语言,例如C语言,用C语言开发程序后,需要通过编译器把程序编译成机器语言(即计算机可以识别的二进制文件,因为不同的操作系统识别的二进制文件是不同的),所以C语言程序进行移植后,需要重新编译(如Windows编译成ext文件,Linux编译成erp文件)。
参考资料来源:百度百科-解释性语言
参考资料来源:百度百科-编译型语言
编译型语言和解释型语言的区别
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。
虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。在运行的时候,由JVM将字节码再翻译成机器语言。注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL,Nuva都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
编译型语言:
编译型语言最大的优势之一就是其执行速度。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%-70%。
编译型程序比解释型程序消耗的内存更少。
不利的一面——编译器比解释器要难写得多。
编译器在调试程序时提供不了多少帮助——有多少次在你的C语言代码中遇到一个“空指针异常”时,需要花费好几个小时来明确错误到底在代码中的什么位置。
可执行的编译型代码要比相同的解释型代码大许多。例如,C/C++的.exe文件要比同样功能的Java的.class文件大很多。
编译型程序是面向特定平台的因而是平台依赖的。
编译型程序不支持代码中实现安全性——例如,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)
由于松散的安全性和平台依赖性,编译型语言不太适合开发因特网或者基于Web的应用。
解释型语言:
解释型语言提供了极佳的调试支持。一名Java程序员只需要几分钟就可以定位并修复一个“空指针异常”,因为Java运行环境不仅指明了异常的性质,而且给出了异常发生位置具体的行号和函数调用顺序(著名的堆栈跟踪信息)。这样的便利是编译型语言所无法提供的。
另一个优势是解释器比编译器容易实现
解释型语言最大的优势之一是其平台独立性
解释型语言也可以保证高度的安全性——这是互联网应用迫切需要的
中间语言代码的大小比编译型可执行代码小很多
平台独立性,以及严密的安全性是使解释型语言成为适合互联网和Web应用的理想语言的2个最重要的因素。
解释型语言存在一些严重的缺点。解释型应用占用更多的内存和CPU资源。这是由于,为了运行解释型语言编写的程序,相关的解释器必须首先运行。解释器是复杂的,智能的,大量消耗资源的程序并且它们会占用很多CPU周期和内存。
由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多。
解释器也会做很多代码优化,运行时安全性检查;这些额外的步骤占用了更多的资源并进一步降低了应用的运行速度。
Java,Python谁是编译型语言,谁是解释型语
Java,Python谁是编译型语言,谁是解释型语
编译型语言要先编译再运行,而解释性语言直接“运行”源代码。
回到最开始的问题,如果以是“否保存机器码为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等。