小子嘿咻嘿咻 小子嘿咻嘿咻
关注数: 11 粉丝数: 66 发帖数: 1,012 关注贴吧数: 46
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
编程语言成互联网新战场 谷歌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,据称脸书内部已经使用这种语言长达一年时间,工程师希望通过开源,让其他开发者共同来完善这种语言。
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的内存上编译会有问题!
为什么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 下一页