【周分享02】-【编译型语言和解释型语言的执行原理】

【python教程入门学习】编译型语言和解释型语言的区别 我们编写的源代码是人类语言,我们自己能够轻松理解;但是对于计算机硬件(CPU),源代码就是天书,根本无法执行,计算机只能识别某些特定的二进制指令,在程序真正运行之前必须将源代码转换成二进制指令。 所谓的二进制指令,也就是机器码,是 CPU 能够识别的硬件层面的“代码”,简陋的硬件(比如古老的单片机)只能使用几十个指令,强大的硬件(PC 和智能手机)能使用成百上千个指令。 然而,究竟在什么时候将源代码转换成二进制指令呢?不同的编程语言有不同的规定: 有的编程语言要求必须提前将所有源代码一次性转换成二进制指令 阅读详情

【周分享】2019-11-03 第9周:周日

每周做一些小的分享,加油!!!
作者:阿涛

【编译型语言和解释型语言的执行原理】

[1] 大致区别
  • 编译型:
    • 例子:C 、 C++ 、Go
    • 编译:程序的源代码首先翻译成汇编语言,再用编译器完成编译工作成为目标文件;
    • 通俗:把做好的源程序全部编译成二进制代码的可运行程序,可直接运行这个程序。
    • 执行速度快、效率高;依靠编译器、跨平台性差些。
  • 解释型:
    • 例子:PHP、Python
    • 解释:程序运行的时候通过解释器来完成翻译工作,成为机器语言;
    • 通俗:把做好的源程序翻译一句,然后执行一句,直至结束,每次可能都要进行解释。
    • 执行速度慢、效率低;依靠解释器、跨平台性好。
  • 所以一般来说解释型语言的性能效率相对来说会比编译型差一点点;
[2] 编译型语言的执行大致流程
  • 我们学习C语言的时候,都知道,需要经过预编译,编译,汇编,链接到最后的可执行文件。(大一的概念哈哈哈,我实际上才回忆起来)
  • 基本流程如下:
  • 第一步:预处理器;
    • c语言一开始.c结尾的文件,需要对代码中的宏,依赖进行处理,处理成源程序
  • 第二步:编译器;
    • 编译器会对源程序的每一行代码进行处理为汇编语言,同时优化程序
  • 第三步:汇编器;
    • 编译语言再经过汇编器,处理成目标程序,也就是以.o结尾的文件
  • 第四步:链接器;
    • 需要对程序中的函数或者库,通过连接器进行连接,从而成为机器代码 (可执行程序);
  • 最终:对源代码,编译成为当前平台CPU的指令集
[3] 解释型语言的大致流程
  • PHP7中,对源代码首先进行词法分析,语法分析,转化为抽象语法树AST,生成opcodes,然后解释为机器指令。
  • 基本流程如下:
  • 第一步:词法分析;
    • 将源代码分割为多个字符串单元,然后分割后的字符串为Token;
  • 第二步:语法分析;
    • 由于独立多个Token没有完整的语义,因此进行分析,然后转化成抽象语法树AST,(注意这里的词法和语法分析根据情况是可以一起执行的,提高效率)
  • 第三步:opcodes;
    • opcodes是中间代码,类似java的字节码。
    • 这一步也是与编译型最大区别的,编译型会通过编译器来生成,而解释型则是由解释器来完成指令集的转化。
    • 然后虚拟机来执行opcodes。
    • 注意:可以开启opcodes cache(也就是缓存),省去开始的步骤,直接通过虚拟机执行;
  • 最终:对源代码,可以解释成当前平台CPU的指令集;
[4] 放在最后
  • 如果有错误,大家可以及时指出鸭,欢迎分享自己的意见。
  • 每周总结一些,可以互相交流,共同进步,嘻嘻嘻。
  • 如果大家有什么想一起分享的,可以评论区占楼鸭。

参考:《PHP7底层设计与源码实现》滴滴多位大佬编著:第二章(初始PHP7源码整体框架)

编程语言实现:解释与编译的对比分析 本章深入探讨了编程语言的实现方式,特别是解释型语言和编译型语言的区别。解释型语言依赖于垃圾收集器来管理内存,而编译型语言则在编译时完成大部分工作,执行速度更快。同时,虚拟机的概念被提出,它为程序提供跨平台的可移植性和性能优化。类型检查在编程语言中的重要性也被强调,包括静态类型和动态类型的区别以及它们对开发过程的影响。 阅读详情

相关推荐

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理

多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光...

weixin_28963467的博客 2352

计算机组成原理(三):编译型语言与解释型语言

一、五级层次结构 说明: 1.下层是上层的基础,上层是下层的扩展 2.汇编语言指令和机器语言指令一一对应(先把高级无言翻译成汇编语言) 3.高级语言可以是C/C++、Java;汇编程序可以当作一种助记符;机器语言是一串二进制代码 二、编译型语言与解释型语言的区别 2.1 编译型语言 定义:将高级语言编写的源程序全部语句一次全部翻译成机器语言程序,而后再执行机器语言程序(只需翻译一次)。典型的就是它们可以编译后生成.exe文件,之后无需再次编译,直接运行.exe文件即可...

xuanyao66666的博客 931

模拟电子技术课设-压控信号发生器

正弦波产生电路的目的就是使电路产生一定频率和幅度的正弦波,我们一般在放大电路中引入正反馈,并创造条件,使其产生稳定可靠的振荡。由于图2.3-1所示电路中存在RC电路和积分电路两个延迟环节,在实用电路中,将它们“合二为一”,即去掉方波发生电路中的RC回路,使积分运算电路即作为延迟环节,又作为方变三角波电路,滯回比较器和积分运算电路的输出互为另一个电路的输入。接着对各单元电路的工作原理进行了分析,由直流稳压电源电路提供所需电压,文氏振荡器产生正弦波,滞回比较器产生方波,滞回比较器与积分器连接产生三角波。

Sulfurone的博客 5325

编译型语言与解释型语言

编译型语言与解释型语言 首先要说明,编译型语言与解释型语言这种分类方法是不科学的,或者说已经过时了,但是这种称呼大抵还是能够让人明白我们将要讨论的是什么东西。 文中所列参考是笔者认为比较有帮助的一些扩展阅读内容。 首先贴一个很形象的比喻,来自知乎@孛尔只斤南丁: 假设厂里来了两个新工人,一个叫编译,另一个叫解释。厂长(程序员)给他们安排了一项任务(需求),并发放了操作说明(源代码)。 编译这名工人的做法是先完整的看一遍操作说明,遇到错别字或者不明白的地方,就去问厂长,直到操作说明最终成为一个没有错别字

weixin_44966641的博客 1859

OpenClaw(小龙虾) 安装部署教程

OpenClaw(原名Clawdbot)是一个开源的、可本地部署的个人AI助理,它能接入飞书、钉钉等即时通讯工具,帮你处理邮件、管理文件,甚至控制电脑。

qq_40668700的博客 1384

二、基于C语言的JPEG解码代码详解

// JPEG解码 // 输入JPEG后输出Bitmap #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) unsigned int BuffIndex; // JPEG数据的位置 unsigned int BuffSize; // JPEG数据的大小 unsigned int BuffX; // 图像的横向尺寸 unsigned int BuffY; //

m0_37633745的博客 4456

python语言是编译型语言-Python程序的执行过程原理(解释型语言和编译型语言)...

Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的.pyc文件的是什么呢?c应该是compiled的缩写才对啊!为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清一下这个问题,并且把一些基础概念给理一理。解释型语言和编译型语言计算机...

weixin_37988176的博客 213

扫地机的CPU只要二十多块?2024第二拆来了

昨天还说到这个机器人的故障,经小鱼拆机后测试和后台网友留言确认,不是防跌落问题,是轮子故障,这个轮子不会动,轮子上有一个限位开关检测机器人是否离开地面的,测试的时候也没有误触发,所以电机存在故障,后面拆电机的时候再检查。最后再留下一个疑问,这个机器人的回充没有用红外管,机器人是如何识别基站进行返回充电的(因为只买了本体,没买充电桩,不确定充电桩的形状,是不是利用点云识别不确定)懂的请留言。全志的R16,封装是 BGA282,那这个板子至少是4层板,小鱼盲猜 6 层板,知道的小伙伴欢迎留言。

生活不止眼前的苟且 1981

编译器与解释器的区别和工作原理

这篇教程,我们一起来了解编译器和解释器的工作原理,这对我们提升能力很重要。 我一直认为概念或理论知识是非常重要的,让我们能够将很多模糊的认知关联起来,变得更加清楚,从而打开视野,上升到新的层次。 但是,一般来说,在刚刚入门的时候,接触一些概念性、理论性的内容,不但非常枯燥,而且难以理解。 而在一定时间的学习接触之后,再来看这些东西,则会变得更加容易领悟,理解的更透彻。 这篇教程会包含很多专业术语,我会对其中一些专业术语进行解释,对于一些未做解释的专业术语,建议大家通过搜索引擎进行理解。 首先,从P

Le_Sam的博客 1045

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 633

x86架构学习之中断

外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。

qq_26962739的博客 1572

解释型语言和编译型语言

解释型语言和编译型语言

qq_51626500的博客 742

android osmdroid 加载常用离线地图格式(开源的在线地图)

osmdroid是(几乎)完整/免费更换为Android MapView(v1 API)类。它还包括一个模块化的瓷砖供应商系统支持众多的在线和离线瓷砖来源和覆盖支持内置覆盖绘制图标,跟踪位置和形状。如果想在你项目中使用osmdroid,绝对是灵活度最高,不用申请百度,高德等的key。还有一堆规则要遵循。osmdroid可以支持多图层叠加,绘制自已的图层。离线加载常用地图格式zip,sqlite,.

mmsx990的博客 1万+

【python教程入门学习】python零基础入门编译型语言和解释型语言的区别

我们编写的源代码是人类语言,我们自己能够轻松理解;但是对于计算机硬件(CPU),源代码就是天书,根本无法执行,计算机只能识别某些特定的二进制指令,在程序真正运行之前必须将源代码转换成二进制指令。 所谓的二进制指令,也就是机器码,是 CPU 能够识别的硬件层面的“代码”,简陋的硬件(比如古老的单片机)只能使用几十个指令,强大的硬件(PC 和智能手机)能使用成百上千个指令。 然而,究竟在什么时候将源代码转换成二进制指令呢?不同的编程语言有不同的规定: 有的编程语言要求必须提前将所有源代码一次性转换成二进制指令

oooorrr的博客 148

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

解释型语言与编译型语言的区别与特点 | 深入了解两者的优势和应用领域

总体来说,解释型语言更适合快速开发和灵活的应用场景,而编译型语言则更适用于性能要求较高的系统和软件开发。选择何种编程语言,应根据项目的实际需求来决定。理解两者的优缺点,有助于开发者做出最佳的技术决策。

hyiciw_642的博客 400

解释型语言和编译型语言的区别_「CSAPP」 - 编译型语言

一、编程语言分类(编译 & 解释)程序设计语言现今主要是如下分类,编译型和解释型。分别的代表有Interpreted(Python、Ruby、PHP、JAVA) and Compiled(C、C++、Objective-C、Swift)。没有最好的语言,只有最适合的语言。运行效率、开发效率根据具体需求选择即可。C、C++、Objective-C、Swift都属于编译型语言,通过编译器直接将...

weixin_39955825的博客 210

python采用解释方式执行_Python解释执行原理

谈到了Python语句的两种执行方式,实际上,这两种运行方式在本质 上是相同的,它们都是由解释器来解释执行我们提供的Python语句。 这里所说的解释执行是相对于编译执行而言的。我们知道,使用诸如 C或C++之类的编译性语言编写的程序可以从源文件转换成计算机使用 的机器语言, 经连接器连接后形成二进制可执行文件。当我们运行二进制可执行程 序的时候,因为已经编译好了,所以加载器软件把二进制程序从硬盘...

weixin_31001069的博客 3391

Python代码是编译执行还是解释执行?_java解释python编译

我们安装Python 时候,会有一个 Python.exe 文件,它就是 Python 解释器,你写的每一行 Python 代码都是由它负责执行,解释器由一个编译器和一个虚拟机构成,编译器负责将源代码转换成字节码文件,而虚拟机负责执行字节码,所以,解释型语言其实也有编译过程,只不过这个编译过程并不是直接生成目标代码,而是中间代码(字节码),然后再通过虚拟机来逐行解释执行字节码。基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。最近我才对这些路线做了一下新的更新,知识体系更全面了。

2401_84558388的博客 577

编程语言怎么选?编译型与解释型语言的区别与应用场景解析

编程语言主要被划分成编译型与解释型这两种类型 ,编译型语言像C++或者Go ,于运行之前要把整个源代码轉化成机器码 ,其执行效率一般来讲是很高的 ,适用于开发操作系统 、游戏引擎这类对性能要求极为严苛的系统。解释型语言诸如Python或者JavaScript ,由解释器逐行去读取并且执行 ,开发调试具备灵活快速的特点 ,被广泛运用在Web开发 、数据分析以及脚本自动化这些领域。近些年,JIT(即时编译)技术,把这条界限弄模糊了,诸如Java和C#这般的语言,于虚拟机里边运行,兼有着两者的优势。

2601_95061701的博客 323

eclipse中加装python解释器_技术分享|Python解释执行原理及过程

谈到了Python语句的两种执行方式,实际上,这两种运行方式在本质上是相同的,它们都是由解释器来解释执行我们提供的Python语句。这里所说的解释执行是相对于编译执行而言的。我们知道,使用诸如C或C++之类的编译性语言编写的程序可以从源文件转换成计算机使用的机器语言,经连接器连接后形成二进制可执行文件。当我们运行二进制可执行程序的时候,因为已经编译好了,所以加载器软件把二进制程序从硬...

weixin_39595164的博客 163

python是解释型_python解释性

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!为了得到一个可以正常返回的 url ,需要修改示例中的 secretid 和 secretkey 为真实的密钥,并使用系统当前时间戳作为 timestamp 。 为了更清楚的解释签名过程,下面以 python 语言为例,将上述的签名过程具体实现。 请求的域名、调用的接口和参数的取值都...

weixin_39959615的博客 1346

python和c语言哪个有用

各位读者,小编来为大家解答,python和c语言哪个有发展前途 python语言和c语言哪个厉害,现在让我们一起来看看吧!大家好,给大家分享一下python和c++学哪个简单,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

ab524100的博客 1194

JavaScript代码是如何被执行上下文的

基本概念 编译器,解释器 抽象语法树 字节码和机器码 编译器和解释器 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。根据语言的执行流程,可以把语言分成编译型语言和解释型语言。 编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、go等. 解释型语言: 程序不需要编译,程序在运行时才翻译成机器

webxh6的博客 972

2024年最新(Java)编译型解释性语言,java注解原理面试题

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。本文已被。

2401_84002482的博客 366
上一篇: (leetcode)[数组] titleID169 【求众数】
下一篇: 【周分享01】-【对新技术的学习大致流程方法】
Tacks
博客等级 码龄9年 37粉丝 97原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值