yuchimiriのブログ

ぺちぱーです。

『Facebook発 新プログラミング言語「Hack」スタートアップガイド』でHackをはじめてみた

ご無沙汰してます。@yuchimiriです。元気です。

先日、技術評論社からプログラミング言語 Hack のスタートアップガイドが発売されました。

世界初の解説書となるこちらを大変ありがたいことにご恵贈いただいたので、簡単にですが感想など書いてみたいと思います。ブログってものすごく久しぶりなんだけど、どういうふうに書いてたっけ〜ドキドキするなー!

Hackとは?

Hackは、PHPと互換性のあるHHVMFacebookが開発しているPHP用のJITコンパイラ)向けのプログラミング言語です。
2014年3月20日にオープンソースとして公開されました。

こちらの本はHackの公開後、なんと1週間足らずで執筆されたらしいです。感服の一言。

全体を通しての感想

約90ページに渡り、Hack言語についての簡単な紹介と、インストール手順(Ubuntu環境)からPHP→HHVMへの移行手順まで、幅広い内容がコンパクトに纏められていて非常にわかりやすかったです。
中身は主にシンプルなサンプルコードを用いた説明で構成されていて、実際に手を動かしながら自然に覚えることができました。
また、普段PHPを触っているとあまり馴染みのないGenericsや、Collection、Override Attributeなどの機能についての解説も盛り込まれていてHackの特徴がつかめる一冊になっています。

Hackを触ってみての感想

PHPとほぼ変わらない構文で組むことができるので、かなりとっつきやすい印象です。
一方で、エラーチェックのための静的な型付けなどの機能を兼ね備えていて、PHPぽいのになんだか安心感のある不思議な言語だなと思いました。

ためしてみた

紹介されているサンプルコードは半日で試せるくらいの量になってます。入門にはぴったりですね。
以下は色々触ってみたログになりますのでおまけ的に。

まず1章を参考に、HHVMを動かしてみます。
手元の環境がDebian7だったので公式wikiを参考にDebian7の手順でインストールしました。
Debian7だとビルド済みのパッケージでインストールできたので、震えるほど楽ちんです。

wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb http://dl.hhvm.com/debian wheezy main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm

インストールが環境したら hhvm --version コマンドを叩いてバージョンをチェックします。

yuchimiri@xxxxx:~$ hhvm --version
HipHop VM 3.0.1 (rel)
Compiler: tags/HHVM-3.0.1-0-g97c0ac06000e060376fdac4a7970e954e77900d6
Repo schema: a1146d49c5ba0d6db903beb3a4ed8a3766fef182

現在のバージョンは3.0.1になってました。

HHVMの実行方法はCLIでファイル指定デーモンモードで起動する2種類があるらしいですが、とりあえず簡単そうなのでCLIで試してみます。
ちなみに実行時に -m debug という引数を指定するとhphpdというデバッガが起動して、ステップ実行とか出来ました。便利。

yuchimiri@xxxxx:~/work/hack$ hhvm -m debug test.hh
Welcome to HipHop Debugger!
Type "help" or "?" for a complete list of commands.

Program test.hh loaded. Type '[r]un' or '[c]ontinue' to go.
hphpd> break test()
break test()
Breakpoint 1 set upon entering test()
But wont break until function test has been loaded.
hphpd> step
step
Break on line 7 of /home/yuchimiri/work/hack/test.hh
   6
   7*test();
   8 (END)

hphpd> step
step
Breakpoint 1 reached at test() on line 3 of /home/yuchimiri/work/hack/test.hh
   2 function test(): void {
   3*    $hoge = 'hoge';
   4     echo $hoge;

hphpd> step
step
Break at test() on line 4 of /home/yuchimiri/work/hack/test.hh
   3     $hoge = 'hoge';
   4*    echo $hoge;
   5 }

hphpd> step
step
hogeBreak at test() on line 5 of /home/yuchimiri/work/hack/test.hh
   4     echo $hoge;
   5*}
   6

hphpd> step
step
Break on line 7 of /home/yuchimiri/work/hack/test.hh
   6
   7*test();
   8 (END)

hphpd> quit
quit

2章はHack言語で特徴的な構文について紹介されていて、静的型付け、null許容、Generics、Collection等について理解を深めることが出来ました。

3章はHackで書いた簡単なプログラムをブラウザで出力するという内容でした。
Webサーバはnginx使ったけど、これも簡単に設定できて試せたので楽しかった!
f:id:yuchimiri:20140403000126p:plain
HHVMで動作してると、phpinfo();HipHopって出力されるんだって。

実際に動いているPHPコードをHHVMで動かしてみるのもやってみたいなー。