view slides/20140715/slide.md @ 53:34307ce54385

Add slide for seminar
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Tue, 15 Jul 2014 15:40:25 +0900
parents
children
line wrap: on
line source

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
(+++) = (.)
```

<!-- vim: set filetype=markdown.slide: -->