精华内容
下载资源
问答
  • 编译型语言在程序执行之前,会先通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C/C++语言。 解释型语言就没有这个编译的过程,而是在程序...

    计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释

    编译型语言在程序执行之前,会先通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C/C++语言。

    解释型语言就没有这个编译的过程,而是在程序运行的时候通过解释器将程序翻译成机器语言,所以运行速度相对于编译型语言要慢,最典型的例子是RubyJavaC#等都是解释型语言。

    虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。在运行的时候,由JVMJava Virtual Machine,即Java虚拟机)将字节码再翻译成机器语言。所以,也可以说Java是一种“先编译后解释”的语言,但此处的“编译”与上面提到的编译不同。对于C#C#首先是通过编译器C#文件编译成IL文件,然后在通过CLR(公共语言运行库)将IL文件编译成机器文件。所以我们说C#是一门需要二次编译的语言。同理也可等效运用到基于.NET平台上的其他语言。

    编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如.exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(.exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

    解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译。但每条语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低

    我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以运行效率比较高。但是我们也不能一概而论,一些解释型语言也可以对解释器作出优化,从而在对程序做出翻译时对整个程序进行优化,这样做,在效率上也可能会超过编译型语言。

    编译型语言

    解释型语言

    代码需要经过编译方可运行

    可移植性差

    可移植性较好,只要有解释环境,可在不同的操作系统上运行,没有编译过程  

    只能在兼容的操作系统上运行

    运行需要解释环境,

    运行速度快,代码效率高,编译后的程序不可修改,保密性好

    运行起来比编译型语言慢,占用资源也要多一些,代码效率低

    C/C++Pascal/Object PascalDelphi

    JavaJavaScriptMATLABPython

    编译型语言由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它。而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScriptVBScriptPerlPython等。





    展开全文
  • 编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。...

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

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

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

    虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。
    在运行的时候,由JVM将字节码再翻译成机器语言。
    注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL,Nuva都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。

    4.脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在.

    脚本语言不需要编译,可以直接用,由解释器来负责解释。

    5.脚本语言一般都是以文本形式存在,类似于一种命令.

    举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.

    你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言。

    注:转载源地址

    展开全文
  • Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
  • 由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)={x|S x,其中S为文法的开始符号,且x ∈VT*} 例:G: S→0S1, S→01 L(G)={0n1n|n≥1}
    1.文法G(Z):Z->aZb|ab定义的是什么样的语言?

    答:L(G)={ an bn | n≥1}

    2.写出文法G(Z):Z->AB A->aBb|ab B-cB|b 定义的是什么样的语言

    答:L(G)={ a b cn b | n≥0 } , { a cm b2 cn b| m≥0&&n≥0}

    3.写出文法G(S):S->aAb A->aAb|b 定义的是什么样的语言

    答: L(G)={ an+1 bn+2 | n≥0}

    学如逆水行舟,不进则退
    
    展开全文
  • 我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译型语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器...

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


    图1 编程语言的层次结构

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

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

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

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

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

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

    int fact_while(int n)
    {
    	int result = 1;
    	while (n > 1) {
    		result *= n;
    		n = n-1;
    	}
    	return result;
    }

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

    	movl 8(%ebp), %edx 
    	movl $1, %eax 
    	cmpl $1, %edx 
    	jle .L7 
    .L10: 
    	imull %edx, %eax 
    	subl $1, %edx 
    	cmpl $1, %edx 
    	jg .L10
    .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很强大。所以,要深入语言的底层,要学会编译器、解释器和虚拟机的实现,这方面还需要下功夫啊。


    展开全文
  • 所以我一直觉得“编译型语言”跟“解释型语言”的说法太模糊,不太好。 有兴趣想体验一下从命令行编译“裸”的AS3文件得到ABC文件,再从命令行调用AVM2去执行ABC文件的同学,可以从 这帖 下载我之前从源码编译出来...
  • 什么是数据结构?

    千次阅读 2019-06-19 20:25:39
    一方面,在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。可以认为,数据类型是在程序设计中已经实现了的数据结构。另一方面,在程序设计过程...
  • 华中科技大学计算机组成原理慕课答案

    万次阅读 多人点赞 2020-01-26 00:09:18
    计算机系统层次结构中,微程序属于硬件级 2、完整的计算机系统通常包括( A ) A.硬件系统与软件系统 B.运算器、控制器、存储器 C.主机、外部设备 D.主机和应用软件 3、CPU地址线数量与下列哪项指标密切相关...
  • 程序设计语言及其文法1 文法:G:S→xSx | y所识别的语言是( )。 2 给定文法A→bA|ca,为该文法句子的是( )。A. bbaB. cabC. bcaD. Cba 3 设有文法G[S]:S->S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    以下哪个单词不属于javascript保留字:(B) 67 请选择结果为真的表达式:(C) 68 Javascript中, 如果已知HTML页面中的某标签对象的id=”username”,用____document.getElementById(‘username’)___ _方法...
  • 数据库面试

    千次阅读 多人点赞 2019-02-13 09:03:42
    1. SQL语言包括哪些类型? 数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等 数据操纵DML:Select ,insert,update,delete, 数据控制DCL:grant,revoke 2. 内联接,外联接区别? 内连接是保证...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    86 ★如何做测试需求分析 86 ★UML统一建模语言(Unified Modeling Language) 86 第十一章 配置管理 88 1.什么是配置管理 88 2.配置管理流程 88 3.SVN实战 88 配置管理工具SVN操作过程手册 90 一、 如何创建...
  • Java正则表达式

    千次阅读 2019-07-06 19:03:50
    上述代码与下列代码等效: String match0 = matcher.group( );  String match2 = matcher.group(2); 最后让我们看看Matcher对象解决修改字符序列的方法。正则表达式最常见的应用之一是查找并替换(search-...
  • 编译语言和解释性语言

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

    万次阅读 多人点赞 2018-09-27 12:31:09
    转载自: ... 软件测试面试题汇总 测试技术面试题 ...........................................................................................................
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言...
  • 就算全世界都不珍惜你,自己也要学会珍惜自己 文章目录python是解释型的强类型动态语言一、 编译型or解释型编译型解释型(python属于解释型)二、强...因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行.
  • A:java语言是编译型语言,会把java程序编译成二进制机器指令直接运行 B:java编译出来的目标文件与具体操作系统有关 C:java在运行时才进行翻译指令 D:java编译出来的目标文件,可以运行在任意jvm上 蒙蔽树上...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    2、利用二叉搜索树实现一个音像商店(小型书店、小型超市、或小型药店)的交易管理系统,要求实现以下功能: a. 该系统应该有一个字符的主菜单; b. 能按字母顺序显示库存商品的名称和数量; c. 能添加...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...
  • Java笔试面试题整理第八波

    万次阅读 多人点赞 2016-06-14 11:07:41
    允许我们在创建集合时就可以指定元素类型,当加入其他数据类型时,编译不能通过。 泛型只作用于编译阶段,在编译阶段严格检查类型是否匹配,类型检查通过后,JVM会将泛型的相关信息擦出掉(即泛型擦除),也就是说...
  • 给定语言写文法: (1)L1={00,01,10,11} (2)L2={0,1,00,01,10,11,000,…} =∑+(正闭包)(0、1上的所有非空串) (3)L3={ε,0,1,00,01,10,11,000,…} = ∑*(克林闭包) ∑+= ∑ ∑*= ∑* ∑ (∑* : ...
  • WPF开发教程

    万次阅读 多人点赞 2019-07-02 23:13:20
    ------WPF开发教程 目录 WPF基础入门....... 1. WPF基础之体系结构......2. WPF基础之XAML....3. WPF基础之基元素......4. WPF基础之属性系统......5. WPF基础之路由事件......6. WPF基础之布局系统......7. WPF基础之样式设置和模板...
  • 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。解释性...
  • 下面关于编译系统和解释系统的观点中,错误的是 正确答案: A 你的答案: A (正确) 解释程序不产生目标代码,它直接执行源程序或源程序的内部形式 使用编译系统时会区分编译阶段和运行阶段 一般来说,编译...
  • 静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。 例如:C++、Java、Delphi、C#等。 动态语言(弱类型语言) 动态语言是在运行时确定数据类型的语言。...
  • 编程语言和脚本语言是什么

    千次阅读 2019-01-14 10:51:38
    2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 3.与程序代码的关系:脚本也是一种语言,其同样由程...
  • 这篇文章将介绍Go的编译运行、语法规范、注释转义及API标准库知识。这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜...
  • Python语言的特点有哪些Python 是目前最流行的语言之一,从云计算、大数据到人工智能,Python 无处不在,Python 人才需求量也在逐年攀升,Python 为何能发展如此的迅猛,究竟有什么特点呢?Python 语言主要有以下...
  • Linux实用教程(第三版)

    万次阅读 多人点赞 2019-08-27 22:55:59
    越来越多的大中企业的服务器选择了Linux作为其操作系统。近几年来,Linux系统又以其友好的图形界面、丰富的应用程序及低廉的价格,在桌面领域得到了较好的发展,受到了普通用户的欢迎。 1.1.2 Linux系统的产生 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,731
精华内容 13,492
关键字:

下列属于编译型语言的是