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