スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

STMよくわかりません><・その2

前回にひきつづきSTMをお勉強中。WikipediaSTMの説明を読み直していたら、以下のような記述がありました。

2005年に、Tim Harris、Simon Marlow、Simon Peyton Jones そして Maurice Herlihy によって STM が Concurrent Haskell 上に構築された。これは任意のアトミックな操作をより大きなアトミックな操作に合成することができる。この役に立つ考えはロックベースプログラミングでは不可能である。

以下妄想:RDB等の文脈での楽観排他だと、2つのtx間で競合検出したらリトライするしかないけど、上記のように両者を合成できるとすれば新しいかもしれない…。どういう仕掛けだろう? 逆にこれをRDBとかデータストア一般に適用すれば、ロックフリーなおかつリトライ不要なtx排他手法なんてのが実現できる。。? ああそれとも副作用のないHaskellだからプログラム代数のように操作の合成とかできるのかな。つーことは関数プログラミングのプログラム代数はtxの排他や合成で実は重要な意味を持つのかな?←かなり電波を発しておりますw

追記

上述のConcurrent Haskell上のSTMの元論文「Composable Memory Transaction」をちょろっと読んでましたら、上に書いてたのはそんなに電波でもない気がしてきました。

3. Composable transactions
We are now ready to present the key ideas of the paper. Our starting point is this: a purely-declarative language is a perfect setting for transactional memory, for two reasons. First, the type system explicitly separates computations which may have sideeffects from effect-free ones. As we shall see, it is easy to refine it so that transactions can perform memory effects but not irrevocable input/output effects. Second, reads from and writes to mutable cells are explicit, and relatively rare: most computation takes place in the purely functional world. These functional computations perform many, many memory operations ― allocation, update of thunks, stack operations, and so on ―but none of these need to be tracked by the STM, because they are pure, and never need to be rolled back. Only the relatively-rare explicit operations need be logged, so a software implementation is entirely appropriate.
  • 純粋な宣言的言語は、以下の2つの理由でトランザクショナルメモリにぴったりだ
  • まず、副作用のある計算とない計算が型システムによって明確に分離される。よって「メモリ操作は行うが、キャンセルできないI/O処理は行わないようなトランザクション」へ変更しやすい(訳注:モナド使うってこと?)
  • 次に、ミュータブルな領域への読み書きが明示的であり、かつ比較的少ない。大半の計算処理は純粋な関数のみで構成される。それは大量のメモリ操作(メモリ確保、更新、スタック操作など)をともなうが、副作用がないのでロールバックがいらず、STMによって管理が不要である。少数の明示的な副作用をともなう処理についてのみログ記録が必要であり、ソフトウェア実装がラク

また引き続きお勉強。。

1/21追記

koichikさんからすごくわかりやすいコメントいただきました。STMでのtxの「合成」は、私が上に書いたように2つのtxの処理が動的にマージされるという意味ではありませんでした(そんなうまい話はないか)。詳しくはコメントをご覧ください(注:このエントリはコメントの方が本文ですw)