Was ist der Vorteil von scalaz.concurrent.Future, im Vergleich zu scalaz.ContT [Trampoline, Unit,?]

8

Ich habe nach einem Datentyp für asynchrone Operationen gesucht.

Ich habe festgestellt, dass scalaz.ContT[Trampoline, Unit, ?] alle Features in scalaz.concurrent.Future zusätzlich zu BindRec unterstützt.

Es gibt jedoch mehr Dienstprogramme für scalaz.concurrent.Future als scalaz.ContT[Trampoline, Unit, ?] , z. Eine Applicative-Instanz führt Futures parallel aus.

Ich dachte, diese Dienstprogramme könnten auch für ContT[Trampoline, Unit, ?] implementiert werden.

Warum hat der Autor eine neue Future -basierte scalaz-concurrent -Bibliothek erstellt, anstatt ContT ? wiederzuverwenden?

    
Yang Bo 31.03.2017, 14:27
quelle

1 Antwort

2

Auf der Gefahr des Seins facetious, ein wichtiger Vorteil ist, dass Future ist ein benanntes Konzept, das viele Menschen erkennen und verstehen, zum Beispiel es hat eine eigene Wikipedia-Seite .

Ich erkenne den ContT -Typ nicht, von dem Sie sagen, dass er gleichwertig ist. Ich versuchte, es in dem scalaz docs zu finden, aber es ist dort ohne Erklärung aufgeführt . Wo kann ich mehr darüber lesen und woher wissen Sie, dass es einer Zukunft entspricht?

Sie sagen, dass "eine Applicative-Instanz Futures parallel ausführt"; Würden mehrere Operationen ContT nicht parallel ausgeführt werden? Das ist ein Schlüsselmerkmal von Futures und könnte eine Antwort auf Ihre Frage sein.

UPDATE:

Ich sehe jetzt, dass ContT ist eine Implementierung des Fortsetzungsübertragungsstil, und das scalaz.ContT[Trampoline, Unit, ?] ist ein Spezialfall einer Fortsetzung vorbei Funktion, die isomorph sein kann Future , wenn bestimmte externe Annahmen halten.

Ich denke, dass die Antwort auf Ihre Frage ist aus den gleichen Gründen, dass viele andere Sonderfälle Bedeutung gegeben werden, wenn sie vielleicht als ein Fall einer allgemeineren Struktur gedacht werden:

  • Es ist einfacher zu diskutieren und leichter zu benennen
  • Es ist effizienter, da die Implementierung einige Sonderfälle nutzen kann, die nicht in der allgemeinen Struktur enthalten sind
  • Es ist einfacher, die Vernunft zu, zum Beispiel hier können wir sicher sein, dass Future s parallel ausgeführt werden, während wir wissen nicht, dass über Fortsetzung Funktionen im Allgemeinen übergeben. (Natürlich ist es möglich, Futures in Folge auszuführen, wie es in einigen Test-Frameworks der Fall ist, aber das wäre keine herkömmliche Implementierung von Future)
  • Es ist ein nützliches Konzept und es ist für Programmierer von Vorteil, es hervorzuheben und leicht zugänglich zu machen
Rich 08.04.2017 21:45
quelle