プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

究極には「設計者がそれがいいと考えたから」なんですが。



テキストのソースを解釈する、という作業は、どんな言語でも必ず行ってます。そこに書かれている単語が変数なのか関数なのか只の間違いか、括弧の対応がどうなっていて、実行順序はどうすればいいのか、といったことです。
このときに、処理しやすいように内部で独自のデータ形式にするのが一般的です。これが「中間コード」「中間言語」になります。

生成された中間コードをさらの処理していくことでプログラムを実行します。
中間言語をそのまま実行するための処理系を使うものもありますし、そのような処理系も持たずに機械語で単独に動かせる状態にまで変換するものもあります。

中間コードを外部に出力するか/内部処理だけに使うか、は、その言語の設計思想によるものであって、出力しないなら作らなくてよい、というものでもありません。

これらを、どのタイミングでどこまで行うか、ですが
・実行時に1命令ずつ
・実行時に最初にまとめて
・実行前に予め中間形式まで/実行時には行わない
・実行前に予め最終形式まで/実行時には行わない
等があり、下へいくほど実行時の効率はよくなりますが、準備にかかるコストや実行時の制限やリスクが大きくなります。



で、PHPは、手軽さと効率/リスクのバランスを考えて
・スクリプトのまま実行する
・効率を考えて、最初にまとめて中間コードに変換
・中間コードをそのまま実行できる処理系を用意
・中間コードは出力しない
というのがよい、と開発時に決めたのでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/11 00:48

中間コードをキャッシュする拡張モジュールがあります。


http://rs78.oissu.net/sel/php/php.html
これを使用すれば、実行のたびにコンパイルする手間が省けます。

この回答への補足

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

補足日時:2011/04/08 14:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!