新言語HackとHHVM
PHPの上位互換(?)、新言語Hackを弄ってみた。
新言語Hackとは
PHPer必見!最強PHPerになれると噂の「新言語Hack」を試してみよう! | 株式会社LIG
こちらの記事が分かりやすかったので抜粋させていただきます。
- Facebook製の新言語
- HHVM(実行環境)上で動作
- PHPと互換性アリ
- 静的型付言語
- PHPには無い機能を持つ
- Generics
- Nullable Type
- Collection
- Lambda
- Async
- Await
- Tuple
- Override Attribute
- Type aliasing
文章で補足すると、
PHPを開発言語としていたFacebookがパフォーマンスを上げるために新しい言語を開発した。
新しい言語とPHPの間には、一部ずつ置き換えていけるよう互換性を持たせた。
何が違うのかというと、HHVM上で動作すること(HHVMはPHPの実行環境よりも早い)、PHPには無い機能を持っていることである。
といった感じです。
あれ?Hack?HHVM?
僕の場合、パッと読んだ感じだと、どうしても実行速度が速いんです!という点に目が行ってしまい、HackはPHPよりも速くて、それはHHVMのおかげで、HackはHHVM上で動いて。。。
あれ?
HHVMが早いのであってHackは速くない?
といった具合に混乱してきたので手を動かしてみました。
とりあえずインストール
$ yum -y install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm $ yum -y upgrade $ cd /etc/yum.repos.d/ $ wget http://www.hop5.in/yum/el6/hop5.repo $ yum install -y hhvm
PHPer必見!最強PHPerになれると噂の「新言語Hack」を試してみよう! | 株式会社LIG
参考記事ではHHVMのインストール時にエラーがあったとありますが、僕の環境では大丈夫でした。
ウ●コードを書く
実行時間を測るため、何も考えずにウ●コードを書く。
友達に見せたら「最適化が(中略)正しいベンチマークは測れないよ!」って言われたけど、結果が出たからまあ良しとする。
(良い友だちを持ったわ。。。)
PHPとHackのコードを書くんですが、以下の通り、先頭の
<?php
を
<?hh
とするだけの高互換性です。
PHPのコード
<?php $N = 1000000000; $time_start = microtime(true); $x = 0; for($i = 0; $i < $N; $i++) { $x++; } $time_end = microtime(true); $time = $time_end - $time_start; print("$time\n");
Hackのコード
<?hh $N = 1000000000; $time_start = microtime(true); $x = 0; for($i = 0; $i < $N; $i++) { $x++; } $time_end = microtime(true); $time = $time_end - $time_start; print("$time\n");
実行結果
実行結果はコチラ。
数字の単位は秒です。
$ php php_time.php 92.892948150635 $ hhvm php_time.php 6.9471001625061 $ hhvm hack_time.hh 6.3032808303833
HHVM様様ですね。
PHPの実行環境さんごめんなさい。。。
この結果を見ると、同じHHVM上でもPHPよりHackが若干速いように見えますが、誤差の範囲でした。
ということで、Hackの速さの大部分はHHVMの恩恵であることが分かりました。
もちろん、Hackが静的型付言語であることやPHPには無い機能を持っていることを考慮したコードを書けば、更に速度を上げることも可能だと思います。
トーシローな僕は、とりあえずPHPの実行環境をHHVMに置き換えればいいんじゃないの?とか思ってしまうのですが、どうなんでしょうか。
まとめ
- HHVMは速い
- 新言語Hack=HHVM上で動くPHPの上位互換言語