TL;DR
内容
call/cc と限定継続
Racket の call/cc は、呼び出したフォームの中に閉じず、残りの計算すべてを捕捉してしまう。そのため、代わりに限定継続を使うとよい。限定継続で call/cc やモナドを実装でき、その逆もできる。
中間表現としての CPS
継続渡しスタイル(CPS)を中間表現(IR)として採用する処理系もある。例えば SML/NJ、Scheme、OCaml、WebAssembly である。CPS は関数を第一級オブジェクトとして扱うので、関数型言語と相性がよい。また CPS では束縛が単一代入的なので、β 簡約や η 簡約などで多様な最適化を実装しやすい。発表では、手続き型言語と関数型言語の制御の移譲(control transfer)の対応付けも紹介された。
エフェクトと継続
エフェクトのハンドリングとは、どのような副作用(Effect)が起きたか、そしていつどのように再開するかを扱うことであり、いつどのように再開するかが継続にあたる。モナドにも継続は現れる。
Algebraic Effect Handlers は、副作用のある計算を扱う新しい手法で、モナド変換子よりもモジュール化や合成がしやすいらしい。
キーワード
自分の理解
自分の知識では一部しか理解できなかった…。特に Algebraic Effect Handlers のあたりはよく分からなかった。