多くのトレーサを持つ言語処理系では、 解釈実行型のシステムを別途用意する、 または、トレースを行うか否かによってユーザ・プログラム自身をコンパイル し直すといった方法により、トレースの有無に応じて意味は同じでも実現の詳細がか なり異なるプログラム・コードを動かすことによって、 トレースができる柔軟 性と、 トレースしない場合の効率性を両立させている。
KLIC のトレーサではこのような処理をせずに、 ユーザ・プログラムについて はまったく同じオブジェクト・コードを用い、 リンクする実行時システム・ラ イブラリを通常実行用とトレース用の二種用意し、 リンクをし直すだけでトレー スの有無を切替えられるような方式をとった。 このために、 実際にゴールの リダクションを行うユーザ・プログラムを1リダクションずつ進め、 リダク ションの前後の状況の差を検出することによってトレースを行っている。
具体的には、 ゴール・リダクションごとに必要なヒープ溢れの検査を、 トレー
スのきっかけとして利用している。 つまり、「一例外処理」として
トレースのきっかけを実装している(
ページ、第2章参照)。
トレース用のライブラリで、トレース対象となるゴールを実行する直前に
ヒープあふれの比較対象であるヒープの上限値をダミーの値に設定することによって、
1 リダクションごとに強制的にヒープあふれ処理ルーチンに割出させるように
する。 このあふれ処理ルーチンの中でトレース用の割出しか、 本当のヒープ
あふれかを検査し、 必要ならトレースを行う。
なお、KLICでデフォルトで利用されるのは
トレース用のライブラリである。