この章では、IF/Prologのコンパイラについて述べます。このコンパイラは機械にほとんど依存しなく効率的に実行ができる中間バイナリコードを生成します。
IF/Prologにおける「コンパイル」とは実際には2段階のプロセスを意味します。(厳密な意味での)コンパイルと最適化の2段階です。それぞれ、下に述べるように、インタプリトされるコードと比べて、利点も欠点もあります。プログラムは最適化をせずにコンパイルすることもできます。
プログラムをコンパイルすることの利点(最適化とは関わりなく)は、以下の通りです。
・IF/Prologのメモリスペースの中でより少ない領域しか使用しません。
・コンパイラはプログラムをモジュールとして扱うことができます。モジュールは階層的な名前づけのスキームを用い、大規模なプログラムを開発する時に大きな助けとなります。
・Prologのコードを人間は読めないので、あなたのアイデアがコピーされることがありません。(ただし、コンパイルと同時に最適化を行なわなかった場合には、コンパイルされたコードをlisting/1あるいはdebug/0を使って逆コンパイルすることができます。)
プログラムをコンパイルすることの欠点は、以下の通りです。
・コンパイルされたプログラムは、同様のアーキテクチャを持つ機械間でしか可搬性がありません。ここで、同様なアーキテクチャとは、メモリ境界、バイト順、浮動小数点のフォーマットが同じであることを指します。これらの条件が異なる計算機の場合、別個にコンパイルしたコードを必要とします。
プログラムを最適化コンパイルすることの利点は、以下の通りです。
・実行速度は、通常50%から100%高速になります。スピードアップの度合は、アプリケーションのコードの内容により、大きく変わります。演算の種類によっては、5倍も高速になるものがあります。
プログラムを最適化コンパイルすることの欠点は、以下の通りです。
・コンパイルされたコードは、もはやトレースやデバッグをすることができません。つまり、プログラムのコンパイルと最適化は、通常プログラムが完全にテストされデバッグされた後ですることになります。
・コンパイルされた述語は、もはや動的に変更することができません。これは、追加や削除は述語の単位でのみ可能で節の単位ではできないことを意味しています。
備考: 従来のIF/Prologのバージョンやその他のPrologシステムに比して、IF/Prolog4.0でのコードのインタプリトおよびコンパイルの実行速度は、非常に上がっています。これはインタプリタがコンパイルド・アサートという手法を使っているためです。インタプリト/コンパイルされたコードは、実質的には最適化されたコードと同一のレベルになっており、コンパイルの必要性は実際にはあまりありません。それゆえ、コンパイラを使用することの主な利点はモジュールの機能が利用できることです。
| scroll to top |
|