こんにちは。HHVMアーキテクチャの深淵を日々覗き込んでいる、Hackのチーフアーキテクトです。
PHPの「なんでも入る配列」に慣れ親しんだ皆さんが、Hackの門を叩くとき、最初にぶつかる壁が「コレクション型」です。しかし、この壁こそが、あなたの書くコードを「動くだけのコード」から「信頼できる強固なシステム」へと進化させる最初のステップになります。
今回は、Hackが誇る3つの最強の武器、`vec`、`dict`、`keyset`について、その本質を紐解いていきましょう。
—
なぜPHPの「配列」ではいけないのか?
PHPの配列は、連想配列であり、リストであり、スタックであり、キューでもあります。自由で魅力的ですが、その代償は「型安全性の喪失」です。
// PHPの悪夢:型が混在し、中身を予測できない
$data = [‘id’ => 1, ‘name’ => ‘Alice’, ‘roles’ => [‘admin’, 123]];
この `$data` を受け取った関数は、常に「キーが存在するか?」「中身は文字列か?数値か?」をチェックし続けなければなりません。これではランタイムエラーが起きるのを待っているようなものです。
Hackのコレクション型は、この「曖昧さ」をコンパイル時に完全に排除します。
—
Hackの3つの武器:vec, dict, keyset
Hackでは、用途に応じてこれらを明確に使い分けます。これらはPHPの配列とは異なり、実行時にメモリレイアウトが最適化されるため、パフォーマンスも非常に高いのが特徴です。
1. vec (可変長リスト)
順序付きのデータの集合です。PHPの「添字配列(0から始まるインデックス)」に近いですが、型が固定されます。
<<__EntryPoint>>
function main(): void {
// vec
vec
// $numbers[] = ‘a’; // これはコンパイルエラー!
foreach ($numbers as $n) {
echo $n . “\n”;
}
}
2. dict (連想配列)
キーと値のペアです。`vec` と決定的に違うのは、キーが整数または文字列である必要がある点です。
// dict
dict
‘name’ => ‘Alice’,
‘email’ => ‘alice@example.com’,
];
3. keyset (値のみの集合)
「重複しない値」の集合です。特定の要素が含まれているかを確認する(`contains`)操作が極めて高速です。
keyset
if ($roles->contains(‘admin’)) {
// 高速な判定
}
—
初心者が陥りやすい「罠」
Hackを始めたばかりの方がよく躓くポイントを、アーキテクトの視点から解説します。
その1:型推論を過信しすぎない
Hackは強力な型推論を持っていますが、関数の引数や戻り値には、必ず明示的に型を書くようにしてください。
// ダメな例:型が曖昧
function process($data) { … }
// 良い例:厳格な型定義
function process(vec
明示的な型は、他の開発者(そして未来のあなた自身)への最強のドキュメントになります。
その2:不変性(Immutability)を意識する
Hackのコレクションは、デフォルトで非常に扱いやすい性質を持っています。PHPのように「参照渡しで意図せず中身が書き換わる」といったバグが起きにくい設計です。新しい値が必要なときは、元のコレクションを破壊するのではなく、新しいコレクションを生成する意識を持ちましょう。
—
HHVMがこれらを愛する理由
ここからは少しだけアーキテクチャの話をしましょう。
PHPの配列はハッシュテーブルとして実装されており、非常に柔軟ですがメモリ効率はあまり良くありません。一方、Hackの `vec` は、内部的に連続したメモリ領域として確保されることが多いです。
型チェッカーが「これは `vec
つまり、型を厳格に守ることは、あなたのコードを速くすることに直結しているのです。
—
最後に:型安全という「自由」を手に入れよう
「厳格なモード(Strict Mode)は堅苦しい」と感じるかもしれません。しかし、コンパイル時に型チェッカーがエラーを指摘してくれることは、「実行時に発生する未知のバグ」という恐怖から解放されることと同義です。
まずは、既存のPHP配列を `vec` や `dict` に置き換えることから始めてみてください。型チェッカーが警告を出すたびに、「ああ、ここがバグの温床だったのか」と気づけるはずです。
ここをクリアすれば、あなたはもうHackの基礎をマスターしたも同然です。さあ、より安全で、より高速なコードの世界へ飛び込みましょう!
もし分からないことがあれば、いつでもHHVMのドキュメントを開いてください。そこには、世界中のエンジニアが辿り着いた「最適解」が待っていますよ。