什么是解释器与编译器

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. Java 合并、拆分PPT幻灯片

    序 在日常使用PPT时,为了便于操作和管理文档,时常会遇到需要将PPT幻灯片进行合并或拆分的情况.本文将通过Java程序来演示如何进行上述操作. 示例要点: 1. 合并PPT幻灯片 1.1 将第一个P ...

  2. Jmeter测试工具

    jmeter的简单应用 目录 jmeter的简单应用 1.Jmeter 的基本概念 2.我们 为什么 使用 Jmeter 3.Jmeter的作用 4.Jmeter怎么用 5.安装JAVA环境 6.Jm ...

  3. elasticsearch 索引清理脚本及常用命令

    elastic索引日志清理不及时,很容易产生磁盘紧张,官网给出curl -k -XDELETE可以清理不需要的索引日志. 清理脚本 #!/bin/bash #Author: 648403020@qq. ...

  4. 使用swagger遇到的问题

    1.定义全局的请求参数时, defaultValue不能是中文,不然一直是请求中 ParameterBuilder userName = new ParameterBuilder(); Paramet ...

  5. 【知识分享】Navicat Premium for Mac的破解教程

    转自Navicat Premium for Mac v12.0.22.0 破解教程,macOS上手动破解,无需补丁,无毒下载了Navicat,没有注册码,突然发现了这篇破解教程,竟爱不释手,顾Copy ...

  6. 相同宿主机下的dcoker之间通信

    相同宿主机下的dcoker之间通信 docker docker的本质是进程,隔离的资源包括:网卡.回环设备.路由表和 iptables 规则,这些要素构成了一个进程(docker)发起和响应网络请求的 ...

  7. python爬取酷狗音乐

    url:https://www.kugou.com/yy/html/rank.html 我们随便访问一个歌曲可以看到url有个hash https://www.kugou.com/song/#hash ...

  8. JVM的整体结构

    整个jvm的运行流程图如上所示,首先需要进行加载class文件,然后使用类加载子系统将class翻译解析导入内存,在内存中分别导入到对应的运行时数据区,然后执行引擎开始执行,对于需要的数据在对应的区域 ...

  9. Java Web学习(四)http协议

    文章更新时间:2020/07/24 一.概念 定义 HTTP:超文本传输协议,是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. HTTP协议:用于定义客户端与 ...

  10. Ubuntu中发生git Connection refused

    今天在提交代码的时候: ssh: connect to host github.com port 22: Connection refused fatal: 无法读取远程仓库. 请确认您有正确的访问权 ...