编译器和解释器(Compiler and Interpreter)
原文地址: 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)相关推荐
- Java 答疑:编译器和解释器有何区别?Java 语言属于编译型编程语言还是解释型编程语言?
文章目录 前言 一.Java 与 Java 字节码 二.什么是编译器(Compiler) 三.什么是解释器(Interpreter) 四.编译器与解释器有何区别? 五.Java 语言属于哪种语言? 总 ...
- V8 工作原理之编译器和解释器
V8 工作原理之编译器和解释器 要深入理解 V8 的工作原理,你需要搞清楚一些概念和原理,比如接下来我们要详细讲解的**编译器(Compiler).解释器(Interpreter).抽象语法树(AST ...
- 你知道 Compiler 与 Interpreter 的区别吗?
文章目录 编译器 解释器 分两个维度比较一下 表现-Behavior 性能-Performance 关于代码,需要知道的几个概念 高级语言代码-High-Level-Code 低级语言代码-Low-L ...
- java的编译器、解释器和JIT编译器(转载)
这篇我们来聊聊java的编译器和解释器.先看看官方的解释: Java Compiler (Java 编译器) Java compiler reads source files written in t ...
- 在编译器和解释器中V8是如何执行一段JavaScript代码的?
本篇文章主要是站在 JavaScript 引擎 V8 的视角,来分析 JavaScript 代码是如何被执行的. 前端工具和框架的自身更新速度非常块,而且还不断有新的出现.要想追赶上前端工具和框架的更 ...
- 什么是编译器?解释器又是什么?
什么是编译器 摘自 Wiki Compiler 一段 A compiler is a computer program (or a set of programs) that transforms s ...
- 学了编译原理能否用 Java 写一个编译器或解释器?
16 个回答 默认排序 RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...
- 解释器模式(Interpreter)
解释器模式(Interpreter) 解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. Context类是一个上下文环境类,Plus和Minus分别是用来 ...
- 北风设计模式课程---解释器模式(Interpreter Pattern)
北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...
最新文章
- ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?
- python学习 第七篇 sql优化
- Linux之终端命令格式的组成
- 五行塔怎么吃第五个_红毛丹怎么吃 吃红毛丹的五个好处
- Python并发编程—进程
- 计算机专业需要汇编语言,重点大学计算机专业系列教材·汇编语言程序设计
- CSS3中的动画效果记录
- jqGrid常用方法
- 为什么mysql启动不了了_Mysql为什么启动不了
- 线上展示3D可视化电子沙盘管理系统
- linux 下配置jdk环境变量
- 小程序中点击二维码图片预览、长按转发、保存、识别图中二维码
- 传教士与野人过河问题
- MySQL:连接错误
- Gitlab与Jenkins构建CICD环境
- mips-mti-gnu-linux,【歪门邪道】利用WSL搭建MIPS32构建环境
- Oracle AS opmnctl.exe 启动问题
- javax.el.PropertyNotFoundException——属性未找到
- 汽车电子环境基本阐述
- 巴西法律和税收报告以及其他法律要求》》》本质上是一种税务监控手段;
热门文章
- 非法关机 mysql_转 mysql数据库非法关机铁血教训
- “金三银四”春招指南!在线javascript
- 2021陕西高考单招成绩查询,2020陕西高考高职单招成绩一分一段表高考成绩排名...
- html 点击隐藏特效代码,vueJS简单的点击显示与隐藏的效果(实现代码)
- 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...
- 图像的频率谱和功率谱代表什么_功率谱估计:BT ,周期图,Bartlett ,AR ,MVDR,APES,MUSIC...
- 前端开发的壁垒在哪儿?
- 如何打开别人发布的vue项目---express的使用方法
- 服务器系统自带ftp,win10如何使用自带FTP服务器
- 系统辨识理论及应用_企业战略分析的理论工具