為什么 Facebook 發(fā)明新語言“Hack”
為什么 Facebook 發(fā)明新語言“Hack”?(注:Hack是一種PHP的派生語言)
為了替換掉那些有年頭的老代碼,F(xiàn)acebook創(chuàng)建了一個新的語言。這篇文章將會告訴背后的故事。
---By Steven Melendez
這個故事來自Facebook工程師Julien Verlaguet和Ed Smith的一次訪談。2004年2月,扎克伯格(Mark Zuckerberg)的哈佛同學(xué)們***次登陸Facebook,服務(wù)器里運(yùn)行著PHP。那個時候PHP擊敗了Perl成為最炙手可熱的Web開發(fā)語言。
使用類似Ruby的Rails或者Python的Django這些當(dāng)下***的開發(fā)框架都不是那個時候的選擇。Rails***次發(fā)布是在幾個月之后(注:2004年7月),而Django在一年后才被發(fā)布(注:2005年)。十年后,PHP因?yàn)楸孔镜膸?,不一致的命名?guī)則,內(nèi)置定義的函數(shù),在多語言程序中語法和語義與相關(guān)語言巨大差異使人混淆,過去的設(shè)計原則極容易導(dǎo)致安全性問題等而被指責(zé)。
“每一個PHP程序員日復(fù)一日地處理著難以捉摸或者棘手的任務(wù)”,F(xiàn)acebook的工程師Julien Verlaguet和Alok Menghrajani在最近的公司博客上寫道。
但是,PHP并沒離開Facebook,并且其他的大公司和工程的數(shù)百萬行代碼都是用這個語言寫的。程序員們?nèi)匀坏靡嬗赑HP的快速開發(fā)和部署,且努力去除那些不好的特性。
減輕PHP程序員的痛苦不是說拋棄這個語言和多年的開發(fā)成果。Facebook開發(fā)了Hack,這是一種新的,派生于PHP的語言。它將與已有的代碼和諧相處,增強(qiáng)了安全特性源于函數(shù)式編程語言和學(xué)術(shù)研究。
“這是一種很特別的設(shè)計,能與PHP進(jìn)行無縫的交互”,Verlaguet說。技術(shù)***著Hack項目的發(fā)展,它的背后是一份混合編程語言和行業(yè)經(jīng)驗(yàn)的正式學(xué)術(shù)研究。Facebook已經(jīng)在內(nèi)部使用和發(fā)展Hack大概有兩年時間了。最近,已經(jīng)將項目開源,并且在4月9日安排公開的“開發(fā)者日”。
“我們這樣做的目的是希望能更好地傾聽來自社區(qū)的反饋, 同時開源社區(qū)也會讓Hack面對Facebook外的開發(fā)者有更好的體驗(yàn)”,Verlaguet說。
也許Hack的主要創(chuàng)新是引入了自動類型判斷,概念類似于深奧難懂的Haskell和 ML語言但是比他們少得多的命令行,同時更接近主流的編程語言。
傳統(tǒng)的PHP是動態(tài)類型,這意味著在代碼中的基本的本質(zhì)的變量類型是一個數(shù)還是一個字符串或者其他類型是不確切的,除非程序?qū)嶋H運(yùn)行著。程序員們享受這種靈活,卻為錯誤開辟了空間,它不像Java或者C那樣的靜態(tài)類型語言,代碼被寫出來的時候就明確告訴你變量的類型。
Hack走了一條中間路線:它可以基于變量怎樣被使用的使用邏輯讓開發(fā)者指定類型,如果代碼的邏輯沖突,就會給出一個錯誤(error)。這個概念本身不是新的,但是它以前都是被用在編譯型語言上的,開發(fā)者需要等待他們的源代碼被轉(zhuǎn)換成機(jī)器碼,不能像PHP程序員希望的那樣點(diǎn)完保存立即執(zhí)行,Verlaguet說。
“解決方案在于建立了一個類型檢查守護(hù)進(jìn)程”,他說。關(guān)于這個后臺程序運(yùn)行在開發(fā)者的電腦里。它代替等待開發(fā)者去顯示調(diào)用一個編譯器,當(dāng)源代碼文件被改變的時候,類型檢查進(jìn)程要求操作系統(tǒng)去通知編譯器。這類似于同步文件需要更新時,Dropbox就得到一個信號。
被改變檢查的有效的方法是通過類型檢查器被反復(fù)檢測,直到其確認(rèn)與其他的代碼是一致的。只要類型檢查器足夠快,程序員基本就不需要等待,類似于在Git版本管理系統(tǒng)上轉(zhuǎn)換到新分支那樣,Verlaguet說。
Hack還有其他一些特性,增強(qiáng)的集合類型如vector和set來增強(qiáng)PHP的數(shù)組,匿名函數(shù)被使用在函數(shù)編程上。新的語言讓Facebook逐步提升已有的PHP代碼,使得長期投資在PHP上的價值繼續(xù)發(fā)揮作用, Ed Smith說,F(xiàn)acebook的HHVM運(yùn)行引擎將會同時提供給Hack和PHP。
“Hack 讓我們能在同一時間和同一文件上動態(tài)轉(zhuǎn)換我們的代碼”,Smith說,“換做其他的一種語言將會有很大的困難”你認(rèn)為是嗎?
其他的公司和工程轉(zhuǎn)換到時髦的Hack還為時尚早,項目剛剛開源,Verlaguet說。不過,從對他采訪的記錄來看,整個項目目前是處于積極的態(tài)勢中。
英文原文:fastcolabs
譯文鏈接:http://www.oschina.net/news/50565/why-facebook-invented-a-new-php-derived-language-called-hack