# HG changeset patch # User Yasutaka Higa # Date 1405406425 -32400 # Node ID 34307ce54385253cb94737f0a28fe3711bcfb7f2 # Parent 20a4d2010f378e79533ffa54c89acf8a63659a46 Add slide for seminar diff -r 20a4d2010f37 -r 34307ce54385 slides/20140715/slide.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slides/20140715/slide.md Tue Jul 15 15:40:25 2014 +0900 @@ -0,0 +1,72 @@ +title: プログラムのデバッグ支援(仮) +author: Yasutaka Higa +cover: +lang: Japanese + + + +# 研究目的(仮) +* プログラミングにおいて、ソースコードを改変するとプログラムの挙動も変わる +* 挙動は予想されていた挙動と異なる場合があり、それはバグとなる +* ソースコードの改変前と改変後の挙動を比較することで、デバッグの支援になるのでは無いか +* 異なるバージョンのプログラムを同時に実行できるデバッグ支援ツールを開発する + + +# 近況報告 +* オープンキャンパスは土曜日です +* ハッカーズチャンプルー行ってきました +* glibc の printf ちょっと見たりしました +* parallel debugger の 例探しは難航中 +* Reflection without remorse を一通り流し読み + + +# parallel debugger sample session +* Cerium を clone してみました +* debugger なので実行できるコードを考える +* あるならそれで bisect できる + * VCS にさせるべきなのかな、と思ってしまったり +* もっと内部的な処理が分かる実行コード? + * それってもうテストなのでは +* うーん、ってなってます + +# 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 +(+++) = (.) +``` + +