めのん@ひとりプログラミング同好会

このブログはすべてフィクションであり、実在の人物、団体とは一切関係ありません

プログラムを動的に書き換えながら実行できるんですね!

こんばんは、めのんです!

タイトルには何のプログラミング言語の話か書きませんでしたが、今回はPHPの話です。 このブログの現在のタイトルは「めのん@PHP猛勉強中!!」なのでPHPがデフォルトですよー

私はCやアセンブリ言語マイコンのプログラムを書くことが多いので、RAM上のプログラムを書き換えながら実行するといったことをやることがあります。 でも、これって機械語レベルでプログラムを扱わないといけませんし、キャッシュメモリーがある場合は書き込んだ内容を明示的にデータキャッシュをライトバックして命令キャッシュを無効化してといった操作が必要になります。 早い話がかなり高等テクニックなんです。

もっと大きなプログラムを書き換える場合、たとえば圧縮したプログラムをRAMに展開するようなことをやりたいなら、リンク時にもいろいろ配慮しないといけないことがあります。 さらに、リンク済みのオブジェクトファイルをいったんバイナリデータに変換してから再度ロードモジュールに変換するなどの操作が必要になります。

マイコンによっては、プログラムカウンタがRAM上にアドレスを指すと強制的にリセットされるようなものもあります。 プログラムを書き換えるにはRAMにプログラムを配置しないといけないので、そういうマイコンでは実現できません。 あらかじめそういうことも調べておかないと、結構頑張って実装したあとで気付くと大変です。

私にとって、プログラムを動的に書き換えながら実行するというのはそういう大変な作業だったんです。

ところがPHPのプログラムは単なるテキストファイルなので、書き換えながら実行するのは非常に簡単です。 何なら動的にプログラムを生成しながら実行することさえ可能です。 もちろん排他制御なんかは考えないといけませんが、マイコンのプグラムを書き換えることに比べればどうってことはありません。

これは本当にすごいことなんですよ!

でもやりすぎは禁物です。 書き換えながら動くプログラムというのは可読性が下がります。 実行時に書き換えるわけですから、実行速度も犠牲になります。 そういうことをせずに済めば一番です。

今後は実行時に書き換えるだけではなく、前処理を行う方法も考えた方がよさそうですね!

それでは!!