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

周分享】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 ***(也就是缓存),省去开始的步骤,直接通过虚拟机执行;
  • 最终:对源代码,可以解释成当前平台CPU的指令集;

    [4] 放在最后

  • 如果有错误,大家可以及时指出鸭,欢迎分享自己的意见。
  • 每周总结一些,可以互相交流,共同进步,嘻嘻嘻。
  • 如果大家有什么想一起分享的,可以评论区占楼鸭。

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

#PHP##C/C++##Go#
全部评论
点赞 回复 分享
发布于 2019-11-04 00:45

相关推荐

咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务