zoukankan      html  css  js  c++  java
  • 【软考5】解释型 or 编译型

    导读:在上篇博客中,我们了解到,目前的编码语言经过不断的发展,已经经历了机器语言——汇编语言——高级语言的过程。虽然我们的编码语言在不停的升级,但作为计算机来说,它始终是一个只能理解0和1构成的机器语言的,那么,高级语言怎样才能让计算机理解呢?这里,就出现了解释和编译的概念。

    一、概述

    由于计算机只能理解0和1,那么高级程序设计语言在执行的时候,则需要对其进行翻译。担负这一任务的程序称为“语言处理程序”。语言之间的翻译形式多种多样,基本方式为:汇编、解释、编译。

    理解几个基本概念:

    1.1,源程序

    源程序:用某种高级语言汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个汇编程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。

    1.2,解释程序

    解释程序:也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行

    1.3,编译程序

    编译程序:也称为编译器,是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。

    1.4,汇编程序

    汇编程序:将用汇编语言编写的源程序翻译成机器指令程序。其基本工作包括将每一条可执行汇编语句转换成对应的机器指令,处理源程序中出现的伪指令。

    二、具体定义

    2.1,解释型

    相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。

    解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程 序,每个语句都是执行的时候才翻译。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨 平台性好.)

    2.2,编译型

    运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。像C/C++等都是编译型语言。

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

    3.2,汇编型

    使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。

    三、区别和联系

    3.1,联系

    不管是汇编、解释 或者是编译,这些都是将高级语言翻译成机器语言的一种 方式,他们最终的目的和本质是相同 的,只是过程和形式不一样。

    3.2,区别

    解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程 序,每个语句都是执行的时候才翻译。在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨 平台性好。

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

    汇编型语言:从严格意义上来说,在我看来,汇编作为一种符号语言,还算不上是一种高级语言。但如果从机器是否理解的角度来区分高级语言,那么汇编也可以算是一种高级语言。汇编源程序,必须经过两次扫描转换为目标程序。其执行运行过程为:(1) 用编辑程序(EDIT)建立ASM源文件;(2) 用MASM程序把ASM文件(即汇编语言程序)转换成OBJ文件;(3) 用LINK程序把OBJ文件转换成EXE文件;( 4) 用调试程序DEBUG调试EXE文件;(5) 在DOS命令行下直接键入EXE文件名就可以执行。汇编型语言是面向机器进行编码,其运行效率是非常高的。但每一种处理器都有不同的汇编语法和编译器,所以汇编型语言的可移植性很差。

    四、学习感受

    对于解释型或者编译型的学习,目前也只能是从宏观上去了解它,尤其是汇编这一块,现在对于我来说,去搞懂其汇编过程还是比较困难的。但从学习这个也可以看出,语言向着高级发展,但在实际执行的过程中,却又翻译成最原始的机器语言,所以,大概是越高级的语言,其程序效率越低吧。语言的发展向着用户理解,那么将来需要解决的问题大概是:怎样平衡高效的用户理解和高效的机器理解!

  • 相关阅读:
    30流的使用和分类
    使用EF Model First创建edmx模型,数据库有数据的情况下,如何同时更新模型和数据库
    29防止程序集被篡改仿冒,全局程序集缓存GAC
    报错:不允许保存更改。您所做的更改要求删除并重新创建以下表……
    28先判断是否存在,再创建文件夹或文件,递归计算文件夹大小
    27程序集资源
    MVC缓存02,使用数据层缓存,添加或修改时让缓存失效
    26复杂类型比较,使用Compare .NET objects组件
    25LINQ拾遗及实例
    MVC缓存01,使用控制器缓存或数据层缓存
  • 原文地址:https://www.cnblogs.com/hhx626/p/6010401.html
Copyright © 2011-2022 走看看