原文地址: juejin.im/post/5cea0c…

在计算机的世界中,一个Programmer多多少少有听说过编辑器,解释器,机器码,字节码这些名词, 现在我们稍微深入问一问:

  • 这些名词分别表示的是什么?
  • 编辑器和解释器是如何运行?
  • 它们之间又有什么联系呢?

本文的目的就是为了理清这些问题.

目录

  • Type of code(代码的类型)
  • Level of Programming Language(编程语言的层级)
  • Compiler(编译器)
    • 编译器的工作流程
  • Interpreter(解释器)
  • 参考

Type of code(代码的类型)

计算机的代码根据封装程度的高低可以分为以下几类(从低到高):

  • Microcode(微码): 微码是一种直接控制CPU的代码, 通过将机器指令与相关的电路实现分离, 使得机器指令可以更自由的进行设计与修改,而不用考虑到实际的电路架构.(传统架构CPU的操作直接写死在电路板上,需要物理改动才能修改).

    • 也被称为firmware(固件).
    • 通常存放在ROM上,不开放修改.
    • 仅适用于其设计的特定硬件.
    • 处于软件层面的最底层.
  • Machine code(机器码): 可以由CPU直接执行的代码.
    • 在CISC架构的电脑上会被转化为机器码来执行.
    • 在RISC架构的电脑上直接执行.
  • Bytecode(字节码): 通常指的是已经经过编译,需要解释器翻译后才能成为机器码的中间代码. 如Java字节码.
    • 是为了解释器的高效执行而设计.
    • 可跨平台.

Level of Programming Language(编程语言的层级)

编程语言根据对机器语言的抽象(封装)程度可以分为两类:

  • Low-level programming language(低级编程语言): 不提供或jin仅提供很少的封装,接近机器语言.

    • 一般指Machine language(机器语言)和Assembly language(汇编语言).
    • 代码通常只能在特定平台上执行.
    • 执行效率高.
    • 可阅读性差.
    • 开发效率低.
  • High-level programming language(高级编程语言): 高度封装了机器语言, 需要编译器或解释器转化成机器码才能执行. 如: C,C++,Java,Python等.
    • 执行效率较低.
    • 可读性好.
    • 开发效率高.

汇编语言的代码需要由汇编器(assembler)将代码转为机器码才能执行,也可以认为是高级语言.

如下图:

图片来自: Quora: What are the different types of programming languages?

用高级语言编写的程序要么由某种解释器直接执行,要么由编译器(以及汇编程序和链接程序)转换成机器代码, 然后由CPU执行.

下面来介绍编译器和解释器.

Compiler(编译器)

编译器是一个将一种编程语言的代码翻译(translate)为另外一种编程语言的代码的计算机程序. 通常指将高级语言的代码翻译为低级语言的代码.

主要目的是将便于人编写,阅读,维护的高级语言的代码翻译为计算机能解读,运行的机器码.

编译器还有以下几类:

  • cross-compiler(交叉编译器): 翻译输出的代码可以运行于不同的平台(不同的CPU或操作系统).
  • bootstrap compiler: 由要编译的输入语言编写的编译器,它初始核心版本由其他语言生成(一般是汇编语言).
  • decompiler(逆编译程序): 将低级语言的代码翻译为高级语言的代码.
  • source-to-source compiler(源码到源码编辑器): 将一种高级语言代码翻译成另外一种高级语言的代码.

编译器的工作流程

一个编译器的工作流程一般会包括以下几个步骤(顺序执行):

  • preprocessing
  • lexical analysis
  • parsing
  • semantic analysis (syntax-directed translation)
  • conversion of input programs to an intermediate representation
  • code optimization
  • code generation

如下图:

图片来自: The Thing from another World

Interpreter(解释器)

解释器是一种直接执行高级语言代码的计算机程序, 而无需将代码编译成机器码.

  • 优点: 消除了编译整个程序的负担,程序可以拆分成多个部分来模块化.
  • 缺点: 解释器像是一位“中间人”,每次运行程序时都要先将代码转成另一种语言的代码,然后再作运行,因此解释器的程序运行速度比较缓慢.

解释器执行代码的策略一般有以下三种:

  • 直接运行高级编程语言的代码(如Shell内置的解释器).
  • 先将代码转换成高效的中间码(如:Bytecode),然后马上执行(不输出中间码).
  • 由解释器中内置的编译器先将高级语言的代码编译成中间码,然后再执行.(输出中间码,相当于两个阶段,如Java的执行)

与编译器的执行方式的对比如下图:

图片来自: Compiler vs Interpreter: Complete Difference Between Compiler and Interpreter

参考

  • Compiler
  • Interpreter

转载于:https://juejin.im/post/5cea0c4be51d45775a70027f

编译器和解释器(Compiler and Interpreter)相关推荐

  1. Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?

    文章目录 前言 一.Java 与 Java 字节码 二.什么是编译器(Compiler) 三.什么是解释器(Interpreter) 四.编译器与解释器有何区别? 五.Java 语言属于哪种语言? 总 ...

  2. V8 工作原理之编译器和解释器

    V8 工作原理之编译器和解释器 要深入理解 V8 的工作原理,你需要搞清楚一些概念和原理,比如接下来我们要详细讲解的**编译器(Compiler).解释器(Interpreter).抽象语法树(AST ...

  3. 你知道 Compiler 与 Interpreter 的区别吗?

    文章目录 编译器 解释器 分两个维度比较一下 表现-Behavior 性能-Performance 关于代码,需要知道的几个概念 高级语言代码-High-Level-Code 低级语言代码-Low-L ...

  4. java的编译器、解释器和JIT编译器(转载)

    这篇我们来聊聊java的编译器和解释器.先看看官方的解释: Java Compiler (Java 编译器) Java compiler reads source files written in t ...

  5. 在编译器和解释器中V8是如何执行一段JavaScript代码的?

    本篇文章主要是站在 JavaScript 引擎 V8 的视角,来分析 JavaScript 代码是如何被执行的. 前端工具和框架的自身更新速度非常块,而且还不断有新的出现.要想追赶上前端工具和框架的更 ...

  6. 什么是编译器?解释器又是什么?

    什么是编译器 摘自 Wiki Compiler 一段 A compiler is a computer program (or a set of programs) that transforms s ...

  7. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  8. 解释器模式(Interpreter)

    解释器模式(Interpreter) 解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. Context类是一个上下文环境类,Plus和Minus分别是用来 ...

  9. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

最新文章

  1. ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?
  2. python学习 第七篇 sql优化
  3. Linux之终端命令格式的组成
  4. 五行塔怎么吃第五个_红毛丹怎么吃 吃红毛丹的五个好处
  5. Python并发编程—进程
  6. 计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计
  7. CSS3中的动画效果记录
  8. jqGrid常用方法
  9. 为什么mysql启动不了了_Mysql为什么启动不了
  10. 线上展示3D可视化电子沙盘管理系统
  11. linux 下配置jdk环境变量
  12. 小程序中点击二维码图片预览、长按转发、保存、识别图中二维码
  13. 传教士与野人过河问题
  14. MySQL:连接错误
  15. Gitlab与Jenkins构建CICD环境
  16. mips-mti-gnu-linux,【歪门邪道】利用WSL搭建MIPS32构建环境
  17. Oracle AS opmnctl.exe 启动问题
  18. javax.el.PropertyNotFoundException——属性未找到
  19. 汽车电子环境基本阐述
  20. 巴西法律和税收报告以及其他法律要求》》》本质上是一种税务监控手段;

热门文章

  1. 非法关机 mysql_转 mysql数据库非法关机铁血教训
  2. “金三银四”春招指南!在线javascript
  3. 2021陕西高考单招成绩查询,2020陕西高考高职单招成绩一分一段表高考成绩排名...
  4. html 点击隐藏特效代码,vueJS简单的点击显示与隐藏的效果(实现代码)
  5. 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...
  6. 图像的频率谱和功率谱代表什么_功率谱估计:BT ,周期图,Bartlett ,AR ,MVDR,APES,MUSIC...
  7. 前端开发的壁垒在哪儿?
  8. 如何打开别人发布的vue项目---express的使用方法
  9. 服务器系统自带ftp,win10如何使用自带FTP服务器
  10. 系统辨识理论及应用_企业战略分析的理论工具