HipHop虛擬機(HHVM)和Hack(語言這兩項新的技術已經成功應用在Facebook網站上。那么我們又如何能從中獲益呢?
通過本書的學習,來自Facebook“Hack與HHVM”團隊的核心成員OwenYamauchi,將帶你領略這久經考驗的開源工具的魅力。
你將領略到Hack(語言所特有的靜態類型檢查及其他新特性。正是這些特性將Hack(和PHP有效區分。同時,你還可以學到HFIVM的建立、配置、部署以及日常監測。對于已有PHP或其他編程語言開發經驗的人來說,這是比較容易學習和掌握的。歐文·山內編寫的本書還將演示如何在已有的PHP項目或者新的類似項目上使用這些工具。
在Facebook公司的大部分發展歷程中,每隔幾個月就會舉辦“黑客馬拉松(hackathons)”活動,活動的目的在于鼓勵工程師們碰撞出好的想法,而這些好的想法并不是和他們的日常工作相關的,他們自由組隊,然后在一兩天的時間內做出一些非常有意思的事情。在2007年11月的一次“黑客馬拉松”活動上,誕生了一個非常有意思的實驗:一個工具能夠將PHP程序轉化為C++程序,然后還能夠用C++編譯器進行編譯。想法是C++程序將會比PHP原生的程序運行起來快很多,因為它可以得益于多年以來對C++編譯器的大量優化工作。
對于Facebook來說,這種可能性是非常有趣的,因為公司增加了大量新的用戶,而支持更多新的用戶需要耗費大量的CPU運算周期。所以當你耗盡所有可用的CPU運算周期后,除非你耗費大量財力購買更多的CPU,用來支持日益增多的用戶所帶來的CPU運算能力的需求,否則你必須尋找一個方法來降低每個用戶的CPU消耗。由于Facebook整個網站的前端都是用PHP語言編寫的,所以任何使PHP代碼耗費更少CPU運算周期的新技術都受到歡迎。
在接下來的7年時間里,這個項目的發展遠遠超出了最開始在“黑客馬拉松”中的起點。PHP到C++的轉換器稱為HPHPc,在2009年的時候它成為支撐Fackbook網頁業務唯一的服務器端引擎。在2010年年初,它以“HipHopforPHP”的名字開源了。然后從2010年起,一個全新的方法用來執行——即時編譯為機器代碼,并沒有C++牽扯其中一一脫胎換骨于HPHPc的代碼庫,并最終取代它。這個即時的編輯器稱為“HipHop虛擬機”,簡稱為HHVM,并且在2013年的早期徹底取代了Facebook的網站服務器集群。早期的PHP到C++的轉換器消失了,它沒有在任何地方進行部署,同時它的代碼都被刪除了。
而Hack的起源是完全分開的,其根源在于試圖在PHP中使用靜態分析以自動探測潛在的安全漏洞的一個項目。很快,事實證明,PHP的本質使得它在非常有用的靜態分析方面很難有所進展。于是“嚴格模式(strictmode)”的想法就誕生了。對PHP進行修改,增加一些新的特性,比如引用、刪除和添加一個補充的復雜類型系統。PHP代碼的作者可以自由選擇是否使用嚴格模式,在保持完整的互操作性同時,獲得更加強大的代碼檢查能力。
Hack的方向從那時開始就作為基于PHP的類型系統掩蓋了其本質。它在構建Hack編碼的道路上獲得了很多有重大影響的新特性,比如異步函數。它添加了很多包括集合在內的新特性,使得類型系統更加強大。本質上來說,它是一門和PHP不同的新語言,它已經在編程語言方面取得了自己的新位置。
以上就是Hack的發展歷程,目前Hack是一門現代化的動態編程語言,它擁有魯棒的靜態類型檢查能力,在HHVM上執行。HHVM是一個和PHP無縫兼容且具有互操作性的實時編譯運行時引擎。
查看全部↓
Owen Yamauchi,一名就職于Facebook“Hack與HHVM”團隊的軟件工程師。在2009年就職于Facebook公司前,他曾經在蘋果公司擔任軟件工程師,還曾經在VMware公司實習。
序
前言
第1章 類型檢查
1.1 為什么使用類型檢查器
1.2 設置類型檢查器
1.3 類型標注語法
1.4 Hack的類型系統
1.5 規則
1.6 類型推理
1.7 類型提煉
1.8 運行環境中的類型標注的執行
第2章 泛型
2.1 入門實例
2.2 其他泛型實體
2.3 類型消除
2.4 約束
2.5 重溫未決的類型
2.6 泛型和亞型
2.7 進階:協變和逆變
第3章 Hack的其他特性
3.1 枚舉
3.2 類型別名
3.3 數組形狀
3.4 拉姆達表達式
3.5 構造函數參數升級
3.6 屬性
3.7 加強的自動加載
3.8 整數算術溢出
3.9 nullsafe方法調用操作
3.10 trait和接口的必要條件
3.11 隱藏類型檢查器錯誤
第4章 在Hack中不支持的PHP特性
4.1 引用
4.2 舊式風格構造器
4.3 不區分大小寫的名稱查找
4.4 可變變量
4.5 動態屬性
4.6 混合方法調用語法
4.7 isset、empty和unset
4.8 其他
第5章 集合
5.1 為什么使用集合
5.2 集合擁有引用語義
5.3 使用集合
5.4 集合類型標注
5.5 與數組互操作
第6章 異步
6.1 入門實例
6.2 異步細節
6.3 構建異步代碼
6.4 其他類型的等待
6.5 常見錯誤
6.6 異步擴展
第7章 XHP
7.1 為什么使用XHP
7.2 如何使用XHP
7.3 創建你自己的XHP類
7.4 XHP佳實踐
7.5 遷移到XHP
7.6 XHP內部原理
第8章 配置和部署HHVM
8.1 指定配置選項
8.2 服務器模式
8.3 JIT熱身
8.4 repo-authoritative模式
8.5 管理服務器
第9章 hphpd:交互式調試器
9.1 開始入門
9.2 代碼執行
9.3 執行環境
9.4 使用斷點
9.5 查看代碼和文檔
9.6 宏
9.7 配置hphpd
第10章 Hack工具
10.1 檢查代碼庫
10.2 遷移PHP代碼到Hack
10.3 編譯Hack代碼到PHP代碼
查看全部↓