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