PHP的未來(lái):Facebook的Hack
Facebook今年發(fā)布了一種新的編程語(yǔ)言Hack,無(wú)論從什么角度分析,這種語(yǔ)言都類(lèi)似于時(shí)下流行的PHP。其大量的功能,比如靜態(tài)類(lèi)型等等和PHP開(kāi)發(fā)人員長(zhǎng)期要求的保持一致。拋開(kāi)語(yǔ)法這些,其實(shí)Hack并不是PHP。Hack運(yùn)行在Facebook的虛擬機(jī)(HHVM)上,而其競(jìng)爭(zhēng)對(duì)手則運(yùn)行在傳統(tǒng)的PHP Zend引擎上。
為什么Facebook要建立Hack?
首先Facebook的內(nèi)部代碼是用PHP編寫(xiě)的,同時(shí)Facebook可以讓很多新的開(kāi)發(fā)人員能夠使用PHP,因?yàn)檎Z(yǔ)言是容易學(xué)習(xí)和使用的。當(dāng)然,F(xiàn)acebook的PHP代碼可能轉(zhuǎn)換為C衍生物被推到之前的生產(chǎn)環(huán)境中。問(wèn)題的關(guān)鍵是Facebook強(qiáng)烈的依賴(lài)于PHP語(yǔ)言,以吸引新的人才和提高開(kāi)發(fā)人員的效率。
嚴(yán)格的類(lèi)型
不幸的是,PHP不可能在Facebook的規(guī)模下執(zhí)行。因?yàn)镻HP是一種松散類(lèi)型的語(yǔ)言,很多關(guān)于類(lèi)型的錯(cuò)誤可能在運(yùn)行的時(shí)候不會(huì)被發(fā)現(xiàn)。這就意味著Facebook在早起必須編寫(xiě)很多執(zhí)行類(lèi)型錯(cuò)誤檢查的測(cè)試,或者花更多的時(shí)間來(lái)重新構(gòu)建發(fā)布后的運(yùn)行錯(cuò)誤。為了解決這樣一個(gè)問(wèn)題,F(xiàn)acebook添加嚴(yán)格的類(lèi)型來(lái)對(duì)運(yùn)行時(shí)的返回類(lèi)型實(shí)施攻擊。嚴(yán)格的類(lèi)型抹殺了很多相關(guān)單元測(cè)試的必要性,同時(shí)也激勵(lì)開(kāi)發(fā)人員在早期開(kāi)發(fā)過(guò)程中捕獲與類(lèi)型相關(guān)的錯(cuò)誤。
瞬時(shí)類(lèi)型檢查
為了使開(kāi)發(fā)的過(guò)程中捕獲錯(cuò)誤更加得心應(yīng)手,F(xiàn)acebook的HHVM引擎包含了一個(gè)類(lèi)型的檢查服務(wù)器,這個(gè)服務(wù)器在本地運(yùn)行時(shí)監(jiān)控Hack代碼。開(kāi)發(fā)人員的代碼編輯器和IDE在代碼開(kāi)發(fā)過(guò)程中可以使用這個(gè)類(lèi)型檢查服務(wù)器來(lái)立即報(bào)告語(yǔ)法或類(lèi)型的相關(guān)錯(cuò)誤。
現(xiàn)有的PHP代碼呢?
大多數(shù)現(xiàn)有的PHP代碼將運(yùn)行在Facebook的HHVM引擎,這是必要的,因?yàn)镕acebook的現(xiàn)有代碼庫(kù)主要是PHP代碼。Hack代碼存在一些異常,畢竟其沒(méi)有和傳統(tǒng)的PHP等效,比如一些語(yǔ)言特性(如變量)和Zend擴(kuò)展仍然不被支持。隨著時(shí)間的推移,HHVM也會(huì)盡快實(shí)現(xiàn)與Zend引擎的奇偶化校驗(yàn)。
此外,F(xiàn)acebook創(chuàng)建的Hack語(yǔ)言與傳統(tǒng)的PHP代碼進(jìn)行逐步的遷徙。
這是否意味著PHP“死”了?
如果Hack是那么好,這是否意味著PHP的日子已經(jīng)屈指可數(shù)了?答案當(dāng)然是:NO!傳統(tǒng)的PHP Zend是由專(zhuān)門(mén)的機(jī)構(gòu)管理審核通過(guò)的,任何新的功能必須由機(jī)構(gòu)的成員審核投票通過(guò)之后才能公布,這樣的投票時(shí)100%公正和公開(kāi)的。
但Hack是非常不錯(cuò)的,Hack有非常多屬于自己獨(dú)特的功能,所以永遠(yuǎn)不可能成為傳統(tǒng)的PHP語(yǔ)言。Facebook的HHVM引擎比Zend引擎更好的性能,而且它具有更多的內(nèi)部開(kāi)發(fā)人員,致力于不斷使HHVM引擎變得更好。
這也并不意味著PHP的Zend引擎將消失,Zend和HHVM引擎能夠而且將會(huì)并存。競(jìng)爭(zhēng)是一件好事,我希望這兩個(gè)Zend和HHVM會(huì)從彼此的優(yōu)勢(shì)中獲益。
是Facebook負(fù)責(zé)嗎?
Hack是Facebook的產(chǎn)物,這主要是源于Facebook的工程師。雖然現(xiàn)在公眾都希望它能公布,但是Hack和HHVM很大程度上仍然依賴(lài)與Facebook的持續(xù)投資和參與。
未來(lái)
由于Hack和HHVM的優(yōu)越性,我想從某種程度想來(lái)說(shuō),Hack是PHP的未來(lái)。