18.04bionicにHHVMを入れて試してみる

$ sudo apt install hhvm
$ hhvm –version
HipHop VM 3.21.0 (rel)
Compiler: 3.21.0+dfsg-2ubuntu2
Repo schema: ebd0a4633a34187463466c1d3bd327c131251849

$ echo ‘‘ >/tmp/hello.php
$ hhvm /tmp/hello.php
Hello HHVM

echo "hello world!";

$ hhvm hello.php

Fatal error: /home/vagrant/hhvm/hello.php appears to be a Hack file, but you do not appear to be running the Hack typechecker. See the documentation at http://docs.hhvm.com/hack/typechecker/setup for information on getting it running. You can also set `-d hhvm.hack.lang.look_for_typechecker=0` to disable this check (not recommended).

サイトを見ます。
getting-started

$ touch .hhconfig
$ hhvm hello.php
Warning: Hack typechecking failed: server not ready. Unless you have run “hh_client” manually, you may be missing Hack type errors! Once the typechecker server has started up, the errors, if any, will then show up in this error log.
hello world!

とりあえずHHVMの環境つくって動かしてみました ってところより先の記事が少ない。PHP7.0以上が高速になったので、みんな様子見ってところか。

HHVM/Hack

PHPは、ZendEngineというインタプリタエンジンを使って動いている

インタプリタの挙動
1. テキストファイルを読み込む(IO処理)
2. ソースコードをパースしてopcodeに変換(CPU処理)
3. opcodeを順番に実行

Opcacheを用いることで一度変換したopcodeをメモリ上に載せておき、2回目以降の処理はメモリにキャッシュされたopcodeを取り出して実行する

opcodeは中間言語の為、cpuやosなど実行環境に応じて実行される。その為、JavaやCなどのコンパイル言語よりも実行速度が遅い
c++やgolangは最初のコンパイルで機械語まで変換する

### Hip Hop Virtual Machine
PHPやHack言語をx64CPU向けにJITコンパイルするvirtual machine。つまり、Zend Engineで実行する代わりにJITコンパイルして実行する
HHVMはFacebook開発
HHVMはPHP7からは非推奨だが、Hack言語のサポート

### Hack言語
PHPに静的型付け機能を追加し、HHVMに最適化
開始するタグが < ?php ではなく < ?hhで、HTMLに埋め込む形ができない Hackは非同期機能をサポート Wikipedia, baiduなどが採用 PHPフレームワークやライブラリが使えない? -> Codeigniter, cake, laravel, Yiiなど動作する

### Hack言語の機能
Generic(型をパラメータとして与え、型だけ違って処理の内容が同じものを作るときに使う)
Map(keyとvalueをset) / Vector(順番に値を保持) / Set(重複不可) / Pair(2つの値をセット)
Enum(値を列挙)
async, awaitで並列実行
hh_client(実行前に構文チェック)