Next: Up: Previous:

4.4.2 type情報

変換された C++ プログラムがコンパイルされた結果, 実行ファイル上には当然そのC++プログラムに対応するtype情報が 含まれることになる. gdb では,こういったtypeに関する情報を用いることで, コマンドラインから入力されたものが指し示す変数や構造体の要素が, 実際にメモリ/レジスタのどこにあるかを判断し, typeに応じたアクセスや表示を行う.

ところで,ABCL/f プログラムと変換結果である C++ プログラムでは, 同じデータ構造体を用いている訳ではない. syntacticalに異なることはもちろん, 例えば,オブジェクトが複数の構造体として表現されていたりする. このため,構造体の持つtype情報を改変したとしても, ユーザがコマンドライン上で ABCL/f 風に 構造体要素へのアクセスを記述することはできない.

たとえば, ABCL/f における並列オブジェクトは, defmethod/defmethod! のメソッドを処理する際, defmethod! 内のインスタンス変数を仮のものとして扱う必要があるが, そのための実装として, オブジェクトIDに相当する部位と, そこから指される形のインスタンス変数部に分離するものも考えられる. このような場合, C/C++ 上のタイプ情報を変更したとしても, オブジェクトIDから直接そのインスタンス部にアクセス出来る様にはならない.

このため,我々はタイプ情報には改変を加えないで, コンパイル結果の一部にランタイムとして 各typeに対応した pretty printer を含めることにした. システムは,ABCL/f で使われるすべての変数のtypeに対して, その対応するpretty printerを準備している. ユーザはpretty printerを通して 各変数からデータ構造をたどることができる. 実際にどのようなpretty printerの使い方は, 付録で紹介する. また, コマンドライン上で各変数を引数として用いる場合についても, 用いられる関数,変数間で C++ レベルでtypeに関して整合性が取れているため, 問題なく実行することができる.



Mitsubishi Research Institute,Inc.
Mon Feb 24 19:27:22 JST 1997