トップ «前の日記(2008-09-07) 最新 次の日記(2008-09-09)» 月表示 編集

日々の流転


2008-09-08 [長年日記]

λ.Lightweight Monadic Regions” by Oleg Kiselyov and Chung-chieh Shan

Lightweight Monadic Regions | Lambda the Ultimate より。

リージョンを使ったリソース管理を行うモナドをHaskellで実装する話。 ランク2多相を用いてリソースがエスケープしないことを保障するのは誰でも思いつくけど、リージョンの入れ子とリージョン多相性を工夫して実現していて凄かった。 インターフェースだけ見ると非常に単純なんだけど、実装を見るとお馴染みの TypeCast を使ってて「やっぱしw」という感じ。 あと、typestate*1を型にエンコードすることでリソースが(手動で)解放されることを保証する方法も実装*2して、比較をしている。

どうでもいいけど、型エラーのメッセージが分かりにくいかもという話に対して、「Such error messages are also emitted when ..., so they should be familiar to haskell programmers.」とか書いてあって、うけた。

Tags: 論文

*1 リソースの(外部から見える)状態を、手続きの事前条件・事後条件として宣言できるようにして、状態遷移を記述できるようにする手法。<URL:http://netail.net/?date=20040805#p04> <URL:http://www.cse.wustl.edu/~mdeters/seminar/spring2002/torri-typestate.pdf>

*2 こっちの方はだいぶ変態的