• ベストアンサー

PHPの中間コード

中間コードは、Java等だと配布先でもVMで実行可能になるようなメリットはあると思います。 ただ、PHPなどは中間コードの配布がまず無い言語だと思うのですが、なぜ生成するのでしょうか。 実行までのステップが無駄に増えるだけの気がしています。 単純に考えると、中間コード無しで実行可能な機械語を生成するのが効率的なように思えてしまいます。 きっと理由があると思うのですが・・。 わかる方がいらっしゃいましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

究極には「設計者がそれがいいと考えたから」なんですが。 テキストのソースを解釈する、という作業は、どんな言語でも必ず行ってます。そこに書かれている単語が変数なのか関数なのか只の間違いか、括弧の対応がどうなっていて、実行順序はどうすればいいのか、といったことです。 このときに、処理しやすいように内部で独自のデータ形式にするのが一般的です。これが「中間コード」「中間言語」になります。 生成された中間コードをさらの処理していくことでプログラムを実行します。 中間言語をそのまま実行するための処理系を使うものもありますし、そのような処理系も持たずに機械語で単独に動かせる状態にまで変換するものもあります。 中間コードを外部に出力するか/内部処理だけに使うか、は、その言語の設計思想によるものであって、出力しないなら作らなくてよい、というものでもありません。 これらを、どのタイミングでどこまで行うか、ですが ・実行時に1命令ずつ ・実行時に最初にまとめて ・実行前に予め中間形式まで/実行時には行わない ・実行前に予め最終形式まで/実行時には行わない 等があり、下へいくほど実行時の効率はよくなりますが、準備にかかるコストや実行時の制限やリスクが大きくなります。 で、PHPは、手軽さと効率/リスクのバランスを考えて ・スクリプトのまま実行する ・効率を考えて、最初にまとめて中間コードに変換 ・中間コードをそのまま実行できる処理系を用意 ・中間コードは出力しない というのがよい、と開発時に決めたのでしょう。

maenoina
質問者

お礼

なるほど。もやもやしていましたが、理解できました。。 いろいろネット上を調べてみたのですが、よくわからなくて困っていました。ありがとうございます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

中間コードをキャッシュする拡張モジュールがあります。 http://rs78.oissu.net/sel/php/php.html これを使用すれば、実行のたびにコンパイルする手間が省けます。

maenoina
質問者

補足

いえ、質問の意図として、そもそも仕組みとして 「なぜPHPで中間コードが必要なのか」 というものでした。

関連するQ&A