プログラムのデバッグ支援(仮)
|
Yasutaka Higa
- profile not found -
|
研究目的(仮)
- プログラミングにおいて、ソースコードを改変するとプログラムの挙動も変わる
- 挙動は予想されていた挙動と異なる場合があり、それはバグとなる
- ソースコードの改変前と改変後の挙動を比較することで、デバッグの支援になるのでは無いか
- 異なるバージョンのプログラムを同時に実行できるデバッグ支援ツールを開発する
近況報告
- オープンキャンパスは土曜日です
- ハッカーズチャンプルー行ってきました
- glibc の printf ちょっと見たりしました
- parallel debugger の 例探しは難航中
- Reflection without remorse を一通り流し読み
parallel debugger sample session
- Cerium を clone してみました
- debugger なので実行できるコードを考える
- あるならそれで bisect できる
- もっと内部的な処理が分かる実行コード?
- うーん、ってなってます
reflection without remorse
- 所感まとめ
- モノイドに対する演算で右結合だと遅いやつ
- それを右結合で書かれても CPS にすることで左結合にしよう
- データ型の変換で CPS に変えることができそう
- 適応例
- list の ++ とか
- Monad にも適用可能っぽいです
reflection without remorse - diff list
- hg/Members/atton/haskell/reflection_without_remorse にあります
- DiffList を定義
- リストを取ってリストを返す
type DiffList a = [a] -> [a]
reflection without remorse - abs and rep
- List から DiffList にする rep と DiffList から List にする abs
absFromDiffList :: DiffList a -> [a]
absFromDiffList a = a []
rep :: [a] -> DiffList a
rep = (++)
reflection without remorse - concat diffliset
- difflist の concat は 関数合成
- difflist 最後に abs されるまで ++ は評価されないので速い
- 実行例はリポジトリで
(+++) :: DiffList a -> DiffList a -> DiffList a
(+++) = (.)