8

このブログ投稿で、著者は次のように書いています。

ただし、Grenchman は、OCaml の最大の産業ユーザーの 1 つである Jane Street の Core および Async ライブラリに基づいて構築されています。Async は、他のイベント ドリブン ツールの多くのコールバックの頭痛の種を回避するモナドの擬似同時実行を可能にしますが、かなりモノリシックです。

Core Async の Jane Street Documentation Pageでは、次のように説明されています。

特に、Async はプログラムの同時実行性をより適切に制御し、競合状態の可能性について簡単に判断できると考えています。

私の質問は、Clojure の core.asyncと OCaml の Core Async の間に類似点はありますか? 「コールバックの問題を回避するための偽の並行性」は、Clojure での core.async の適用と非常によく似ているためです。

4

1 に答える 1

8

主な類似点を検出できません。Clojure の概念は、core.asyncほとんどが Go の並行性モデルに基づいているようです。名前の多くは、通信用のチャネルや、goコードを非同期に実行するためのマクロなど、言語自体の名前が付けられた Go のキーワードのように同じです。

一方、Jane Street の Async の概念は、入門ドキュメントから次の文に要約されています。

簡単に言うと、非プリエンプティブなユーザー レベルのスレッドと、型システムで表現されたブロッキングによるファースト クラスのブロッキング操作を使用するという考え方です。

Deferred.tこれは、チャネルよりも Clojure のフューチャーに似た、特殊な型を使用して非同期計算の結果を通信します。また、OS スレッドを完全に回避し、代わりにユーザー スレッドを使用しますcore.asyncが、OS スレッドを使用します (少なくとも利用可能な場合)。

編集:さらに調査すると、両方のライブラリがOSスレッドを拘束することなく複数のブロッキング操作を組み合わせる手段を提供することに重点を置いているという点で明確な類似性があります。また、Async は、モジュールDeferred.tを介して (以外に) チャネルも提供します。Pipe

于 2013-10-14T22:21:55.037 に答える