トレース出力 < VITSE < Viiviの小部屋 < 入り口 / Entrance
Viivi は S 式の評価過程を自然に可視化する
独自のトレース出力機能を装備しています.
トレース出力は,基本的に,
入力された S 式とその評価結果である評価値とを線で結んだ表示を行います.
これに加えて,手続き呼び出しや副作用による内部の状態 (束縛関係やデータ構造) の変化も表示します.
評価されない S 式 (たとえば define や set! の第 1 引数シンボル, 名前つき let の名前に相当するシンボル, lambda の第 1 引数のリストなど) はトレース出力の対象にはなりません.
トレース出力において,
手続き呼び出しおよびさまざまな副作用はトレース線の両端
(評価の入出力)
とは異なるタイミングで起きるため,
それぞれつぎのような独自の印をつけて区別されます.
手続き呼び出し * 手続き名
末尾再帰手続き呼び出し / 手続き名
(記号 / は,トレース線が浅いトレース線に合流するイメージです)
新たな束縛関係の生成 ○ シンボル → 束縛値
既存の束縛関係の変更 ● シンボル → 束縛値
新たなシンタックス束縛関係の生成 △ シンボル → 束縛値
既存のシンタックス束縛関係の変更 ▲ シンボル → 束縛値
新たなデータ構造の生成 □ 新データ
既存のデータ構造の変更 ■ 旧データ ⇒ 新データ
マクロ展開 ✕ 展開前 ⇢ 展開後
旧版では複合手続きについてはトレース線だけを表示し, その入出力は全く表示していませんでした.
新板では,
apply
,
for-each
,
map
などの複合手続き呼び出しの中では,
内部で行われる下位の手続き呼び出しのために
{ }
で囲んだ仮想的なリストが作られて表示されます.
VITSE では,
これらの仮想的なリストも
{...}
のように中括弧を用いて評価への入力として表示し,
それらに対する評価結果も評価からの出力値として表示します.
これら複合手続きの場合を含め,
任意のトレース線はとぎれることなく,必ず入力されるS式と出力される評価値をつなぎます.
継続の再開とそのときの初期値入力についても,
ユーザにわかりやすい形式で表示します.
ただし,
上述の「とぎれないトレース線」に対する唯一の例外が,
継続の再開が起きたときです.
継続の再開が起きると,それまで連続していたトレース線がすべて中断され,
継続が生成された点からのトレース出力に切り替わることになります.
このトレース線のパターンは継続再開の論理構造をよく表現しています.
普通は理解するのが難しいと言われる継続の処理を,
初心者でも直感的に把握することができます.
トレース出力機能はデフォルトで有効になっています.
トレース出力機能を完全に無効にするには引数コマンド
-T false
を用います.
トレース出力する項目や情報は,
引数コマンド
(-Titem
および
-Tinfo
),
カーネル設定用手続き
(viivi-set!
),
および IDE で使えるカーネル設定パネルなどによりそれぞれ指定することができます.
トレース出力 < VITSE < Viiviの小部屋 < 入り口 / Entrance
2022/03/02 開設
Copyright(C) 2003-2022 ilma <ilma@viivi.io> All rights reserved.