8

Clojure のcore.async ライブラリには、ブロックをラップしてブロック IO を処理するチャネルを作成するステート マシンを作成するマクロがあります。go

これは、 C#Go-lang の goroutinesでモデリングし ているようです。async

The Seasoned Schemerでは、継続を渡すためのテクニックについて説明しています。(これは call/cc に基づいているようです)。また、Clojureの区切られた継続に関するDavid Nolenのライブラリも見られます。

ここでは、C#asyncを「現在の継続を伴う呼び出し」と表現しています。

私の質問は、Clojure の core.async を「継続渡しスタイル」と記述できるかということです。

または、「継続」(区切られたものと区切られていないもの) はオーバーロードされた用語ですか?


編集: 追加の注意事項 - David Nolen は、core.async に対して wrt を言っています:

go ブロックの内部では、継続渡しスタイルでコードを手動で記述する必要がないように、これらのことを同期的に実行できるという錯覚を与えます。

4

2 に答える 2

2

ある意味では CPS ですが、実装はどこでも goto でリンクされたコード ブロックに似ています。

ここには、Tim Baldridge が go マクロの実装について話している 2 つのビデオがあります。注意: 合計 2 時間で、彼は がどのようにstate machine実装され、どのように機能するかについて非常に詳細に説明します。

Core Async Go マクロの内部 - パート I

Core Async Go マクロの内部 - パート 2

マクロの前提動画もあります

ディープ ウォーキング マクロ

于 2013-12-30T22:30:37.977 に答える