Ist clojures core.async ähnlich dem OCaml Core Async von Jane Street?

8

In diesem Blogpost schreibt der Autor:

  

Grenchman baut jedoch auf den Core- und Async-Bibliotheken von Jane Street auf, einem der größten industriellen Anwender von OCaml. Async ermöglicht monadische Faux-Concurrency, die viele Callback-Probleme anderer ereignisgesteuerter Tools vermeidet, aber sie ist ziemlich monolithisch.

Auf der J Seite der Street-Dokumentation für Core Async beschreiben sie es als:

  

Insbesondere glauben wir, dass Async es besser macht, die Parallelität Ihres Programms zu kontrollieren, was es einfacher macht, über mögliche Rennbedingungen nachzudenken.

Meine Frage ist - gibt es Ähnlichkeiten zwischen core.async in Clojure und Core Async in OCaml? Ich frage, weil die 'faux concurrency, um Callback-Kopfschmerzen zu vermeiden' ziemlich ähnlich zu der Anwendung von core.async in Clojure klingt.

    
hawkeye 14.10.2013, 21:34
quelle

1 Antwort

8

Ich kann keine großen Ähnlichkeiten erkennen. Das Konzept von Clojures core.async scheint hauptsächlich auf dem Parallelitätsmodell von Go zu basieren - viele der Namen sind gleich, wie Kanäle für die Kommunikation und sogar das go Makro für die asynchrone Ausführung von Code, wie Gos Schlüsselwort, das die Sprache selbst genannt wird für.

Das Konzept von Async von Jane Street ist in diesem Satz aus der einführenden Dokumentation :

  

Kurz gesagt, besteht die Idee darin, nicht preemptive Threads auf Benutzerebene zu verwenden   und erstklassige Blockierungsoperationen mit Blockierung ausgedrückt in der   System eingeben.

Er verwendet den speziellen Typ Deferred.t , um Ergebnisse von asynchronen Berechnungen zu übermitteln, die Clojure-Futures ähnlicher sind als Kanälen. Außerdem werden OS-Threads komplett vermieden und stattdessen Benutzerthreads verwendet, während core.async OS-Threads verwendet (zumindest wenn sie verfügbar sind).

Bearbeiten : Nach einigen weiteren Untersuchungen besteht eine deutliche Ähnlichkeit darin, dass beide Bibliotheken sich darauf konzentrieren, mehrere Blockierungsoperationen zu kombinieren, ohne OS-Threads zu binden. Und Async bietet auch (neben Deferred.t ) Kanäle über das Pipe -Modul.

    
Rörd 14.10.2013, 22:21
quelle