next up previous contents index
Next: 名前情報の管理 Up: トレーサ Previous: 提供機能の概要

リンク時のトレース指定

多くのトレーサを持つ言語処理系では、 解釈実行型のシステムを別途用意する、 または、トレースを行うか否かによってユーザ・プログラム自身をコンパイル し直すといった方法により、トレースの有無に応じて意味は同じでも実現の詳細がか なり異なるプログラム・コードを動かすことによって、 トレースができる柔軟 性と、 トレースしない場合の効率性を両立させている。

KLIC のトレーサではこのような処理をせずに、 ユーザ・プログラムについて はまったく同じオブジェクト・コードを用い、 リンクする実行時システム・ラ イブラリを通常実行用とトレース用の二種用意し、 リンクをし直すだけでトレー スの有無を切替えられるような方式をとった。 このために、 実際にゴールの リダクションを行うユーザ・プログラムを1リダクションずつ進め、 リダク ションの前後の状況の差を検出することによってトレースを行っている。

具体的には、 ゴール・リダクションごとに必要なヒープ溢れの検査を、 トレー スのきっかけとして利用している。 つまり、「一例外処理」として トレースのきっかけを実装している([*]ページ、第2章参照)。 

トレース用のライブラリで、トレース対象となるゴールを実行する直前に ヒープあふれの比較対象であるヒープの上限値をダミーの値に設定することによって、 1 リダクションごとに強制的にヒープあふれ処理ルーチンに割出させるように する。 このあふれ処理ルーチンの中でトレース用の割出しか、 本当のヒープ あふれかを検査し、 必要ならトレースを行う。 なお、KLICでデフォルトで利用されるのは トレース用のライブラリである。


Sekita Daigo
1998-05-18