解释Interpretion 与 翻译Translation/编译Complie

有时候,要搞清楚问题的因和果. 首先上图, 这张图将是本篇文章的核心。
如有错误希望一定指出.

machine translation and translation memory的区别 translation和interpretation_解释


此图来自: 添加链接描述

一. 引言

CPU 执行自己知晓的二进制指令. 同时,为了提高效率,人们发明了便于理解的汇编语言,将机器码与相应的汇编语言一一对应. 为了进一步提高效率,又发明了高级语言. 更高级别的编程语言.这就产生了一个问题: 如何让机器执行高级语言????主要有以下两种方式。

编译(Complier): 从源语言编写的 源程序产生目标程序的过程。
解释(interpretion): 执行一种语言的过程.

另外额外添加一种概念,遇上面两个概念做区分:
汇编(动词): 将汇编语言转化为相应2进制机器码的过程,其中机器指令和汇编指令是一一对应的. 更多的编译型语言需要用到汇编器进行汇编.

二. 解释器与编译器的对比

编译器与解释器的概念不用再多说了.

  1. 解释器很好实现,编译器不好实现
  2. 现代解释器可以很好的用于跨平台(原因见下文).

三. 现代解释器

最初的解释器直接从 Source Code 产生可被 CPU 执行的 Machine Language(并非汇编)。但如果 Source Code 采用高级语言编写,就会极其损耗效率. 所以现代解释器一般采用编译的方式将高级语言编译为特殊的ByteCode(见图),再继续由解释器从 ByteCode 产生被 CPU 执行的 Machine Language.

这么做的好处显而易见:

  1. 由于 ByteCode 的层级非常低(见图), 解释 ByteCode 比解释 高级语言 要快得多.
  2. 可以编写一次高级语言代码,编译为 ByteCode. 复制到 冰箱,电视,等等…电器上,然后由解释器解释为机器码.跨平台特性大大提升. (优秀的跨平台性,各种平台只需解析中间代码即可).
    Java,C#,Python 都是这种方式
特殊关注:
  1. 语言等级从高到低,编译的效率逐渐降低、解释的效率逐渐增加.
  2. 大多数编译执行的语言,也可以解释执行。很多解释执行的语言,也可以通过编译得到更好的性能。
  3. CPU 是一种由硬件组成的解释器,用来解释机器语言.

高级语言如何被CPU执行???
答:

  1. 高级语言 --编译–> 汇编语言 --汇编–> 目标文件xxx.o(机器语言) --链接–> 可执行文件a.out(机器语言) --装载–> 内存 --> CPU -解释-> 成功执行

四. 扩充

脚本型语言: 是一种编程语言,用来控制软件应用程序,只在被调用时进行解释或编译。但绝大多数属于解释型语言。
跨平台: 跨品台性是针对程序而言,而非针对源代码而言,这一点一定要搞清楚. ByteCode 是通用的,然后直接被解释执行.

  • C 语言代码是通用的,其编译产物(是可执行文件)不通用, 但该程序可以不经解释直接执行.
  • Java 语言代码是通用的,其编译产物(是bytecode!!!)是通用的, 该程序 经解释 才能执行.