title: モナドによるプログラムの変更 author: Yasutaka Higa cover: lang: Japanese # 研究目的 * プログラムを変更するとプログラムの実行結果も変わる * しかし、バージョン互換を維持する場合など、ソースコードを変更した後も同じ結果を得たい場合もある * プログラムの改変の際にモナドとして改変することで過去のプログラムの保存ながら改変する * これによりリファクタリング支援や後方互換性の確保、プログラムの変更による実行結果の変化の検出などを行なう * さらにプログラムの改変をモナドとして表すことで、モナドの理論的背景である圏論の視点からプログラムを改変することの意味を探る # 近況報告 * 圏論勉強中 * 拾った論文2つほど * Idea : 環境付きFunctor # Category * [圏論勉強会](https://sites.google.com/site/klovelab/Home/category) * なるものがあったので動画で見てます * 2回分ほど # papers : ATS * [ATS 言語を使って不変条件を API に強制する](http://t.co/YJ20R7iRut) * ATS なる言語があるらしい * C 言語を生成する * deductive type, linear type, dynamic type を定義できる * compile time に deductive type による check とかできる * deductive type で長さ付き List を定義して、生成されるC言語のソースが index out of array しないことを強制とかしてました # papars : monoid folding * 圏論の話を聞いていたら、モノイドは畳み込み演算をどこから fold しても良い話が * 並列でやっても良さそう、みたいな * [A monadic calculus for parallel costing of a functional language of arrays](http://link.springer.com/chapter/10.1007%2FBFb0002796) * 実行コストを計算するモデルを定義 * それを計算する cost monad とか作る # Idea : Functor with Environment * 環境を考える(variables, type information) * 環境と対応した Functor を考える * 通常の環境がメインメモリ空間 * GPUメモリ空間は異なる環境(for Cerium) * 別のPCも別空間(for Alice) # hand shaking with data segment signature # Idea : Functor with Environment * 通常の環境の演算はGPU空間でも同じっぽい * Functor になりそう * GPU に行って、計算して戻ってきても良い * べつに CPU環境で実行しても良い * Code Segment と Data Segment の categorical な考え方になるかも? * 割と精査はしていません