是否耗费5年发展的PHP6版本计划失败了?今年(2015年)10月将推出的新版PHP是7.0版,PHP6将会直接跳过。
最广为使用的直译式语言PHP终于有最新正式版的消息了,预计将在2015年10月释出正式版本,并且经过PHP社群核心贡献者投票,超过7成的人同意最新的PHP版号将是PHP7而非PHP6。从2005年开发至2010年终止的PHP6,已在这几年陆续将新功能併入PHP5.3以及PHP5.4中。
PHP社群核心参与者Andrea Faulds与Zeev Suraski在PHP的Wiki上,共同发表文章表示,PHP6的开发遇到了一些问题,导致一直没办法释出正式版本(General Availability),他们认为PHP6是一个失败的专案,现在是该进到PHP7的时候了。PHP7原先是PHP社群中的惠新辰与Dmitry Stogov私下进行的PHPNG专案,后来专案较成型后公开而受大家所接受,并朝下一个PHP接班版本发展。
文中总结社群中反对採用PHP7版号的声音,反方意见大都认为,从PHP5略过PHP6直接进到PHP7,会让使用者对版本号产生混淆,而且破坏PHP版本号的结构,况且现在已有许多PHP的资源是以PHP6为主角,可能造成开发者无所适从的状况。
正方则回应,就因为PHP6广为人知,在网路上已有不少关于PHP6的讯息,如果将下一个版本又称作PHP6才会造成大灾难,因为这一个版本已经与2010年中止开发的PHP6有极大差异,有许多旧资料难以更新,例如已出版的书,以及非PHP.net管理的PHP6资讯网页将误导开发者。而且也因为PHP6已够知名,下一个版本换成PHP7尚属合情合理,只是PHP6是没有官方正式版本而已。
另外,正方也认为跳过版本号的例子并非无前例可循,像是MySQL的孪生姐妹资料库MariaDB的版本号直接从10开始,Netscape Communicator也是跳过5.0从6.0开始,赛门铁克版号跳过13,这些产品都有其各自的因素而出此决定。文中也提到在动态语言发展史上,版本号6不是一个好数字,正方列举出不光是PHP6失败了,Perl6也失败了。另外,MySQL6也从未正式释出过,即便已经开发了这麽久。或许PHP版号改为中国的幸运数字7后,会发展得更顺利一些。
惠新辰是中国新浪微博的工程师,也是PHP7的发起人之一,他认为比起新功能来说,执行效能是程式语言中最重要的,因为即使是1%的效能提升,都对新浪微博这种全中国最大的LAMP平台有巨大的影响,而Dmitry Stogov也是效能拥护者,因此两人才会一拍即合,共同发展PHP7专案。惠新辰表示,PHP7有显著的效能提升,在Wordpress上与PHP5.6相比,QPS(Queries per second)有100%的提升,他认为等到PHP7正式释出,新浪微博系统效能也将得到巨幅的提升。
PHP7 和PHP5系列的区别
PHP5目前的结构,底层由Zend引擎组成,Zend相当于一个用C写的一个大框架,基于这个框架之上开发出了各种各样的应用函数,也就是 PHP语言 。通过SAPI将PHP和web server隔离,作为统一交互接口。
PHP5的运行方式:
我们常用的PHP运行编译内存缓存APC/opcache,所缓存的就是opcode中间字节码。中间字节码,格式有点类似于汇编语言的格式。可以使用PHP的拓展parsekit查看opcode。
PHP7的运行方式:
附录概念:
(1)字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。(也就是php里常说的opcode,有点类似于汇编语言)
(2)机器码:是一系列供CPU执行的指令。通过编译器就可以把汇编转成机器码(同汇编编程),然后供CPU处理。
(3)JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。
HHVM (HipHop Virtual Machine)
HHVM 在作为PHP新的执行引擎,它主要的作用是:HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。
HHVM的来源
Facebook 早起的很多代码是使用PHP来开发的,但是,随着业务的发展,越来越成为性能的瓶颈,因此Facebook对这些PHP代码做了一个专门的优化。2008 年的时候,Facebook就开始应用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成 C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。
之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。
使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop存在一些问题:
(1)HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。
(2)Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
(3)HPHPc部署步骤繁杂,这点很让PHP开发者头疼,使用和推广困难。
在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。
HHVM会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。
而在目前,HHVM几乎已经完全支持PHP 5.4+了,但还是有不少bug,所以不是所有应用程序都可以运行。(第一个已经支持的项目就是Wordpress)而PHP开发者的计划,则是将 HHVM作为PHP7的默认执行引擎。到那个时候,PHP广受诟病的原生执行效率将会得到大幅的提升。
最广为使用的直译式语言PHP终于有最新正式版的消息了,预计将在2015年10月释出正式版本,并且经过PHP社群核心贡献者投票,超过7成的人同意最新的PHP版号将是PHP7而非PHP6。从2005年开发至2010年终止的PHP6,已在这几年陆续将新功能併入PHP5.3以及PHP5.4中。
PHP社群核心参与者Andrea Faulds与Zeev Suraski在PHP的Wiki上,共同发表文章表示,PHP6的开发遇到了一些问题,导致一直没办法释出正式版本(General Availability),他们认为PHP6是一个失败的专案,现在是该进到PHP7的时候了。PHP7原先是PHP社群中的惠新辰与Dmitry Stogov私下进行的PHPNG专案,后来专案较成型后公开而受大家所接受,并朝下一个PHP接班版本发展。
文中总结社群中反对採用PHP7版号的声音,反方意见大都认为,从PHP5略过PHP6直接进到PHP7,会让使用者对版本号产生混淆,而且破坏PHP版本号的结构,况且现在已有许多PHP的资源是以PHP6为主角,可能造成开发者无所适从的状况。
正方则回应,就因为PHP6广为人知,在网路上已有不少关于PHP6的讯息,如果将下一个版本又称作PHP6才会造成大灾难,因为这一个版本已经与2010年中止开发的PHP6有极大差异,有许多旧资料难以更新,例如已出版的书,以及非PHP.net管理的PHP6资讯网页将误导开发者。而且也因为PHP6已够知名,下一个版本换成PHP7尚属合情合理,只是PHP6是没有官方正式版本而已。
另外,正方也认为跳过版本号的例子并非无前例可循,像是MySQL的孪生姐妹资料库MariaDB的版本号直接从10开始,Netscape Communicator也是跳过5.0从6.0开始,赛门铁克版号跳过13,这些产品都有其各自的因素而出此决定。文中也提到在动态语言发展史上,版本号6不是一个好数字,正方列举出不光是PHP6失败了,Perl6也失败了。另外,MySQL6也从未正式释出过,即便已经开发了这麽久。或许PHP版号改为中国的幸运数字7后,会发展得更顺利一些。
惠新辰是中国新浪微博的工程师,也是PHP7的发起人之一,他认为比起新功能来说,执行效能是程式语言中最重要的,因为即使是1%的效能提升,都对新浪微博这种全中国最大的LAMP平台有巨大的影响,而Dmitry Stogov也是效能拥护者,因此两人才会一拍即合,共同发展PHP7专案。惠新辰表示,PHP7有显著的效能提升,在Wordpress上与PHP5.6相比,QPS(Queries per second)有100%的提升,他认为等到PHP7正式释出,新浪微博系统效能也将得到巨幅的提升。
PHP7 和PHP5系列的区别
PHP5目前的结构,底层由Zend引擎组成,Zend相当于一个用C写的一个大框架,基于这个框架之上开发出了各种各样的应用函数,也就是 PHP语言 。通过SAPI将PHP和web server隔离,作为统一交互接口。
PHP5的运行方式:
我们常用的PHP运行编译内存缓存APC/opcache,所缓存的就是opcode中间字节码。中间字节码,格式有点类似于汇编语言的格式。可以使用PHP的拓展parsekit查看opcode。
PHP7的运行方式:
附录概念:
(1)字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。(也就是php里常说的opcode,有点类似于汇编语言)
(2)机器码:是一系列供CPU执行的指令。通过编译器就可以把汇编转成机器码(同汇编编程),然后供CPU处理。
(3)JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。
HHVM (HipHop Virtual Machine)
HHVM 在作为PHP新的执行引擎,它主要的作用是:HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。
HHVM的来源
Facebook 早起的很多代码是使用PHP来开发的,但是,随着业务的发展,越来越成为性能的瓶颈,因此Facebook对这些PHP代码做了一个专门的优化。2008 年的时候,Facebook就开始应用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成 C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。
之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。
使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop存在一些问题:
(1)HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。
(2)Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
(3)HPHPc部署步骤繁杂,这点很让PHP开发者头疼,使用和推广困难。
在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。
HHVM会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。
而在目前,HHVM几乎已经完全支持PHP 5.4+了,但还是有不少bug,所以不是所有应用程序都可以运行。(第一个已经支持的项目就是Wordpress)而PHP开发者的计划,则是将 HHVM作为PHP7的默认执行引擎。到那个时候,PHP广受诟病的原生执行效率将会得到大幅的提升。