小子嘿咻嘿咻
小子嘿咻嘿咻
关注数: 11
粉丝数: 66
发帖数: 1,012
关注贴吧数: 46
咨询老司机,轮胎被马路牙啃了个小坑,怎么处理?自己补还是汽修厂补,有必要更换么?
新人求指点(XP系统) 1、根据什么来判断电脑能否装XP系统 2、求推荐台能装XP系统的主机配置 3、双显示器有什么要求(除了要两个显示器) 谢谢
渡劫,兄弟姐妹们,上! 如题
每日一水 每日没人限水三萜,违者一律删除
每日一水 每日没人限水三萜,违者一律删
渡劫,你们懂的
每日一贴 每日一贴 每日没人限水三萜,违者一律删除
渡劫 差4点经验。昔日帮助过的道友,看你们的了,快来脸熟我!
每日一水 每日没人限水三萜,违者一律删除
每日一水 每日没人限水三萜,违者一律删除
新书留名 纯小白
吞了一个被自己碾压的分身,一倍,两倍,三倍.... 随着攀升,孟浩的神识以一种恐怖的速度,一样暴增,轰隆隆下,一倍,两倍,三倍……不断地狂暴。 他的肉身同样如此,本已是极致,可如今随着吸收罗天的部分精华,竟突破了极致,再次强悍。 吞了一个被自己碾压的分身,一倍,两倍,三倍.... @孟浩,你为何这么叼?
有谁跟我一样? 我不想你陪着过完春节
求一张图片 那张找儿子,爱说666的图
都说陈凡为了他的小师弟故意到了苍茫外! 我说陈凡本就是苍茫外的人! 但最终还是选择帮孟浩
有谁跟我一样 守护雅典娜的剧情直接跳过
谁能告诉我第八世是什么鬼
能! 师徒恋能不能直接跳过不?能!
吾名罗天 @孟浩 服不,不服,一根手指按死你。
919嗨享乐迷节,电视手机0元抢 这个活动很给力,小伙伴们不会错过了
天火大道分析帖! 欢迎嘲讽! 1,女主叫赫拉
三少出新书了,好开心 最喜欢看他的《星辰变》和《武极天下》了,写的都好经典,新书很期待!
三爷霸气 大家都来说说新书讲什么的?
刚注册了个域名,dota2.top,想做个关于dota2的网站 刚注册了个域名,dota2.top,想做个关于dota2的网站,想问下吧友有没有什么好的建议?
D8水友特来逛吧,听说贵吧出了个名流,恭喜恭喜 D8水友特来逛吧,听说贵吧出了个名流,恭喜恭喜。。
去朋友家串门,非说要脱鞋(‘_*)ゞ 然后我走了几圈。。 ∑(゚Д゚)这样的房间也需要脱鞋吗?
求爽,都猜到的剧情文采再好看的也不爽 如果这一战耗子打输了那就真的爽了
请问吧友们今晚有三更没? 如题。。。。。。。。。。。。。。。。。 割一下 每天早晚两更,为什么上一日凌晨还有一更,今天还有没?
耳大,你说会让我们看的爽的,可这两天我怎么就看着不爽 求爽……
看了254章,我有话要说 毒丹是假,古丹是真; 救人是假,取丹是真; 真相如何,坐等被喷。
好多山寨,说点小小看法,不喜请无视 好多山寨,尽管相似,但只是前面的延续推理,无半点新鲜情节,这样的东西有意思?觉得自己厉害就去构思一篇,作者写书,不单单推理下文而已,请自重,你硬要猜下文也不说你,你居然还说耳大写的不怎么样,要不要脸?写的不好你还看,还跟写?还来山寨?
自从思冬念冬后就没看了,请问现在还在水么?这书还能看不? 如题。。。
252章,更新了没,更新了没,请大声的告诉我! 如题。。
如何看待Facebook开源语言hack? 静态类型,有一些先进的特性(比较而言)比如匿名函数。还有异步之类的,不能忍的是变量名还是要加 $ 。 > Facebook 是一个热衷使用 PHP 的大家庭,但 Hack 团队负责人布莱恩·奥沙利文(Bryan O’Sullivan)却也指出,鉴于许多开发者在开发着很多不同的项目,能够程序运行前捕获到其中的错误也将会是很有意义的。这可以让开发者的编程过程更加高效,这与让程序运行得更加高效是具有同样意义的。因此,一些个 Facebook 的高级工程师聚集到了一起,开发出了 Hack 语言。Facebook 在内部同时使用 PHP 和 Hack 已有一年时间,而现在已着手计划尽可能将代码移植到 Hack 上。奥沙利文表示,Hack 对代码本身的运行速度并没有实质影响...
Hack logoFacebook 编程语言 Hack Hack 是 Facebook 推出的一款新的编程语言。 Hack 是由Facebook开发的,同时结合了动态类型语言(如PHP语言)和静态类型语言(如C语言)两种特点的一种编程语言。通常在使用静态类型语言编程 时,开发者会在程序被运行前就知道错误发生的位置。而在更为当前的编程环境里,动态类型语言会一直运行到直至程序出错崩溃。
HHVM and Hack 使用手册 Copyright版权说明 HHVM和Hack编程语言说明 Preface 开始使用 简要说明 一个简单的例子 完成我们的hack之旅 安装及设置说明 General Installation Considerations 在Linux系统上安装 在Mac OS X上安装 在Windows平台下安装 在云平台上进行安装 FastCGI 安装扩展插件 Runtime设置 Hack语言的安装 Hack语言指南 Hack语言简介 Type Annotations Hack Modes Generics 可空对象Nullable 集合Collections 数组Arrays Shapes Type Aliasing Async
hack hacklang hackb2b hackcms hacko2o hack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2ohack hacklang hackb2b hackcms hacko2o
hack hakclang hackb2b hackb2c hacko2o hackcms hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcms hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hack hakclang hackb2b hackb2c hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcms hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hack hakclang hackb2b hackb2c hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcms hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hackb2b hackb2c hacko2o hackcmshack hakclang hack hakclang hackb2b hackb2c
哈哈 喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔喔
Hack集合PHP 和 Java Facebook发布的一种名为 Hack的编程语言,集合了目前两种主流网页编程语言 PHP 和 Java 的优势,而这个语言从语法等特性上与 PHP 十分相似。目前,绝大部分Facebook的页面都由这个Hack 语言编写[1]。 而 Hack 集中了两者的优势:静态修改后台文件,动态查看修改结果,降低了编程工作量和用时,也缓解了服务器的压力。 Hack 语言由 Facebook 的三位高级工程师 Bryan O' Sullivan, Julien Verlaguet 和 Alok Menghrajani 共同编纂完成。 目前,绝大部分的 Facebook 网页都已经用这种语言来支持。
hacklang吧招小吧主 如题,回复资料申请
免费申请HACK虚拟主机,体验学习版。 地址:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhack.nolazy.net+&urlrefer=aa9d7505876c67910aa829579fdfbfa4 hack虚拟主机申请好后, FTP地址:nolazy.net 请用各自的用户名密码登陆。 使用二级域名访问: username.nolazy.net 例如:xiaozi.nolazy.net上传测试文件index.php在浏览器上打开,成功!下面可以开始hack编程之路~
hack尚不支持的PHP特性 While Hack is quite symbiotic with the PHP language, there are some PHP features that are not supported by Hack and the type checker. Here is a non-exhaustive list:
【拜吧贴】“hacklang吧”祝【php吧】越办越红火... hacklang吧!特来贵吧拜吧,希望两吧友谊长存,共建和谐网络。愿与贵吧结为友谊吧,一起共谋贴吧发展!同时也欢迎本吧吧友到hacklang吧做客,在hacklang吧你可以有什么想说的,想吐槽的以及想讨论的话题都可以到【hacklang吧】http://tieba.baidu.com/f?ie=utf-8&kw=hacklang 到hacklang吧,你可以了解最新hacklang动态; 到hacklang吧,你可以天天参加活动,拿奖拿到你手软; 到hacklang吧,会有意想不到的惊喜哟。 最后再次祝php吧越办越好!
安装 Laravel 通过 Laravel 安装器安装 先下载 Laravel 安装器 PHAR 文件。为了方便起见,将该文件重命名为 laravel 并移动至 /usr/local/bin 目录。完成后,只需在你指定的目录下输入简单的 laravel new 命令即可创建一个全新的Laravel安装。例如,laravel new blog 将创建一个名为 blog 的目录,该目录中包含了一份全新的Laravel安装以及所需的依赖项。这种安装方法比通过 Composer 安装要快许多。
编程语言成互联网新战场 谷歌Go对抗FB Hack 作为网络巨头,谷歌(微博)的许多产品为人们所熟知,但是有一个面向云计算时代的编程语言Go,却十分低调,实际上,这种语言开发的项目越来越多。日前,美国科技新闻网站读写网,将视角瞄准了谷歌推出的编程语言Go。 在互联网应用程序开发中,Java仍然占据主导地位,不过,面对现代的计算方式,尤其是云计算的兴起,已经出现了新的开发工具和编程语言。谷歌的Go语言,明确为云计算编程开发,由于在结构上的美观等特点,这种语言正在受到越来越多开发者的欢迎。 从某种角度来说,谷歌的Go语言十分低调,比如按照跟踪搜索关键词热度的“谷歌趋势”统计,人们对Go语言的兴趣,远远无法和现有的开发语言进行对比,比如Java,C++和Javascript。 不过这并不是完整的故事。目前几乎无法统计需要Go编程能力的开发员的岗位数量有多少,不过仍然有一些迹象和数据表明,在招募开发者的企业中,Go语言呈现出强劲增长的动力。 最好观察Go语言普及程度的指标,是观察有多少开放源码的项目,使用了这种语言。 根据Redmon公司分析师DonnieBerkholz针对Ohloh数据库(跟踪了全世界的60万个开放源码项目),Go语言的渗透率出现了实质性增长。 这位分析师表示,在所有的开源委托开发项目中,使用Go语言的开发比例,已经占到了百分之一。对于一种年轻的语言,这样的比例已经实属不易。 为什么人们会选择Go语言,当然和云计算的需求有关系。Go语言设计者之一的派克(Rob-Pike)介绍说,最初之所以推出Go语言,是希望对传统的C++语言进行改进,因为在C++语言的控制结构中,要实现并发操作存在困难。Go语言另外一个优点,是在同一时间可以运行程序的多个进程。 媒体指出,云计算是未来发展的方向,所以越来越多的程序员,开始学习Go语言。 有意思的是,程序开发语言,似乎成为互联网巨头竞争的一个新战场。日前,社交网站脸书(Facebook)的三位工程师,正式对外发布了一种新的编程语言Hack,据称脸书内部已经使用这种语言长达一年时间,工程师希望通过开源,让其他开发者共同来完善这种语言。
一个简单hack,hacklang的范例 创建一个名为hello.php的文件, 然后把这个文件放置您的服务器根目录下面(DOCUMENT_ROOT) 打开里面的文件输入如下内容: 范例 #1 我们的第一个HHVM脚本: hello.php <html> <head> <title>PHP Test</title> </head> <body> <!-- This could be hh or php --> <?hh echo '<p>Hello World</p>'; ?> </body> </html> ------------------------------------------------------------------- <html> <head> <title>PHP Test</title> </head> <body> <p>Hello World</p> </body> </html> ------------------------------------------------------------------- Example #2 Get system information from HHVM <?hh phpinfo(); ?>
hack,hacklang在windows平台下安装 提示: HHVM暂不支持windows平台,但是在2014年里面,我们会努力工作开发win平台下的HHVM,敬请期待!
Hack:用于HHVM的一种新编程语言 想急切尝试Hack?传送门:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhacklang.org%2F&urlrefer=b134e6fbe6bc100a9b438944f6bf4394 今天我们发行了Hack,一门能够在HHVM上与PHP无缝交互的编程语言。Hack的静态类型兼顾及协调了PHP的快速开发周期。同时增加了在其他现代编程语言中常见的许多功能。 我们已经在Facebook上部署了Hack,并且取得了巨大的成功。在过去的几年里,借助自家开发的一些重构工具,我们几乎将有的PHP代码迁移到了Hack上。 我们也很自豪地向外发布一个开源版本的Hack,作为我们的 HHVM runtime 平台的一部分,它现在同时支持Hack和PHP。
Hhvm安装教程 大约两年前,Facebook首次推出了HipHop。它是一个源代码转换器,将PHP代码转换为高度优化的C++代码,然后再使用g++编译器编 译。HipHop被Facebook广泛运用,其网站所有PHP代码都经HipHop转换过,旗下其他网站也采用HipHop来优化。 不过,最初代码是由一个HipHop静态编译器转换的。即PHP代码先编译成二进制形式,然后再部署。该方法有个重大问题,因为它使得维护及优化代码更加 困难,且其增加的几个环节也使得bug更容易进入。 在随后的开发中,Facebook使用了一个可以即时转换的HipHop解释器HPHPi。它比之前的编译器要缓慢得多,但相对于每个变化都得编译的情况要好很多。但这也意味着Facebook需要同时维护编译器和HPHPi两个HipHop工具。 在这种情况下,一个新的HipHop虚拟机(HHVM)诞生了。Facebook的工程师介绍,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点。Facebook表示,HHVM将替代HPHPi,用于所有的PHP执行。根据 Facebook透漏,HHVM在速度方面获得了显著改进,比目前使用的PHP解释器快60%,而使用内存减少90%。 Facebook于12年十二月初发布了一个博文,宣布他们的解释型PHP运行环境HHVM(HipHop VM)已经达到甚至超过了编译型PHP运行环境HipHop的运行速度。 Facebook现在已将HHVM开源,同时弃用了HPHPi并移除了对它的构建支持。到2013年中期,他们将不再支持 HPHPc。HHVM提供了支持Ubuntu 12.04的预构建包以及支持CentOS 6.3的构建说明,而对FreeBSD 9和Mac OS的支持将于明年HPHPc退役之后再提供。 目前HipHop只支持64位,并且在128M的内存上编译会有问题!
hacklang教程收集整理 hack,hack语言hacklang教程收集整理 ------------------------------------------------------- 新出的编程语言学起来面临许多困难,希望能出多一些教程,hack手册之类的~
[haklang]吧导航帖2014-3-22 一楼百度 本贴入吧必看,本贴请勿回复
Facebook新发布的HACK语言是否兼容PHP? 请指教 1.Hack语言是否基于php,是否兼容php? 2.Hack语言现在是否有官网,GitHub,Google Code等? 3.Hack+MariaDB是否有可能是一种趋势? 1) Hack是基于php. Hack和php没有"兼容"一说,而是"HHVM兼容Hack和PHP",可以参考 PHP: Converting an Existing Project to Hack 2) 官网Github 3) 有可能,但只是有可能,就像你可以认为"X-lang + Y-Database 是趋势" > Hack has deep roots in PHP. In fact, most PHP files are already valid Hack files. Hack官网: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhacklang.org%2F&urlrefer=b134e6fbe6bc100a9b438944f6bf4394 Hack向全世界表明了Facebook会跟PHP一路走到黑的决心。
为什么Facebook大费周章搞一个Hack? 为什么Facebook大费周章搞一个Hack?不就是因为历史代码库太大不得不继续在PHP本身基础上改良么?可笑的是很多人却把『Facebook在用PHP』作为PHP是一个好语言的论据… 回过头来说,Hack主要是想解决这几个问题: 效率 对大型项目提供编译时代码检查 面对巨大现有代码库,提供渐进过渡到新语言的方案 为了解决这几个问题,对应的策略是 Hack是一门typed language,增加HHVM的JIT优化空间 同上,Hack是一门typed language,并自带type inference提供编译时代码检查 <?hh标签及相应的level,方便将FB的代码库逐步过渡到新语言上 正因为需要将FB内部大量代码迁移到Hack上,很多基本的东西是不能变的。如果把变量名前加$给去掉…那还不如用其他语言重写代码,何必要继续用Hack呢? HHVM才是PHP的未来… 来点八卦 Hack这门语言在FB外讨论是在去年一个OCaml的一个con上(抱歉实在找不到原始链接了)。是的Hack是用OCaml写的 为了避免NDA violation,我就贴个链接 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fspyder.wordpress.com%2F2014%2F03%2F16%2Fwhy-ocaml-why-now%2F+&urlrefer=789b82ac80e20700e461629252180458关键词『web IDE 』。这个东西好像暂时没开源但是应该快了。 <?hh是『Hack for HipHop』的缩写,HHVM是HipHop Virtual Machine的缩写。为什么用HipHop呢…因为可以缩写成hphp…high performance PHP…
Hack语言怎么样,hack怎么样,hacklang怎么样 Hack语言怎么样,hack怎么样,hacklang怎么样 关于facebook开源自己内部使用的语言Hack一事,还是觉得国外纯粹的技术氛围令人敬佩。从规模看,国内BAT比FB壮吧。但是全都忙着赚钱了。业内大佬就得有大佬的风度不是,编程语言、数据库、OS等至今还没有出自国内行业之手的。莫不是你们私下偷偷用。。。 Facebook发布了开源编程语言Hacklang,以PHP作为基础语法,做了严格的输入输出类型定义,增加了包括Vector/Map/Set/Pair等几种新类型和更安全的HTML语法,补足了PHP的不严谨和不安全,新特性里包含了异步语法Async等,也参考了点C++和Golang的一些东西。 笼统看了 hacklang 的文档。为 PHP 做了严格的输入输出类型定义,增加了几种类型和更安全的 HTML 语法。总之大多补足 PHP 的不严谨,也有异步语法 Async,但只捉襟见肘。 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhacklang.org%2F+&urlrefer=5fc55db71da270ae32d1b2ba24e15289右边的例子语法有些Scala的味道,一个是给PHP引入静态类型,一个是给Java引入动态类型。 静态类型,有一些先进的特性(比较而言)比如匿名函数。还有异步之类的,不能忍的是变量名还是要加 $ 。 > Facebook 是一个热衷使用 PHP 的大家庭,但 Hack 团队负责人布莱恩·奥沙利文(Bryan O’Sullivan)却也指出,鉴于许多开发者在开发着很多不同的项目,能够程序运行前捕获到其中的错误也将会是很有意义的。这可以让开发者的编程过程更加高效,这与让程序运行得更加高效是具有同样意义的。因此,一些个 Facebook 的高级工程师聚集到了一起,开发出了 Hack 语言。Facebook 在内部同时使用 PHP 和 Hack 已有一年时间,而现在已着手计划尽可能将代码移植到 Hack 上。奥沙利文表示,Hack 对代码本身的运行速度并没有实质影响...
Hack on HHVM —— Facebook是如何优化PHP的 Facebook周四正式发布了Hack编程语言,将静态类型以及一些现代的语言特性引入了PHP。这是Facebook对PHP优化之路上的新里程碑。Facebook为何要优化PHP 这个问题可以从不同角度来回答。简单直接的回答是,Facebook的规模太大了。PHP的性能问题限制了Facebook的发展。从另一个角度来回答,则是要回答既然PHP不够用,为什么不干脆换掉? 把PHP换掉也有“整体换”和“局部换”的区别。最彻底的方案就是完全离开PHP,用别的语言重写一套。但是对于Facebook而言这个代价太高了。如果切换的话,多年来在PHP的积累就完全作废了。而且Facebook的业务逻辑非常复杂,据说PHP代码有2千万行…… 而且,Facebook员工众多,切换到一种新的语言,学习成本也不低。 既然整体换不可行,那就局部换吧。例如给PHP写C/C++扩展,可以提升性能。但是PHP扩展开发起来成本高,一般只适用于比较稳定的库,适用范围很有限。另一个方案将性能瓶颈的地方用其他语言实现,然后通过RPC(Remote Procedure Call,远程过程调用)在PHP和其他语言之间通讯。Twitter就用了这条路线,大量组件使用Scala和Java编写,通过RPC与展现层的Rails通讯。事实上,Facebook在这方面已经做了不少工作,为了减少RPC调用的开销,Facebook还专门开发了Thrift 。然而,C++开发成本比PHP高很多,不适合用在需要快速修改的地方,而且大量RPC调用终究会影响性能。 整体换不现实,Thrift不够用,那么Facebook优化PHP就势在必行了。 Facebook要如何优化PHP 优化PHP,最先想到的是作性能分析,找出瓶颈,然后进行对应的优化。Facebook为此开发了 XHProf 工具。XHProf精确到函数层面,数据收集组件使用C开发(PHP扩展),报告组件用了PHP。支持PHP 5.2以上版本,对于定位性能瓶颈很有帮助。 但是PHP语言层面的优化限制太多,对Facebook而言还是不够用。所以Facebook需要对PHP语言的实现本身进行优化。 首先可以考虑的方案是改善PHP的官方实现。PHP的官方解释器运行PHP代码的过程可以分为两步:第一步,将PHP编译为bytecode;第二步,运行bytecode。那么改善PHP的官方实现就可以从这两个方面着手。 首先是优化编译PHP的步骤,这方面的工作已经有 ZendOptimizerPlus 做了。它会在内存中缓存编译好的bytecode,这样以后访问代码的时候就可以直接访问缓存好了的bytecode,省去了从磁盘读取再重新编译的开销。但是由于PHP语言的动态性,这个方法的效果一般,最好的情况下也只能提升20%的性能。 其次是优化运行bytecode的步骤。上面提到的ZendOptimizerPlus主要是优化编译PHP,但是也附带做了一些bytecode运行的优化。PHP有三种方式来运行bytecode:CALL、SWITCH和GOTO,默认使用CALL,也就是函数调用。优化函数调用,常用的方法就是内联(Inline function),也就是将函数展开,将函数体插入替换调用该函数的地方,这样可以节省每次调用函数带来的额外时间开支。但是这种做法其实是用“空间换时间”,如果内联过头了,空间开销会很大,得不偿失。在这方面进行调整,可以提升运行bytecode的性能。 此外还可以将整个PHP解释器用汇编重写,以快闻名的 LuaJIT 就是这么干的。 然而,无论是内联优化还是用汇编重写,代价都很大,而且如果优化官方实现的话,还要考虑PHP的向下兼容…… 既然这个方案不太现实,那么不如把PHP搬到JVM上吧?JVM性能相当不错。 把PHP搬到JVM的工作,有人已经做过了。例如,IBM的 P8(已死) 和 Quercus(半死不活)。Facebook也研究过这个方案,2012年的时候,还有Facebook迁移到JVM的传闻。其实Facebook早已放弃这条路线。根据Facebook的研究,Quercus的性能和Zend+APC相比,差不了太多。这一方案效果不理想的原因可能是,JVM本身性能的优化是针对Java做的,其他语言在JVM上实现,不一定能用到这些优化。动态语言尤为如此。因为Java本身是静态类型的,所以很多优化JVM就没必要做,而在JVM上跑的动态语言需要这些优化。 既然JVM是为Java优化的,搬上去不合适,那不如针对PHP开发一个VM?这样就可以作大量针对性地优化了。然而开发VM可没有那么容易,成本不小,所以Facebook最初的选择是将PHP编译成C/C++之类性能优异的语言。也就是HHVM的前身——HPHPc。具体的做法是将PHP翻译为C++,然后再编译。 相比VM,这样的实现比较简单,而且能放手做优化(因为是离线编译,所以可以用时间换性能)。但是PHP的很多动态内容编译成C++比较麻烦,因此HPHPc禁掉了 eval() 之类的特性,即使这样,还是带来了一些问题,特别是由于需要将动态include的文件都编译在一起,最终的部署文件体积太庞大了,都过G了。 和HPHPc类似的项目有 Roadsend 和 phc ,前者已经不维护了,后者也是命运坎坷。 编译到C++的效果不好,所以Facebook最终决定,还是写一个VM吧。 HHVM FaceBook开发HHVM的阵容相当豪华,其中包括 Andrei Alexandrescu, 《C++ Coding Standards》的作者。 Drew Paroski,改进了.NET虚拟机的JIT。 Jason Evans,jemalloc的开发者(jemalloc将Firefox的内存消耗降低了一半)。 Keith Adams,VMware核心架构。 Sara Golemon,《Extending and Embedding PHP》作者,PHP内核领域的专家。 值得注意的是,Keith Adams给HHVM的影响很大。HHVM使用了JIT技术,一般的代码通过解释器执行(因为JIT也是有开销的),而常用的代码则使用JIT优化。通常而言,VM判断是否需要进行JIT优化是通过以下两种策略的一种:method-at-a-time(如果函数的执行超过了阈值,就进行JIT优化)和tracing (如果循环的执行超过了阈值,就进行JIT优化)。但是HHVM使用的是一种独特的策略,basic-block-at-a-time,这个策略和VMware的x86 hypervisor相似。使用这个策略与Facebook希望支持类型推导的闭包有关。 Hack 上面提到了类型推导。事实上,Facebook推出了一个运行在HHVM上的PHP改良语言——Hack。Hack里加入了类型的支持: <?hhclass MyClass { const int MyConst = 0; private string $x = ''; public function increment(int $x): int { $y = $x + 1; return $y; }} 加了类型之后,除了方便大型团队协作,避免编程中出现的错误之外,还有一个重要的原因就是能够让HHVM更好地优化性能。JIT优化最主要的方面就是根据类型来生成特定的指令,这样可以减少大量的指令和条件判断。而对于PHP这样的动态语言,要推断清楚类型是非常困难的,所以Hack就直接让程序员写上了。 兼容性 HHVM除了作为Hack的VM之外,还可以运行原生的PHP。兼容性测试表明,HHVM对PHP的兼容度已经达到98.58%了。由于HHVM使用了独特的JIT优化策略,因此Facebook自行开发了 tracelet 辅助库,这个库只支持x86 64bit系统,所以HHVM也只能在64位系统上使用——不过这个问题不大,现在的服务器硬件基本都支持64位了。需要考虑的是PHP扩展的问题。由于PHP语言包含非常之多的扩展,而Facebook的HHVM只实现了自家用到的扩展,所以可能有为HHVM重写PHP扩展的需要。好在相比为官方PHP实现写扩展,为HHVM写扩展比较容易,对性能要求不高的扩展可以使用纯PHP编写,然后编译到HHVM二进制文件中即可,详见HHVM wiki 。还有一个要小心的问题就是HHVM是常驻内存的,所以如果某处PHP代码有内存泄露问题的话,可能拖慢整个HHVM服务的速度,甚至导致HHVM挂掉。
1
下一页