精华内容
下载资源
问答
  • 编译性语言、解释性语言和脚本语言 编译性语言、解释性语言和脚本语言
  • 编译性语言和解释性语言的区别

    万次阅读 多人点赞 2018-09-27 20:31:22
    编译性语言和解释性语言的区别   1、编译性语言 (1)只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高; (2)编译性语言代表:C、...

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

     

    1、编译性语言

    • (1)只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高
    • (2)编译性语言代表:C、C++、Pascal/Object Pascal(Delphi);
    • (3)程序执行效率比较高,但比较依赖编译器,因此跨平台性差一些;

    不同平台对编译器影响较大。 
    如:

    • (1)16位系统下int是2个字节(16位),而32位系统下int占4个字节(32位);
    • (2)32位系统下long类型占4字节,而64位系统下long类型占8个字节;

    2、解释性语言

    • (1)源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行;

    源代码—>中间代码—>机器语言

    • (2)程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次;
    • (3)解释性语言代表:Python、JavaScript、Shell、Ruby、MATLAB等;
    • (4)运行效率一般相对比较低,依赖解释器,跨平台性好

    3、比较

    • (1)一般,编译性语言的运行效率比解释性语言更;但是不能一概而论,部分解释性语言的解释器通过在运行时动态优化代码,甚至能使解释性语言的性能超过编译性语言;
    • (2)编译性语言的跨平台特性比解释性语言一些;

    4、java是编译性语言还是解释性语言?

    对于这个问题,网上是众说纷纭;有人说是编译性语言,也有人说是解释性语言。但是个人觉得正如一位网友所说的那样,解释性或编译性和语言本身是没有关系的,即解释性或编译性可以看作是一种语言的状态;

    • java语言应是编译性-解释性语言,因为其同时具备编译性和解释性两种特性;

    java文件先编译成与平台无关的.class的字节码文件,然后.class的字节码文件既可以在Windows平台上的java虚拟机(JVM)上进行解释运行,也可以在Linux平台上的JVM上解释运行;而JVM的翻译过程时解释性的,JVM从.class的字节码文件中读出一条指令,翻译一条指令,然后执行一条指令,这个过程就称为java的解释执行

     

    以上内容参考了一些网络资料,再加上了自己的一些总结和体会!如有错误,欢迎指正!谢谢!

    展开全文
  • 编译性语言和解释性语言

    千次阅读 2018-10-05 14:52:33
    我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器...

    我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译型语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器或解析器经过多次转换完成的。

    图1 编程语言的层次结构

            这个层次结构中,从高到低越来越接近于机器硬件。机器代码就是01序列,汇编语言就是描述本地机器的指令集体系结构,而高级语言就包含相应的数据结构和语法结构,更接近人类的语言习惯。因此,层次越高就越面向于人类。在计算机科学中,CPU被抽象为指令集体系结构,这个指令集描述了CPU所有完成的所有功能。所有的程序都经过编译或解释转化为这个指令集表示的机器程序。在指令集中指令可以按功能划分为:

            1. 数据传输指令,用于读写内存、寄存器。

            2. 算术与逻辑运算指令,比如:addl执行双字(32bit)的加法,andl双字的按位与。

            3. 控制流指令,用于实现高级编程语言中的分支、循环等控制结构。

            4. 过程调用指令,用于实现函数调用,分配、恢复栈帧等操作。

            任何程序都需要被转换为某个指令集的指令序列,比如下列简单的求阶乘的C程序:

     

    [cpp] view plain copy

     print?

    1. int fact_while(int n)  
    2. {  
    3.     int result = 1;  
    4.     while (n > 1) {  
    5.         result *= n;  
    6.         n = n-1;  
    7.     }  
    8.     return result;  
    9. }  


    在32bit机器上,经过gcc编译之后的x86指令序列为:

     

     

    [plain] view plain copy

     print?

    1.     movl 8(%ebp), %edx   
    2.     movl $1, %eax   
    3.     cmpl $1, %edx   
    4.     jle .L7   
    5. .L10:   
    6.     imull %edx, %eax   
    7.     subl $1, %edx   
    8.     cmpl $1, %edx   
    9.     jg .L10  
    10. .L7:  

     

            通过观察C程序的机器代码可以发现由C程序转化为机器代码,主要有数据类型和控制结构的转换。下面以x86指令集说明:

     

            1. 数据类型的转换:在底层,x86指令对于数据是不区分逻辑类型的,也就是不分int,float,double。所有的数据按照其所占的字节数被归类为字(16个字节,Word)、双字(32个字节,Double Words)、四字(64个字节,Quad Words)。一个指令操作的数据类型是由这个指令的后缀表示的,比如mov指令,movw操作字,movl操作双字。也就是说高级语言的程序中的不同数据类型反映到底层指令集上主要体现是指令的不同。比如,将上述C程序中的result类型改为short,在相应的汇编代码中的mov指令会由movl转换为movw。当然,还有一个问题就是C语言中的具体数据类型,在机器代码中是如何存储表示的。这应该是gcc编译器的职责,比如对于int,首先gcc需要知道底层指令集如何编码int,采用什么编码方式,字节顺序是Big-endian还是Little-endian等。在知道底层的实现方式后gcc才能将表示整型数字的字符串编码为相应的二进制形式。而对于数组、struct和union这些数据结构会转化为相应的内存地址加偏移量的形式。

            2. 控制结构的转换:控制结构就是执行指令的流程。在x86中,所有的指令集都是顺序执行。要实现分支、循环等结构,必须具备go形式的跳转指令,以及相应的条件判断指令。CPU中有一组条件码寄存器,指示算术或逻辑运算的状态(计算结果是否溢出、为0或者是负数等)。执行条件运算指令可以测试一个条件,比如"cmpl $1, %edx"比较直接数1与寄存器%edx中存放的数的大小,并将结果存入条件码寄存器中。接下来执行条件跳转指令,根据条件码寄存器中的状态进行判断是否进行跳转。比如“jg .L10”是在前一条的cmpl指令结果返回大于的情况跳转到L10,否则执行下一条指令。

            当然,在进行函数调用时,还要在底层用机器码对其进行描述。我们知道,计算机科学中用栈来实现函数的调用(叫做调用栈),栈中存放栈帧。每一次函数调用对应一个栈帧,栈帧中包含该方法的局部变量、保存的寄存器值等数据。这样函数的调用和返回就对应着栈帧的入栈和出栈。CPU的寄存器组中,有两个专门用于实现方法调用,分别是%esp和%ebp。%esp是栈指针寄存器,存放当前函数栈栈顶的内存地址。%ebp是帧指针寄存器,在%esp和%ebp之间的内存地址序列就对应于当前函数的栈帧。由于函数调用、返回与栈帧的关系很密切,所以可以将以此函数调用过程描述为:

            1. 初始化被调用函数的栈帧,并将其入栈。也就是调用函数过程,通过call指令实现。

            2. 执行被调用函数。

            3. 恢复调用函数的栈帧,将被调用函数的栈帧出栈。也就是函数返回的过程,通过ret指令实现。

            对于初始化、恢复栈帧实际上都是%esp和%ebp的调整,还要包括传参和返回值的问题,这些都是由编译器实现的。

            上面介绍了C语言和机器语言的关系,下面看一下其他类型语言的实现机制。首先,我们可以把编程语言分为编译型语言、解释型语言和虚拟机语言。编译型语言直接被编译成本地机器代码,比如C、C++。解释型语言是通过解释器执行,比如JavaScript、shell、Python等。虚拟机语言运行在虚拟机上,需要被编译成虚拟机代码,由虚拟机执行,比如Java。虽然python也有自己的虚拟机,但是不需要编译,所以把它归类为解释型语言。

    图2 编程语言实现结构

            通过上文的分析、我们知道对于一门语言最重要的是数据类型、控制结构和语法结构以及系统调用。从上图可以看出,C和C++更接近于底层硬件,但是不能像汇编语言一样可以直接访问寄存器等硬件。而python和java相对于C和C++的抽象层次又高了一层,它们不能通过指针直接访问内存。从机器语言->汇编语言->系统语言(C和C++)->解释型语言(python)和虚拟机语言(java),抽象层次越来越高,越贴近于人的思维,不需要考虑那么多细节;同时,程序员的自由度和程序的运行速度越来越低。下面从低向高j讨论一下。

            在底层,汇编语言会经过汇编器转换为机器代码。比如,通过gcc编译C程序时,会调用汇编器进行汇编。通过汇编器和汇编语言这一层次,可以很好的隔离底层机器硬件的实现细节。不同的处理器具有与之对应的汇编器,将汇编语言汇编成该处理器支持的指令集。这样就是实现了汇编语言这一层的移植性。

            在C和C++系统编程语言这一层,会通过编译器完成语言元素到汇编语言的映射。比如前文描述的,数据类型、控制结构、函数调用等结构的转换。

            python是解释型语言,它通过python解释器实现向底层语言的映射。我们知道python虚拟机是由C语言编写的,所以python程序会转化为C程序而执行。比如,python中的所有对象都会在C中有对应的PyObject结构体。python的list、dict等数据类型也要在C中有对应的表示。而像生成器、迭代器等语法结构需要相应的支持。

            而虚拟机是模拟一个指令集的程序,所以它自身有一套独立于具体硬件、操作系统的指令集。需要通过底层语言实现这套指令集。虚拟机本身也有自己的数据类型系统、语言结构等。比如,java虚拟机上支持的数据类型有基本数据类型和引用类型,也支持tableswitch和lookupswitch等实现switch语法结构的字节码指令。对于这些语言元素映射到底层语言的实现方式可以不同的方式。首先是解释器模式转化为C++,还有就是JIT直接编译成本地机器代码。

            像java这样的虚拟机语言会被编译器编译成虚拟机本地的机器代码,然后再虚拟机上执行,这里就需要向javac编译器实现java语言的数据类型、语言结构和java虚拟机上的数据类型、语法结构的映射。

            通过谈论,可以看出编译器和解释器以及虚拟机在编程语言中的重要性,它们都是编程语言可以在计算机上运行的基石。一门编程语言的编译器、解释器或者虚拟机可以很大程度上影响这门语言的执行效率。因为它们在进行语言转换时会进行很多的优化以提高执行效率。这也是为什么JVM上有那么多优秀的语言,因为JVM很强大。所以,要深入语言的底层,要学会编译器、解释器和虚拟机的实现,这方面还需要下功夫啊。

    --------------------- 本文来自 zhangzker 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhangzker/article/details/53171132?utm_source=copy

    展开全文
  • Python:一种先编译后解释的语言,先编译为字节码形式的 .pyc后缀文件,然后再进行逐句解释执行。 但是呢,在进行在进行编译前,Python解释器首先会寻找有无存在.pyc文件,若存在则跳过编译过程直接进行解释执行,...

    Python:一种先编译后解释的语言,先编译为字节码形式的 .pyc后缀文件,然后再进行逐句解释执行。
    但是呢,在进行在进行编译前,Python解释器首先会寻找有无存在.pyc文件,若存在则跳过编译过程直接进行解释执行,否则编译—执行。
    .pyc文件的过期时间:若.pyc文件的时间戳和程序最后保存时间戳不一致,则删除老.pyc文件,重新编译----解释执行,否则直接解释执行。

    展开全文
  • 参考外网解释,打不开就看我个人通俗的理解吧 解释性就是运行时候一步一步转换为机器语言,直接运行。 编译性就是先得把所有的转换为机器语言,运行时再运行。 ...

    https://www.lifewire.com/compiled-language-2184210

    参考外网解释,打不开就看我个人通俗的理解吧

    解释性就是运行时候一步一步转换为机器语言,直接运行。

    编译性就是先得把所有的转换为机器语言,运行时再运行。

     

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

    千次阅读 2015-10-04 10:16:20
    解释性语言和编译性语言的区别 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。两...
  • 解释性语言和编译性语言

    千次阅读 2018-01-04 12:35:08
    解释性语言和编译性语言的定义: 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。两种...
  • 编译性语言、解释性语言和脚本语言
  • java是编译性语言,解释性语言

    千次阅读 2018-06-27 23:05:47
    编译性语言。书中对java的描述是这样的: java兼具编译性与解释性,java编译器会将java源码翻译成所谓的字节码(面向 虚拟CPU的指令集)当java可执行文件(字节码)在机器上运行时。解释器会将每一个 字节码转换为...
  • 编译性语言&解释性语言

    千次阅读 2016-04-22 11:46:33
    任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器或解析器...
  • 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。 翻译的方式有两种,一...解释则不同,解释性语言的程序不需要编译,省了道工序,解
  • 【Language】解释性语言编译型语言的区别和不同

    万次阅读 多人点赞 2017-10-24 14:24:46
    解释性语言编译型语言的区别和不同解释性语言 编译型语言 概念 计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两...
  • 解释型语言编译语言

    万次阅读 2019-06-22 16:04:52
    解释型语言编译语言 编程语言从执行原理上可分为编译语言和解释型语言。 比如常见的C语言、C++等都是编译语言 Java、Python等都是解释型语言 计算机不能直接理解机器语言以外的语言,因此需要将我们写的代码...
  • 编译语言和解释型语言  计算机是不能理解高级语言,当然也就不能直接执行高级语言了。计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算 机才能运行高级语言编写的程序。  一、编译...
  • 编译语言和脚本型语言的区别

    千次阅读 2020-06-20 19:48:43
    首先我们需要了解一下程序语言的大体分类,通过分类进行纵向横向的选择学习,深入提高。     相信大部分同学在没有来到大学之前已经有过编程接触史了吧,有搞过scratch少儿编程,还是机器人...
  • Java语言

    千次阅读 2020-01-19 12:22:35
    学习Java首先听到最多的应该就是面向对象了,所以说Java就是是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承(Java里面是没有类的多继承的)、指针(Nopoint)等概念,因此...
  • 编译语言与解释型语言的优缺点

    千次阅读 2019-03-09 15:20:23
    编译语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译语言,而Java,C#等都是...
  • 什么是编译语言和解释型语言

    万次阅读 多人点赞 2018-08-01 21:42:16
    什么是编译语言和解释型语言 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。 ...
  • 首先需要明确的一点是,什么是编译型语言和解释性语言 编译型语言,就是在其执行过程中需要先将其经过编译成机器码来给计算机识别的,其执行效率就会比较高这个是显而易见的,常见比如:C、C++ 而解释型语言,是...
  • 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Python是一种解释型语言 Python程序源码不需要编译,可以直接从源代码运行程序。Python解释器将源代码转换为...
  • 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Java语言看似是编译型的,因为Java程序代码的确是需要经过编译的 还记得在cmd中用javac的命令吗? 没错,...
  • 编译语言与解释型语言的真正区别

    万次阅读 多人点赞 2018-10-20 13:02:00
    三、进而可推之解释性语言编译型语言的优缺点 一、编译型语言与解释型语言的必需知识点 解释性语言编译型语言   解释性语言 编译型语言 概念 计算机不能直接的理解高级语言,只能直接理解机器...
  • 编译型语言在程序执行之前,有一...解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这...
  • 编译语言与解释型语言的区别及各自的优缺点

    万次阅读 多人点赞 2017-04-18 15:19:21
    编译语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译语言,而Java,C#等都是...
  • 脚本语言编译语言的区别【转】

    万次阅读 2018-09-19 13:51:21
    之前学了很多语言,例如c,c++,Java,c#,Python,突然想知道他们是怎么分类的,突然有疑问什么是编译语言,什么是脚本语言,查了一些资料,有了简单的初步了解,下面是总结的一部分内容,如果有什么问题敬请指正!...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 597,357
精华内容 238,942
关键字:

编译性语言