什么是解释器与编译器

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. Tomcat 第一篇:源码导入 IDEA 编辑器

    1 引言 做 Java 的同学应该都见过上面这只名字叫 Tomcat 的猫,毕竟这只猫在过去和现在都是全球最流行的 Web 容器之一. 很有意思的一件事儿是从我接触这只猫开始,从来不知道它的中文名字是 ...

  2. TDengine常见问题解答(FAQ)

    1. TDengine2.0之前的版本升级到2.0及以上的版本应该注意什么?☆☆☆ 2.0版本在之前版本的基础上,进行了完全的重构,配置文件和数据文件是不兼容的.在升级之前务必进行如下操作: 删除配置 ...

  3. ECMAScript6入门学习--第一天

    ECMAScript与javascript的关系 ECMA是是一个国际标准化的一个组织,规定了浏览器脚本的语言标准,在上个实际,javascript公司Netscape把javascript托付给EC ...

  4. 【Nginx】冰河又一本超硬核Nginx PDF教程免费开源!!

    写在前面 在 [冰河技术] 微信公众号中的[Nginx]专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了, 但就是 ...

  5. vue大型项目高性能优化----想说爱你真的不容易

    一.背景   目前公司的电子合同采用表单设计器+合同业务配合实现,做了半年多后终于上线,但是下边员工普遍反映卡顿,甚至卡死,爆栈.尤其是新增和修改合同页面,因为这部分数据量大,逻辑复杂,很容易崩溃,所 ...

  6. redis.conf讲解

    转自https://www.cnblogs.com/zhang-ke/p/5981108.html #redis.conf # Redis configuration file example. # ...

  7. appcan 文件下载与预览

    用appcan开发的app如何在手机上查看附件和预览附件呢?今天就为大家介绍一下,用APP看附件实大是太方便了. 1.直接上代码吧,首先要初始化插件用到的所有方法.这个方法中 cbIsFileExis ...

  8. 简单聊聊 Ironic

    上一篇文章里我简单介绍了一下「裸金属」的概念,提到了 OpenStack 中的核心项目 Ironic,今天简单来聊聊它. Ironic 项目的吉祥物 Bare Metal 所以用 Bear 来做吉祥物 ...

  9. 程序员的开源月刊:HelloGitHub(第 54 期)

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  10. Kafka处理请求的全流程分析

    大家好,我是 yes. 这是我的第三篇Kafka源码分析文章,前两篇讲了日志段的读写和二分算法在kafka索引上的应用 今天来讲讲 Kafka Broker端处理请求的全流程,剖析下底层的网络通信是如 ...