このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

タブリング=パッカー=待ち合わせ同期

タプリングの意味を並列計算やデータフロー計算で考えてみると、2つ以上のデータをパックして1つのデータ(かたまり)にすることだが、これはまた、すべての成分データが揃うまで待つので、データ同期を表していることになる。

コア圏とハロ多圏のモデルを使うと、コア圏は同期逐次的な関数計算を表していて、ハロ多圏が非同期並列的なデータフロー計算を表してることになる。結合、モノイド積、トレースなどの演算も、コア圏とハロ多圏では解釈が違う。構文的には違いが分かりにくいので、もっと精密なセマンティクスが必要だ。

多圏をデータフロー計算とみなすってのはいい観点だと思う。引数評価が終わる前に関数(というべきか?)本体が評価できるので、call by name っぽい計算ともいえる。バート(古いプログラム理論本の著者)は、eal方式(evaluate arguments last)と呼んでいたが、ようするに遅延評価。

んで、遅延評価なんだけど、計算が途中まで進行した結果の式が渡されるという解釈と、計算を途中まで遂行した状態の計算体(プロセスのようなもの)へのチャネルを渡される(引きずり回す)という解釈がある。モノ(式)が移動すると考えれば移動経路、チャネルが引きずり回されると考えれば通信用ワイヤーが図示されるべき。

運動(移動)軌跡とチャネルワイヤーという対比も説明には便利かもしれないな。副作用がなければコピー(モノ)と参照(チャネル)の区別は必要ないもんね。