次に、System i ではソース・プログラムがどのようにコンパイルされ、オブジェクト・プログラムが生成されるかについて説明いたします。System
i にはRPGコンパイラーやCOBOLコンパイラーがあります。各々のソース・プログラムをコンパイルすると、中間言語が生成されます。これをMI(Machine
Interface)と言います。これはステートメントです。ハードウエア・テクノロジーから独立していますのでTIMI(Technology
Independent Machine Interface)とも呼ばれます。各々のコンパイラーは実行可能な機械語命令を生成するのではなく、中間形態としてMI、ソース・ステートメント、データ定義情報を作り、i5/OSの翻訳機能に制御を渡します。このi5/OSが48ビット対応のCISC用ならば、実行可能命令としての機械語CISC命令が生成され、先ほどのMI、ソース・ステートメント、データ定義情報と合わせて、48ビット対応のオブジェクト・プログラムが作成されます。一方i5/OSが64ビット対応のRISC用ならば、実行可能命令としての機械語PowerPC64ビットRISC命令が生成されます。もし各々のコンパイラーに対して、最終的に実行される機械語命令の生成機能を加えていたら、各コンパイラー毎に48ビット生成用、64ビット生成用のものが必要になっていたことでしょう。
通常、1つのソース・ステートメントは複数のMIに展開されます。勿論1つのMIにしか展開されない場合もあります。また1つのMIは、通常多くの機械語命令に展開されます。あるソース・ステートメントはどのMIに展開されたか、またそれらのMIはどの機械語命令に展開されたかの階層構造の情報がオブジェクト・プログラムの中にあります。これがあるがゆえに、System
i ではダイナミック・デバッグが行えるのです。すなわち、プログラムをデバッグする場合、ソース・ステートメントの番号を指定することによりプログラムの実行を一時停止し、プログラマーが定義した変数名でその時点での値を表示し、場合によっては値を修正してからプログラムを続行させることができます。

