【周分享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 cache(也就是缓存),省去开始的步骤,直接通过虚拟机执行;
  • 最终:对源代码,可以解释成当前平台CPU的指令集;
[4] 放在最后
  • 如果有错误,大家可以及时指出鸭,欢迎分享自己的意见。
  • 每周总结一些,可以互相交流,共同进步,嘻嘻嘻。
  • 如果大家有什么想一起分享的,可以评论区占楼鸭。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值