`
eric_weitm
  • 浏览: 243538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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函数调用转化为外部函数的执行逻辑
分享到:
评论

相关推荐

    HipHopPHPFacebook出品的PHP虚拟机运行时和JIT

    《HipHop PHP:Facebook的PHP虚拟机与JIT技术解析》 HipHop PHP,是由Facebook在2010年推出的一款高效能的PHP运行时环境,旨在提高PHP代码的执行效率,尤其是对于大规模Web应用来说,它能显著提升性能。这款工具...

    执行PHP代码的虚拟机HHVM.zip

    HipHop VM(HHVM)是Facebook推出的用来执行PHP代码...Facebook于12年十二月初发布了一个博文,宣布他们的解释型PHP运行环境HHVM(HipHop VM)已经达到甚至超过了编译型PHP运行环境HipHop的运行速度。 标签:HHVM

    facebook用c语言写的核心源码

    HipHop PHP最初由Facebook开发,旨在将PHP源码转换为C++,然后编译成可执行文件,以提高Facebook网站的运行速度和效率。尽管后来HipHop PHP项目演变成了HHVM(HipHop Virtual Machine),但早期的HipHop PHP(v2.1)...

    facebook 架构 php

    2. **PHP与HHVM**:Facebook早期大量使用PHP作为服务器端的主要编程语言,为了优化PHP的性能,Facebook开发了HipHop Virtual Machine (HHVM),这是一个为PHP代码编译成优化过的C++代码的虚拟机。HHVM提高了PHP的执行...

    Facebook PHP SDK 4.0

    Facebook PHP SDK 4.0

    facebook rest api java简单实现

    在Java中实现Facebook REST API的调用,可以借助于各种库,比如Facebook4J或Spring Social Facebook。这篇博客“facebook rest api java简单实现”可能详细讲解了如何在Java环境中设置和使用这些库来执行API请求。 ...

    Facebook开源的高效的PHP运行环境HHVM.zip

    HHVM即HipHop Virtual Machine,目前是3.0版本,出自Facebook,它先将PHP和Hack程序编译为中间字节码,然后通过just-in-time (JIT)编译器将字节码动态翻译为x64机器代码,应用上了非常多的编译优化技术。...

    Laravel开发-facebook-php-sdk-laravel

    在本文中,我们将深入探讨如何在 Laravel 框架中集成并使用 Facebook PHP SDK,以实现与 Facebook API 的无缝对接。Laravel 是一个基于 PHP 的流行开源 Web 应用框架,以其优雅的语法和强大的功能深受开发者喜爱。...

    Facebook推出的PHP改进项目XHP

    XHP的另一个优点是与HHVM(HipHop Virtual Machine)的紧密集成。HHVM是Facebook开发的一个高性能的PHP解释器,它将PHP代码编译为字节码,然后在虚拟机上执行。XHP与HHVM的结合,不仅提升了代码执行效率,还增强了...

    Facebook like button功能的实现

    首先,实现Facebook的“点赞”按钮功能需要集成Facebook的社交SDK。Facebook为开发者提供了iOS和Android的SDK,这些SDK包含了实现“点赞”功能所需的所有接口和资源。下载并安装SDK后,需要在项目中配置相应的SDK...

    Laravel开发-laravel-facebook

    Facebook组件则允许开发者与Facebook API进行交互,实现用户登录、分享内容、获取用户信息等功能。 首先,要安装laravel-facebook组件,我们需要使用Composer,这是PHP的依赖管理工具。在项目根目录下,打开终端并...

    Laravel开发-facebook

    在本文中,我们将深入探讨如何在 Laravel 框架中集成 Facebook 的 PHP SDK,并利用它来实现各种功能,如用户登录、数据获取等。Laravel 是一个流行的 PHP 框架,以其优雅的语法和强大的功能深受开发者喜爱。Facebook...

    Facebook php/js 類

    Facebook PHP/JS 类库是开发人员用来与Facebook平台进行交互的重要工具,它们简化了与Facebook API的集成过程,使得开发者可以轻松地实现社交功能,如登录验证、分享、获取用户信息等。在本概述中,我们将深入探讨...

    facebook php sdk

    Facebook PHP SDK 是一个用于开发与Facebook API交互的PHP库,它极大地简化了通过PHP代码连接到Facebook平台并实现各种功能的过程。这个SDK提供了方便的方法来处理登录授权、数据获取、发布内容以及更多其他操作。 ...

    Facebook的RocksDB平台发展概述.docx

    ### Facebook的RocksDB平台发展概述 #### 一、RocksDB简介 RocksDB是一款由Facebook基于LevelDB开发的高性能键值存储数据库软件。它最初是为了满足高速缓存存储需求而设计,专注于提高在快存(如SSD)上的读写性能...

    使用自定义按钮实现Facebook授权登陆和登出

    本文将深入探讨如何使用自定义按钮来实现Facebook授权登录和登出功能。 首先,我们要了解Facebook的OAuth 2.0授权流程,这是Facebook提供给开发者进行身份验证的基础。用户点击自定义按钮后,应用会通过Facebook ...

    基于PHP的Compxler PHP版.zip

    关于PHP编译器的开发,一些知名的项目包括Facebook的HipHop VM(HHVM),它是一个Just-In-Time(JIT)编译器,可以将PHP代码转化为高性能的机器码。另一个是Zend Engine,它是PHP解释器的核心,负责解析和执行PHP...

    仿Facebook底部工具栏的实现

    在本文中,我们将深入探讨如何实现一个仿Facebook底部工具栏,这是一个常见的设计元素,用于提供用户界面中的主要导航选项。这个底部工具栏通常包含多个图标,代表不同的功能区域,如消息、通知、好友、个人资料等。...

    facebook bigpipe Java版本实现

    在这个Java版本的实现中,我们有机会深入理解BigPipe如何在非PHP环境中工作。 BigPipe的核心理念是将一个网页分割为多个“管道”(pipe),每个管道负责渲染页面的一部分。当用户请求网页时,服务器会并行处理这些...

    Facebook API Developers Guide

    ### Facebook API 开发者指南知识点概述 #### 一、引言:Facebook 平台简介(第一章) 本章节主要介绍 Facebook 平台的基本概念及其在社交网络中的地位与作用。通过本章的学习,开发者能够了解 Facebook API 的...

Global site tag (gtag.js) - Google Analytics