タグ付けされた質問 「continuations」

2
多くの業界で使用されているコンパイラで、継続渡しスタイルよりも静的単一割り当てが優先されるのはなぜですか?
静的単一割り当て(SSA)に関するウィキペディアのページによると、SSAはLLVM、GCC、MSV、Mono、Dalvik、SpiderMonkey、V8などの大規模で有名なプロジェクトで使用されていますが、継続渡しスタイルを使用するプロジェクトのページ(CPS)は比較して少し欠けています。 私は、CPSが主に機能言語を実装するコンパイラーとインタープリターによって好まれるというこの考えを持っています-特に、HaskellとSchemeは、突然変異の制限またはファーストクラスの継続サポートの必要性のために、CPSスタイルに強い傾向があるようです(私は推測します) Smalltalkでもこれが必要になる可能性があります)。私がCPSを使用している主要な文献は、主にSchemeに取り組んでいるか、何らかの点でSchemeに関連している文献のようです。 採用の勢いのほかに、SSAが業界で使用される特別な理由はありますか?SSAとCPSは密接な関係があります。つまり、別の観点から述べることは簡単ですが、情報表現はCPSにとってはコンパクトであるか、効率が低い可能性があります。

1
「CPS」アプローチは、SML / NJのパフォーマンスに大きな悪影響を与えました。推論が望ましい
Learning F# へのコメント:関数の概念を学ぶために、他のプログラミング言語を使用してF#に翻訳できる書籍はどれですか。マカリウスは述べた: 「CPS」アプローチは、SML / NJのパフォーマンスに大きな悪影響を与えていることに注意してください。その物理的評価モデルは、ハードウェアに組み込まれているあまりにも多くの仮定に違反しています。Isabelle / HOLのようなSMLの大きなシンボリックアプリケーションを使用する場合、CPSを使用したSML / NJは約5倍になります。従来のスタックのPoly / MLよりも100倍遅い。 誰かがこの理由を説明できますか?(できればいくつかの例で)インピーダンスの不一致はありますか?

1
コールスタックとして使用した場合、ガベージフリーのスパゲッティスタックはDAGを形成しますか?
私はプログラミング言語の実装手法を調べています。最近、スパゲッティスタックに出会いました。これは、継続スキームスタイルモデル(SchemeやSML / NJなどでの使用を想定)に適していると思われ ます。簡単にするために、この質問ではシングルスレッドプロセスのみを検討します。 ただし、Wikipediaの図 (他の場所にもあります)には少し混乱してい ます。特に、そのような状況がどのように起こり得るのか、私にはわかりません。灰色で表示されたブランチは到達不可能であり、ガベージコレクションの対象となることしか想像できません。一方、スパゲッティスタックを使用してCPSを実装する方法については漠然と理解しているため、その構造でループが発生する方法を想像することはできません。「親ポインタツリー」ではなく、実際には有向非循環グラフであり、スレッドと同じ数の非ガベージソースと、(潜在的な)「出口ポイント」と同じ数のシンクがあると結論付けなければなりません。 しかし、この実装についての私の理解はかなり曖昧なので、おそらく何かを見落としていると思います。ここで「スパゲッティコールスタック」について誰かに教えていただければ幸いです。つまり、CPSベースのプロセスを実装するためにSchemeやSML / NJで使用されるデータ構造を意味します。 次のスパゲッティコールスタックがあるとします。 [exit point] <-- ... <-- [frame A] <-- [frame B (active)] ^ `---- [frame C] 私が理解している限り、Bからのフロー制御は、親にジャンプしてスタックを巻き戻します(Aがアクティブになり、到達不能Bはガベージになります)、またはBまたは参照が保持する参照のみを使用して接続されたサブフレームでアクティブフレームを置き換える新しいフレームに。実行はフレームCにフローできません。これは、フレームCがゴミであることを意味します。 以前の状況ではなく、次のガベージフリーの状況が発生する可能性があると思います。 [exit point] <-- ... <-- [frame W] <-- [frame X] <-- [frame Z (active)] ^ | `---- [frame Y] <---´ たとえば、フレームZが、フレームXまたはフレームY(どちらもWに戻る)で継続する決定関数に属していると想像できます。これは、スパゲッティコールスタックが「親ポインターツリー」ではないことを意味します。 ただし、ループを構成できる状況は想像できません。たとえば、次の状況を考えます。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.