ラムダ計算と抽象機械と非同期ランタイム
https://fortee.jp/2025fp-matsuri/proposal/3bdbadb9-7d77-4de0-aa37-5a7a38c577c3
https://docs.googlxe.com/presentation/d/1_GATrCUwgo-ZABGYzuSIapUIzxs9CK7ZuQw1FVk9Ew4/edit?usp=sharing
評価時に、簡約 箇所を毎回探索するのは コスト が高い
そのため、「今やること」とされている 項(control string)と「後でやることを」保持する スタック(継続)を持ち、これらを組み替えるような機械(抽象機械)を考えた方が良い
このような抽象機械を CK 機械 と呼んだり呼ばなかったりする
以上を踏まえると、プログラムの評価とは control string と継続を分離して、以下を繰り返せば実現できる
control string を評価できなくなるまで分解する
control string を評価できなくなったら(値になったら)、継続を切り崩す
ラムダ計算 には変数の概念があり、β 簡約 時には置換が行われる(代入)
代入を行うには記憶が必要
この記憶領域を 環境 と呼ぶ
warning.icon 環境はグローバル状態として置くのは不適切
https://gyazo.com/3777d4610f5804e173d870e76431ccc5
そのため、項に付与してあげる
cats-effect: Scala の 非同期ランタイム ライブラリ
IO[A]: 成功したら A の値を結果として返す
IOFiber[A]: IO[A] を評価する 仮想マシン
CKE 機械 のような形になっている
これによりどのようなメリットが得られるのか?
https://gyazo.com/987b77782c4fe29d97013f0ccb51d23e
他言語の 軽量スレッド 概念を理解するのにも役立つ
全く同じではない
#関数型まつり_2025