代数的効果とハンドラ、動的効果

ダイナミックエフェクトとは何ですか?動的にエフェクトを作成するのはどういう意味ですか?

In a language with algebraic effects and handlers (such as Eff
or Koka) one could already do different operations based on runtime
information, for example: if x > 10 then get () else put
10
In this case the actual operation done will only be known
at runtime. But in the Frank paper (“Do be
do be do”
) they talk about dynamic effects in the sense of
ML-style references. In what sense are references a dynamic effect
that cannot be done in Eff (without resources) or Koka? Also why
were resources removed again from Eff?

ベストアンサー

入力/出力エフェクトの例を見てみましょう。通常、これは2つの代数演算 print
read で表されます。そして、ある種のコミュニケーションチャネルから物事が “プリントアウト”と
“読み込まれる”と想像することができます。実際、I/Oは一般的なオペレーティングシステムで動作します。

一般的なオペレーティングシステムでは、ファイルを開く、インターネットソケットにバインドするなど、多くの通信チャネルを開くことができます。新しいチャネルが開くたびに、新しい
(すなわち、プログラムが実行されている間)。オペレーティングシステムは通常、単に新しい整数「ファイルハンドル」を作成しますが、それは本当に欲しいものの安価なバージョンです:一意であることが保証され、プログラムのどの部分でも推測できない識別子。すでにそれに与えられていた。
(整数は推測できます)このようなものをインスタンスと呼ぶことにしましょう。
(暗号では、それはしばしばノンスと呼ばれますが、彼らはそれを不正行為と考え、プログラミング言語ではインスタンスが抽象的なトークンであることを確かめることができます。

新しいインスタンスを作成する必要がある別の例があります。一つは update
lookup の操作を伴うメモリ位置である state
です。典型的なプログラムは、それぞれが状態効果のインスタンスである任意の量のメモリ位置を割り当てたいと思う。一般的に、インスタンスでは、ローカル例外やローカル参照などのローカルエフェクトを作成できます。多くのアプリケーションでは、たとえば、プログラムの特定の部分だけが特定の効果を使用することを保証できるように、そのような効果を持つことが不可欠です。

理論を複雑にするので、理論家には影響インスタンスを無視する傾向があります。動的な効果を持たないプログラミング言語は役に立たないため、無視しないでください。すべてのメモリ割り当て、ファイル、ソケットを事前に指定しなければならないプログラムを書く人は誰ですか?

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です