【周分享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

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
完美的潜伏者许愿简历...:隐藏信息被你提取出来了,暗示,这就是暗示
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务