Fork me on GitHub

计算机语言中编译和解释的总结

目录

  • 背景
  • 第一部分 几个概念
  • 第二部分 编译器和解释器
  • 第三部分 解释型语言和编译型语言
  • 参考文献及资料

背景

非计算机科班,主要是总结给自己看的,如果有表达错误,请大家指正。

第一部分 几个概念

高级语言与低级语言

高级语言(High Level Programming Language)和低级语言(Low Level Programming Language)是一对相对的共生概念(没有一个严格的量化区分标准)。

  • 低级语言更接近计算机底层资源(直接与硬件资源进行交互)。例如汇编语言。
  • 高级语言进行了封装和抽象,语言设计更容易被人类思维逻辑所理解(和低级语言比较,学习曲线较缓)。例如C、C++、java、python等。

随着计算机语言的蓬勃发展(计算机语言的文艺复兴),过去一些高级语言,也有人重新定位成低级语言,例如C语言。

字节码与机器码

字节码(Byte Code)不是一种计算机语言。属于高级语言预编译生成的中间码。高级语言源码在预编译的过程中,就完成这部分工作,生成字节码。

机器码(Machine Code)是一组可以直接被CPU执行的指令集。所有语言(低级和高级)最后都需要编译或解释成机器码(CPU指令集),才能执行。

第二部分 编译器和解释器

编译器(Interpreter)

A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language), with the latter often having a binary form known as object code. The most common reason for converting source code is to create an executable program.

  • 编译器是一种计算机程序。
  • 编译器是一个计算机语言的翻译工具,直接将源代码文件预编译(形象的说:翻译)成更低级的代码语言(字节码码、机器码)。
  • 编译器不会去执行编译的结果,只生成编译的结果文件。

解释器(Compiler)

In computer science, an interpreter is a computer program that directly executes, i.e. performs, instructions written in a programming or scripting language, without previously compiling them into a machine language program. An interpreter generally uses one of the following strategies for program execution:

1、parse the source code and perform its behavior directly.

2、translate source code into some efficient intermediate representation and immediately execute this.

3、explicitly execute stored precompiled code made by a compiler which is part of the interpreter system.

  • 解释器是一种计算机程序。
  • 解释器读取源代码或者中间码文件,转换成机器码并与计算机硬件交互。即逐行执行源码。
  • 解释器会将源代码转换成一种中间代码不会输出更低级的编译结果文件。输出执行结果。

网上有一张很形象的图

第三部分 解释型语言和编译型语言

两者的区别主要是源码编译时间的差异。相同点都要翻译成机器码后由计算机执行。

编译型语言

  • 编译语言的源码文件需要提前通过编译器编译成机器码文件(比如win中的exe可执行文件)。
  • 执行时,只需执行编译结果文件。不需要重复翻译。
  • 这类语言有:C、C++、Fortran、Pascal等。

解释型语言

  • 解释型语言在运行时进行翻译。比如VB语言,在执行的时候,解释器将语言翻译成机器码,然后执行。
  • 这类语言有:Ruby、Perl、JavaScript、PHP等。

混合型语言

但是随着计算机语言的发展,有些语言兼具两者的特点。

  • JAVA语言

JAVA编译过程只是将.java文件翻译成字节码(Byte Code)(.class文件)。字节码文件交由java虚拟机(JVM)解释运行。也就是说Java源码文件既要编译也要JVM虚拟机进行解释后运行。所以有种说法认为Java是半解释型语言(semi-interpreted” language)。

  • Python语言

python其实类似Java。例如一个python文件test.py ,解释器首先尝试读取该文件历史编译结果(pyc文件)即test.pyc文件或者test.pyo 。如果没有历史文件或者编译文件的日期较旧(即py文件可能有更新),解释器会重新编译生成字节码文件(pyc文件),然后Python虚拟机对字节码解释执行。

参考文献及资料

【1】 你知道「编译」与「解释」的区别吗?

本文标题:计算机语言中编译和解释的总结

文章作者:rong xiang

发布时间:2018年04月14日 - 16:04

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/59630edc/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%