トレース出力 < VITSE < Viiviの小部屋 < 入り口 / Entrance


トレース出力

概要

Viivi は S 式の評価過程を自然に可視化する 独自のトレース出力機能を装備しています.
トレース出力は,基本的に, 入力された S 式とその評価結果である評価値とを線で結んだ表示を行います.
これに加えて,手続き呼び出しや副作用による内部の状態 (束縛関係やデータ構造) の変化も表示します.

評価されない S 式 (たとえば define や set! の第 1 引数シンボル, 名前つき let の名前に相当するシンボル, lambda の第 1 引数のリストなど) はトレース出力の対象にはなりません.

記号

トレース出力において, 手続き呼び出しおよびさまざまな副作用はトレース線の両端 (評価の入出力) とは異なるタイミングで起きるため, それぞれつぎのような独自の印をつけて区別されます.


	手続き呼び出し					* 手続き名
	末尾再帰手続き呼び出し			/ 手続き名
	(記号 / は,トレース線が浅いトレース線に合流するイメージです)

	新たな束縛関係の生成				○ シンボル → 束縛値
	既存の束縛関係の変更				● シンボル → 束縛値

	新たなシンタックス束縛関係の生成	△ シンボル → 束縛値
	既存のシンタックス束縛関係の変更	▲ シンボル → 束縛値

	新たなデータ構造の生成			□ 新データ
	既存のデータ構造の変更			■ 旧データ ⇒ 新データ

	マクロ展開						✕ 展開前 ⇢ 展開後

複合手続き

旧版では複合手続きについてはトレース線だけを表示し, その入出力は全く表示していませんでした.

新板では, applyfor-eachmap などの複合手続き呼び出しの中では, 内部で行われる下位の手続き呼び出しのために { } で囲んだ仮想的なリストが作られて表示されます.
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.