質問

効果システム に関するウィキペディアの記事は現在短いスタブと私はしばらくの間、エフェクトシステムとは何かについて疑問に思っていました。

  • 型システムに加えて効果システムを持つ言語はありますか?
  • おなじみの、メインストリーム言語で可能な(仮説の)表記法は、エフェクトのように見えますか?
役に立ちましたか?

解決

"タイプとエフェクトシステム"プログラム内の値の種類だけでなく、それらの値の変更についても説明します。 " Typestate"チェックは関連するアイデアです。

例として、ファイルハンドルを追跡する型システムがあります。戻り型 void の関数 close を使用する代わりに、型システムは effectを記録します close は、ファイルリソースの破棄として— close を呼び出した後にファイルの読み取りまたは書き込みを試みると、タイプエラーになります。

私は、主流のプログラミング言語に登場するタイプやエフェクトシステムを知りません。これらは静的解析の定義に使用されています(たとえば、効果の観点から適切なロック/ロック解除の解析を定義するのは非常に自然です)。そのため、エフェクトシステムは通常、具体的な構文ではなく推論スキームを使用して定義されます。次のような構文を想像できます

File open(String name) [+File]; // open creates a new file handle
void close(File f)     [-f]   ; // close destroys f 

詳細を知りたい場合は、次の論文が興味深いかもしれません(公正な警告:論文は非常に理論的です)。

他のヒント

(これは信頼できる答えではありません。記憶をたどろうとするだけです。)

ある意味では、言語で「状態モナド」をコーディングするときはいつでも、型システムを潜在的な効果システムとして使用しています。だから「州」または" IO" Haskellではこの概念をキャプチャします(IOは他の多くのエフェクトもキャプチャします)。 「依存型」などの高度な型システムを使用するさまざまな言語に関する論文を読んだことを漠然と覚えています。効果のきめ細かな管理を制御し、たとえば型/効果システムが特定のデータ型でどのメモリ位置が変更されるかについての情報を取得できるようにします。これは、相互に排他的な状態ビットを変更する2つの関数に「通勤」を許可する方法を提供するので便利です。 (モナドは通常通勤しないし、異なるモナドは常に互いにうまく合成されないため、しばしば「合理的な」プログラムを入力するのが難しくなります(読む:静的な型を割り当てます)...

非常に手の波状レベルでの類推は、Javaがどのように例外をチェックしたかです。特定の効果に関する追加の情報を型システムで表現します(例えは、例外を類推のための「効果」と考えることができます)が、これらの「効果」は通常、プログラム全体に漏れており、練習(100万回の「スロー」句が発生するか、多くの未チェックのランタイム例外タイプに頼る)。

この分野では、調査言語と主流言語の両方について多くの研究が行われていると思います。効果情報で関数に注釈を付ける機能は、コンパイラの多くの最適化を行う能力を解放し、並行性、およびさまざまなプログラム分析とツールのために素晴らしいことを行うことができます。しかし、多くの賢い人々が長い間取り組んでいると思うので、私は個人的にすぐにそれに対する高い希望を持っていません。

scroll top