当前位置:我的异常网» PHP » facebook hiphop php vm 兑现概述(二)

facebook hiphop php vm 兑现概述(二)

www.myexceptions.net  网友分享于:2013-09-06  浏览:10次

facebook hiphop php vm 实现概述(二)

从上文可知,核心的runtime环境的代码在 src/runtme/eval,本文主要简单概述此处的代码实现,下面的叙述按文件夹分类。

一、runtime:运行时的核心数据结构(符号表)

1、assoc_list.cpp       变量关联表

2、code_coverage.cpp    代码覆盖率工具

3、file_repository.cpp  php文件的jit缓存

4、variable_environment.cpp 维护各个函数、变量等所属的环境(如所属的类、作用范围等)

5、variant_stack.cpp    变量栈结构(可以用于记录函数调用关系)

6、eval_state.cpp       最重要的runtime信息都收集在这里面,比如当前有哪objects、每个object有哪些method、全局函数、常量……

7、eval_object_data.h   记录一个class的信息

8、eval_frame_injection.h 函数调用中的一个栈帧

二、ext

此目录封装了往runtime中添加外部函数的方法,

三、parser

解析器,利用YACC实现的parser(EBNF语法文件是hphp.y, hphp.tab.cpp是工具生成的),此parser与compiler目录中的不同,此处主要是为语义解析服务的(可以理解TreeWalker)。对于hiphop php vm来说,语义处理就是想办法将php代码映射为c++代码(需要runtime提供大量的外部函数)。

1、hphp.y概述

文法开始符号:start

文件包含关系、语句添加等的处理在src/runtime/eval/parser/parser.cpp中, 就onXXX()此树遍历器的输出是一个AST,顶层节点是statement

四、debugger 利用socket实现的调试器

最后真正开始处理的是 void DebuggerProxy::processInterrupt(CmdInterrupt &cmd)

五、base

基本数据结构声明

六、ast

针对 parser解析出的AST进行语义处理(即具体的对每一层树节点 将php代码转为c++代码)

每个statement的统一接口是

virtual Statement *optimize(VariableEnvironment &env) { return NULL; } // 优化语句

virtual void eval(VariableEnvironment &env) const = 0;                 // 处理语句关系

virtual void byteCode(ByteCodeProgram &code) const;                    //

dump(std::ostream &out) const = 0;                                     // 输出c++的代码

PS:

Eval::Construct 发展出的继承结构写的很漂亮

七、analysis 分析作用域

八、runtime 语义处理即翻译php到c++的主流程

eval.cpp Variant eval(LVariableTable *vars, CObjRef self, CStrRef code_str,bool prepend_php /* = true */)

1、php源代码预处理

2、ParseString()   树遍历

3、s->eval(env); 语义分析(递归往下走)

九、函数调用的实现

函数调用基本思路:根据符号表信息,找到object、method、variable等执行环境信息、每次进入一个函数时建立一个thread的栈帧,将php函数调用转化为外部函数的执行逻辑

文章评论

php vm_facebook hiphop php vm 兑现概述(二)相关推荐

  1. 我国对计算机信息系统安全主要是采取,附录信息网络安全监察法规概述二.doc...

    附录信息网络安全监察法规概述二 信息网络安全法律法规 <计算机信息系统安全保护条例> 福建省公安厅网安总队 林世科 10.2 <计算机信息系统安全保护条例> ? 1994年2月 ...

  2. Hystrix概述(二)

    为什么80%的码农都做不了架构师?>>>    一.hystrix在生产中的建议 1.保持timeout的默认值(1000ms),除非需要修改(其实通常会修改) 2.保持thread ...

  3. 【转】MOS管应用概述(二):米勒振荡

    上一节讲了MOS管的等效模型,引出了米勒振荡,可以这么讲,在电源设计中,米勒振荡是一个很核心的一环,尤其是超过100KHz以上的频率,而作者是做超高频感应加热电源的,工作频率在500K~1MHz范围, ...

  4. SAP Marketing Cloud 功能概述(二)

    本文作为这个系列的第二篇,将会给大家介绍SAP Marketing Cloud里的营销活动内容设计和产品推荐这两大模块的功能. 营销负责人员通过第二篇文章介绍的步骤确定了Target Group之后, ...

  5. 集合概述二(Set接口+HashSet集合+LinkedHashSet集合+TreeSet集合)

    一(Set接口): 1.Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Coll ...

  6. MySQL与MariaDB概述 (二)

    2019独角兽企业重金招聘Python工程师标准>>> 第一部分 学习MySQL和MariaDB的前途 MySQL 和 MariaDB 都兼容 SQL,它是一种有大约 30 年历史的 ...

  7. C#网络编程概述 二

    IPEndPoint类: 在Internet中,TCP/IP使用一个网络地址和一个服务端口号来唯一标识设备.网络地址标识网络上的特定设备:端口号标识要连接到的该设备上的特定服务.网络地址和服务端口的组 ...

  8. 机器学习的划分:监督学习、非监督学习、强化学习、进化学习 概述 (二)

    监督学习(Supervised learning):提供带有正确结果的训练集,基于训练集,算法将归纳(generalization)出"如何正确的响应所有可能的输入".也称之为&q ...

  9. 易经-八卦概述(二)

    易经          <易经>指<连山>.<归藏>.<周易>三部易书.其中<连山>和<归藏>已经失传,现存于世的只有<周 ...

  10. 嵌入式Linux系统编程学习之二十六多线程概述

    文章目录 一.多线程概述 二.线程分类 三.线程创建的Linux实现 一.多线程概述   进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段,这就造成进程在进行切换等操作 ...

最新文章

  1. 浅谈ES6原生Promise
  2. [三]RabbitMQ-客户端源码之ChannelManager
  3. 阿里云mysql 日志_mysql日志-阿里云开发者社区
  4. python3 Connection aborted.', RemoteDisconnected('Remote end closed connection without response'
  5. 解决 mac zsh 所有命令失效
  6. Android学习随笔 -- draw9patch的使用
  7. 如何将特定提交推送到远程,而不是之前的提交?
  8. USACO 2016 January Contest, Gold解题报告
  9. 娇小可人女友9号 4K无反相机松下GF9评测
  10. 0/1背包——动态规划
  11. springboot集成ureport2
  12. 沧小海基于xilinx srio核的学习笔记之第三章 xilinx srio核介绍(二)HELLO格式和流控
  13. Http请求报文解析
  14. 计算机添加usb网络打印机,USB路由器设置网络打印机方法
  15. Windows 11 (updated Dec 2021) 简体中文版、英文版(64-bit、ARM64)下载(2022 年 1 月发布)
  16. 2-10-Mysql认实和搭建LAMP环境部署Ucenter和Ucenter-home网站
  17. android 录屏工具,ShareREC for Android全系统手机录屏软件原理解析
  18. Web项目中手机注册短信验证码实现的全流程及代码
  19. 苹果cms v10影视网站安装海螺主题模板
  20. 第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)

热门文章

  1. (转)给趋势投资信仰充值:动量模型百年赚钱史
  2. (转)如何看待IT对于证券行业的价值
  3. 学无止境的 Linux | 龙蜥开发者说第4期
  4. OpenStack Queens版本Security项目介绍
  5. 【优化算法】气味代理优化算法(SAO)【含Matlab源码 1131期】
  6. 【TWVRP】基于matlab智能水滴算法带时间窗的车辆路径与调度优化问题【含Matlab源码 1228期】
  7. 【游戏】基于matlab GUI时钟设计【含Matlab源码 1102期】
  8. 【心电信号】基于matlab小波变换心电信号去噪【含Matlab源码 956期】
  9. 【图像修复】基于matlab GUI Lucy_Richardson迭代法图像修复【含Matlab源码 846期】
  10. 【路径规划】基于matlab粒子群优化蚁群算法最短路径规划【含Matlab源码 076期】