标点符(钱魏 Way)

Facebook HipHop 源代码发布

Facebook HipHop for PHP是一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成。使PHP能和C++一样高效的运行。HipHop使Facebook Web服务器上的CPU使用平均减少了50%。 

PHP是一种脚本语言,其好处是编程效率高,能够支持产品的快速迭代。但是与传统的编译语言相比,脚本语言的CPU和内存使用效率不好。随着Ajax技术的广泛采用,加上SNS对动态要求较高,这些缺点更显得突出。常见的办法是直接用C++重写PHP应用中比较复杂的部分,作为PHP扩展。 

  

HipHop将PHP代码转换为高度优化的C++代码,然后再用g++编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如eval()。 

HipHop开发中的主要困难在于,在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性,但是大多数PHP代码还是非常简单的。if (…) {…} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型,从而节省内存。 

转换过程分三步: 

1. 静态分析。收集声明关系和依赖关系等信息。 

2. 类型推演。选择最合适的类型,是C++的标量?还是String, Array, classes, Object或者Variant。 

3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。 

HipHop在保持了PHP优点的同时,也兼得了C++的性能优势。项目总共有30万行代码,5000多个单元测试。所有这些都以PHP开源许可证形式发布到GitHub。 

http://github.com/facebook/hiphop-php

码字很辛苦,转载请注明来自标点符《Facebook HipHop 源代码发布》

评论