PHP処理系の一覧

PHPの処理系について調べてみたところ、想像以上にたくさんあることがわかりました。マイナーなPHP処理系に興味を持った人のために、一覧形式で紹介します。また、他の処理系をご存じの方のタレコミをお待ちしております。

# 公式処理系

## [PHP](http://php.net/)

実装言語はC。Windowsを含む全てのプラットフォームに対応しており、実行可能バイナリの形でビルドできる(CLI・CGI・ビルトインサーバ）。また、ApacheモジュールやFastCGIを受け付けるデーモン（PHP-FPM）などの形でも動作する。

http://php.net/

# その他の処理系（PHPコードがそのまま動くもの）

## [HHVM](http://hhvm.com/)

Facebook製のPHP実行環境。実装言語はC++。JITコンパイルによる高速化が特徴。現時点ではx64 Linux環境がメインターゲットで、MacではJITコンパイラが動かない模様。FastCGIを受け付けるWebアプリケーションサーバとして動作する。また、コマンドラインからPHPプログラムを実行することもできる。

http://hhvm.com/

## [Quercus](http://quercus.caucho.com/)

JVM上で動作するPHP実行環境。もちろんJavaで書かれている。開発元はresinで有名なCaucho Technology社で、長期間メンテナンスされている。互換性も一定以上のようで、商用環境でも採用事例がある模様。

http://quercus.caucho.com/

## [Phalanger](http://www.php-compiler.net/)

.NET環境で動くPHPコンパイラ＋ランタイム。C#で書かれており、PHPソースコードから.NETアセンブリを出力する。本家PHPより高速に動作するだけでなく、PHPをVisualStudioで開発したり.NETの資産を利用したりする狙いもあるようで、かなり夢が広がる。開発者がDEVSENSE社を起業して有償サポートを提供しているが、このところ開発が停滞しているように見える。

http://www.php-compiler.net/

## [KPHP](https://github.com/vk-com/kphp-kdb)

HHVMより高速に動作するというPHPからC++へのコンバータ。C/C++で書かれている。開発元はロシア最大のSNSを運営するВКонтакте社。情報が少なすぎるのが難点か。

https://github.com/vk-com/kphp-kdb
## [HippyVM](http://hippyvm.com/)

実装言語はPython。PyPyを利用してJITコンパイルを行う。コードによってはHHVMより高速に動作する。現時点ではx64 Linux上でしか動作せず、PHP本家との互換性も低い。開発元のBaroque Software社はPyPy開発者を含む少数精鋭の会社のようで、このプロジェクトに力を割く気はあまり無さそうに見える。

http://hippyvm.com/

## [JPHP](https://github.com/jphp-compiler/jphp)

Javaで書かれたPHP実行環境。PHPソースコードを実行時にJavaバイトコードにコンパイルする。PHP本家との互換性はそこまで高くないが、他の処理系と比べても高速なのが特徴である。ロシア人の開発者一人で開発しているようで、プロジェクトとしては先行きが怪しいと言わざるを得ないだろう。

https://github.com/jphp-compiler/jphp


## [ePHP](https://github.com/altenwald/ephp)

Erlangで書かれたPHP処理系。パッと見で互換性も低そうだけど、Erlangというだけでロマンがあって良い。誰か試した人がいたら感想をください。

https://github.com/altenwald/ephp

# その他の処理系（PHPコードの修正が必要なもの）

## [Hack](http://hacklang.org/)

FaceBookが開発したPHPによく似た言語で、HHVM上で動作する。基本はPHPなのだが、厳密な型やジェネリクスが導入されたりしている。型を厳密に指定すればするほどJITコンパイルで性能が稼げるということなのだろう。元のPHPソースコードがマトモなら移植は簡単そう。

http://hacklang.org/

## [Zephir](http://zephir-lang.com/)

PHPに似ているようでそれほど似ていない言語。Zephirで書いたソースコードを元に、PHPエクステンションのソースコード（C言語）を出力する。重い処理をZephirで書いてエクステンションを組み込めばPHPから呼び出せる。既存PHPソースコードからの移植はやや面倒そうな印象。

http://zephir-lang.com/

## [PHP QB](http://php-qb.net/)

PHPの一部の関数をネイティブコードとして実行するようなPHPエクステンション。関数のアノテーション部に引数や返り値の型を書き、PHPのサブセットのような言語で記述することで、その関数がネイティブコードとして実行される。そもそも重い画像処理を高速化するような意図のようで、汎用性は低そう。

http://php-qb.net/

## [Recki-CT](https://github.com/google/recki-ct)

PHP製のPHPコンパイラ。PHPソースコードを[PHP-Parser](https://github.com/nikic/PHP-Parser)で構文解析し、PHPのlibjit実装である[Jit-Fu](https://github.com/krakjoe/jitfu)を内部的に呼び出し、元のPHP関数に対応するJit-Fu関数を動的に構築する。呼び出す関数のソースコードはそのまま利用できるが、呼び出し元のソースコードを書き換えるような使い方になる。

https://github.com/google/recki-ct

# 既に停止しているプロジェクト

## HipHop

Facebook製のPHPソースコードコンバータ。PHPソースコードをC++コードにコンバートする。HHVMにリプレースされた。

## [phc](http://www.phpcompiler.org/)

C++で書かれたPHPコンパイラ。実行バイナリおよびPHPエクステンションのCソースコードを出力できる。最終リリースは2011年の0.3.0.1。

ASTを作るのに[maketea](https://code.google.com/p/maketea/)を利用している。実行バイナリは自前では作れないと思うが、どうやってるのかは調査中。

http://www.phpcompiler.org/

## ["Classic" Roadsend PHP](http://www.roadsend.com/)

実装言語はCとScheme。INRIAで開発されたScheme処理系[Bigloo](http://www-sop.inria.fr/mimosa/fp/Bigloo/)を使って実行バイナリを出力する。商用に利用したりphpBBが動いたりしていたらしいので、一定の完成度だと思われる。

http://www.roadsend.com/

## [Roadsend PHP Raven](https://github.com/weyrick/roadsend-php-raven)

Roadsend PHPの作者がLLVMベースのPHPインタプリタ・JITコンパイラを実装しようとしたもの。実装言語はC++。HipHopのリリースを見て開発を中止した模様。

https://github.com/weyrick/roadsend-php-raven

## [PHP-to-Scala Migration Helper](https://code.google.com/p/php-to-scala-migration-helper/)

PHPからScalaへのコンバータ。開発は2010年で止まっている模様。

https://code.google.com/p/php-to-scala-migration-helper/

## [PHPPHP](https://github.com/ircmaxell/PHPPHP)

PHPで書かれたPHP処理系。[PHP-Parser](https://github.com/nikic/PHP-Parser)で構文解析してインタプリタ実行する。速度も互換性も実用レベルではないが、実装としては興味深い。

https://github.com/ircmaxell/PHPPHP

## [Pipp](https://github.com/bschmalhofer/pipp/wiki)

Parrot上のPHP実装。2009年で開発が止まっている。

https://github.com/bschmalhofer/pipp/wiki

## P8

IBMのWeb開発環境・実行環境であるWebSphere sMashが内蔵していた独自実装のPHP実行環境。Java製。sMashの無償コミュニティ版であるProject Zeroがドメインごと死んでおり状況不明。そもそも単体で取り出せたのかどうかも不明。