Effとリソースの参照をエスケープする

「代数エフェクトとハンドラによるプログラミング」
>参照(代数効果を使って定義された状態効果の動的インスタンス)がハンドラのスコープ外に伝播できるという問題があります。私は、ここでの問題は、参照の操作を呼び出すと
“処理されない操作”の実行時エラーが発生することです。この問題を解決するために「リソース」が導入されていますが、プログラム全体で暗黙のハンドラのように見えます。

私が疑問に思っていたのは、呼ばれた操作を追跡するエフェクトシステムを持っていたら、ハンドラスコープの外側に伝播する参照はまだ問題になるでしょうか?参照で呼び出された未処理の操作は、エフェクトシステムでは静的に認識されるため、これらの問題は排除できます。この種の実行時エラーは表示されません。

リソースは冗長性を減らし、MLスタイルのリファレンスを完全にエミュレートするのに役立ちますが、十分なエフェクトシステムがあればランタイムエラーを回避する必要はありません。私はこれを考えていますか?

ベストアンサー

問題は「参照がその範囲をエスケープしていますか?決めることはできません。エフェクトシステムは、質問への答えを近似すぎすることしかできないので、コンパイラーが参照が範囲を逃げていると主張するトリッキーな状況ではなく、しかし、これは本当の問題ではありません。結局のところ、洗練されたコンパイラが参照が範囲をエスケープしているかどうかを知ることができない場合、人間はどのようにそれを行うと期待できますか?

スコープをエスケープするために使用したい参照があることに注意してください。そのようなケースがいくつかあります:

    f という別の関数を受け取り、その memo rel =
    “nofollow noreferrer”>メモ形式
    。通常、 memo
    はキャッシュを格納するローカル参照を作成します。

  1. セルフバランシングツリーなどの自己最適化データ構造は、ローカル参照をバックグラウンドで使用するため、自身を変更できます。このような構造は、参照が透明であることが多い。すなわち、最適化は、より効率的であること以外は、観察可能な効果がない。

  2. 誰もステートフルなデータ構造を実装することはないと予想するのは現実的ではありません。これらは状態を使用する必要があり、作成されたスコープからエスケープする必要があります。そうでなければ、プログラム全体の構造がハンドラーのスコープを修正する人質になります。

同様の問題が効果の例に関して生じる。現実的なプログラミング言語では、新しいエフェクトインスタンスを動的に作成できる必要があります。これが必要な状況は次のとおりです。

  • 任意の数のファイルまたは通信チャネルを開く:それぞれがエフェクトのインスタンスであり、コンパイル時に必要な数を伝えることはできません

  • 参照のリストを作成します。

マルチコアOCamlはファーストクラスのモジュールでインスタンスをシミュレートします。ハックであるという私の心には、新鮮な名前の生成をシミュレートするために汎用モジュールを使用しているので、特定のエフェクトのすべてのインスタンスを取得するハンドラを記述することは難しいです。

リソースはハックではないとも言いましょう。
PlotkinとPowersのコモデルに触発されています。私は、影響を及ぼしている人々が主にリソースを無視するのは残念だと思います。彼らは、ローカル参照なしでプログラムを書くことが可能だと思います。それは理論的な単純さのために否定的です。

返信を残す

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