2014年9月25日 星期四

HHVM 及 Hack 的相容性

最近筆者開始嘗試 HHVM 應用於 Production 環境,一些心得如下:


1. Linux

現有的 Linux Distribution 幾乎都有 pre-built 套件,可直接安裝,就算要自行編譯也沒有太大的問題。 Facebook 的 HHVM Team 主要都還是 Focus 在 Linux Server 上的相容性。在 Linux 平台上編譯,可參考官方的 WIKI 文件


2. Mac OS X

Mac OS X 上 HHVM 的相容性比以往提昇許多,過去要自行 patch 許多套件編譯,現在只需要 patch jemalloc 即可。且幾乎所有相依套件皆可用 Homebrew 或 Macports 安裝。

目前 HHVM 的版本 HHVM 3.2 確定可於 Mac OS X 上編譯,只不過需透過 GCC 4.8 而非 Mac OS X 內建的 clang,相依的 Boost 套件也需由 GCC 4.8 編譯才行。

至於 master branch 目前 third-party 的 folly package 由於使用了 Linux 上的 Futex,因此目前唯一可在 Mac OS X 上編譯的版本就只剩 3.2。 不過也有人開始了 Mac OS X 平台上的編譯修正,可參見 @mcuelenaere 的 HHVM osx-fixes 分支,以及 @bsampathfolly 修正

至於 3.2 版本 Mac OS X 上的編譯步驟,可參考此處


3. Hack Programming Language

至於 Facebook 的 Hack programming language 幾乎與 PHP 相容,原本的 PHP source code 只需要修改標頭,將 <?php 改為 <?hh 即可當做 Hack 執行,因此由 PHP 換用到 Hack 幾乎是無痛轉移。

至於使用 Hack 有何好處?一來是提供型別檢查,方便開發時及早發現問題,二來依照型別資訊可大幅提昇 VM 效能,三來可以提供準確的自動補齊並與編輯器或 IDE 做整合。

Hack 的剖析工具是用 OCaml 寫的,可直接和 IDE 整合,如 Vim plugin 有 vim-hack (https://github.com/hhvm/vim-hack) 可使用。Emacs 則有 hack mode 可用 (https://github.com/facebook/hhvm/tree/master/hphp/hack/editor-plugins/emacs)。

待續