什么是解释器与编译器

1、解释器

解释器是一种计算机程序,它将每个高级程序语句转换成机器代码。

2、编译器

把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1)。

3、机器语言

一个机器语言程序是由一系列二进制模式组成的(例 110110) 它表示应该由计算机执行的简单操作。机器语言程序是可执行的,所以它们可以直接运行

两者都是将高级语言转换成机器码,解释器在程序运行时将代码转换成机器码,编译器在程序运行之前将代码转换成机器码

两者的区别

  Interpreter(解释器) compare(编译器)
程序步骤 1、创建代码
2、没有文件链接或机器代码生成
3、源语句在执行过程中逐行执行
1、创建代码
2、Compile将解析或分析所有语言语句的正确性。如果不正确,则抛出错误
3、如果没有错误,编译器将把源代码转换为机器码
4、它将不同的代码文件链接到一个可运行的程序(称为exe)
5、运行程序
Input(输入) 每次读取一行 整个程序
Output(输出) 不产生任何的中间代码 生成中间目标代码
工作机制 编译和执行同时进行 编译在执行之前完成
存储 不保存任何机器代码 存储编译后的机器代码在机器上
执行 程序执行是解释过程的一部分,因此是逐行执行的 程序执行与编译是分开的,它只在整个输出程序编译后执行
生成程序 不生成输出程序,所以他们在每次执行过程中都要评估源程序 生成可以独立于原始程序运行的输出程序(以exe的形式)
修改 直接修改就可运行 如果需要修改代码,则需要修改源代码,重新编译
运行速度
内存 它需要较少的内存,因为它不创建中间对象代码 内存需求更多的是由于目标代码的创建
错误 解释器读取一条语句并显示错误(如果有的话)。你必须纠正错误才能解释下一行 编译器在编译时显示所有错误和警告。因此,不修正错误就不能运行程序
错误监测 容易
编程语言 PHP, Perl, Python, Ruby C, C++, C#, Scala,  Java
 
 

编译器

1、编译器读取源代码,输出可执行代码
2、将用高级语言编写的软件翻译成计算机可以理解的指令,它把程序员写的文本转换成CPU能理解的格式
3、编译的过程比较复杂,它花了很多时间分析和处理程序
4、可执行结果是某种形式的特定于机器的二进制代码
5、编译器是一种程序,它读取用高级语言编写的程序,并将其转换为机器语言或低级语言,并报告程序中出现的错误
 
编译器的类型:前端编译器、后端编译器
 
1)编译器的分析阶段也称为前端,它将程序划分为基本的组成部分,检查代码的语法、语义和语法,然后生成中间代码。分析阶段包括词法分析、语义分析和语法分析。

2)编译器的合成阶段也称为后端,优化中间代码,生成目标代码。合成阶段包括代码优化器和代码生成器。
 

解释器

1:解释器在运行时逐行转换源代码
2、解释完全将一个用高级语言编写的程序翻译成机器级语言
3、解释器允许在程序执行时求值和修改程序
4、用于分析和处理程序的时间相对较少
5、与编译器相比,程序执行相对缓慢
 
 
注: 
Java既是编译的又是解释的,Java代码本身被编译成目标代码。在运行时,JVM将目标代码解释为目标计算机的机器代码。

主要区别

让我们看看编译器和解释器之间的主要区别
1、编译器将一个程序作为一个整体进行翻译,而解释器则一条一条地翻译一个程序
2、在编译器的情况下生成中间代码或目标代码。而解释器不创建中间代码
3、编译器比解释器要快得多,因为编译器一次完成整个程序,而解释器则是依次编译每一行代码
4、由于要生成目标代码,编译器比解释器需要更多的内存
5、编译器同时显示所有错误,很难检测错误,而解释器则逐个显示每条语句的错误,更容易检测错误
6、在编译器中,当程序中出现错误时,它会停止翻译,并在删除错误后重新翻译整个程序。相反,当解释器中发生错误时,它会阻止其翻译,在删除错误后,翻译将继续
7、在编译器中,这个过程需要两个步骤,首先将源代码翻译成目标程序,然后执行。而在解释器中,这是一个一次性的过程,源代码在编译和执行的同时
8、编译器用于编程语言,如C、c++、c#、Scala等。另一个解释器用于PHP、Ruby、Python等语言。
 
 

总结

编译器和解释器的目的是做相同的工作,但在操作过程上不同,编译器以聚合的方式获取源代码,而解释器获取源代码的组成部分,即一条一条的语句。
 

相关链接

解释器( interpreter ) 与 编译器( compiler ) 的对比的更多相关文章

  1. python 设计模式之解释器(Interpreter)模式

    #写在前面 关于解释器模式,我在网上转了两三圈,心中有了那么一点概念 ,也不知道自己理解的是对还是错. 其实关于每一种设计模式,我总想找出一个答案,那就是为什么要用这种设计模式, 如果不用会怎么样,会 ...

  2. Java虚拟机解释器与JIT编译器

    一.JAVA编译相关概念 1.动态编译(dynamic compilation)指的是“在运行时进行编译”:与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫 ...

  3. 解释器与JIT编译器

    解释器 JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法. 解释器真正 ...

  4. [设计模式]解释器(Interpreter)之大胆向MM示爱吧

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 “我刚写了个小程序,需要你来参与下.”我把MM叫到我的电脑旁,“来把下面这条命令打进去,这是个练习打(Pian)符(ni)号(de)的 ...

  5. 计算机语言学习导论[C/C++]

    作者:@幻の上帝 1 前置条件语文其实挺重要,这个没问题,但容易被忽视.当然,如果不是经常要折腾文档,要求不高:但起码要能说清楚话.数学重要,主要是广度,作为快速学习相关领域知识的基础.深度上面可深可 ...

  6. Knowledge Point 20180303 对比编译器、解释器与Javac编译原理

    编译器与Javac编译原理 在前文我们知道了Java是一种编译语言和解释语言,它的源代码经过编译器Javac编译为能够被JVM识别的二进制语言,然后JVM将其解释为能够被平台识别的机器语言.那么什么是 ...

  7. **解释器全局锁(Global Interpreter Lock)

    解释器全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程. [解决办法就是多进程和协程(协程 ...

  8. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  9. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用

    catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...

随机推荐

  1. [计算机网络]图解HTTP阅读笔记

    总述 书的定位:一本十分浅显的HTTP书籍,主要介绍了HTTP与HTTPS.适合入门了解,很多地方都是蜻蜓点水,但稍微深入的地方能让人了解重点在哪,后面应该有针对性地阅读深入书籍. 主要内容:介绍了T ...

  2. three.js学习3_相机相关

    Three.Camera Camera是所有相机的抽象基类, 在构建新摄像机时,应始终继承此类. 常见的相机有两种类型: PerspectiveCamera(透视摄像机)或者 Orthographic ...

  3. Axios源码深度剖析

    Axios源码深度剖析 - XHR篇 axios 是一个基于 Promise 的http请求库,可以用在浏览器和node.js中,目前在github上有 42K 的star数 分析axios - 目录 ...

  4. spring 之BeanPostProcessor&BeanFactoryPostProcessor

    http://www.cnblogs.com/sishang/p/6576665.html https://www.cnblogs.com/sishang/p/6588542.html

  5. centos7 yum安装redis及常用命令

    redis是什么 Redis是一种基于内存的数据结构存储,可持久化的日志型.Key-Value数据库.使用关系型数据库的站点达到一定并发量的时候,往往在磁盘IO上会有瓶颈,这时候配合redis就有一定 ...

  6. hw小技巧(转载)

    小弟也第一次参加hw,经过5天hw,确实也学到了许多的东西,但就本次分享而言,我分享一些我认为在hw里面值得注意的东西以及一些小技巧 0x01 信息收集 信息收集这个多西当然都是老生常谈了,你收集的东 ...

  7. CVE-2020-0796(Windows SMBv3) RCE漏洞复现

    CVE-2020-0796 攻击机:win10:192.168.205.1 靶机win10:192.168.205.132 关闭defender防火墙 0x01 影响版本 Windows 10 190 ...

  8. ERP与EHR系统的恩怨纠葛--开源软件诞生13

    ERP中需要EHR的存在吗--第13篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon ...

  9. Java Web学习(十一)Java过滤器

    一.引言 上一篇文章学习了java三大器的拦截器,拦截器主要是针对于action请求进行拦截处理的,那么对于requst的一些信息如果在调用前,想先进行过滤和处理,那么就要使用到第二个神器,也就是本文 ...

  10. pandas读取MySql/SqlServer数据

    用过的东西总是会忘记,尤其是细节,还是记下来比较靠谱. 读取MySql数据 1 import MySQLdb 2 import pandas as pd 3 4 conn = MySQLdb.conn ...