2016-05-19 4 views
2

Ich versuche, mich über die verschiedenen Abstraktionen zu informieren, die für parallele Berechnungen in Clojure verwendet werden. Wenn ich über die Themen lese, verliere ich mich in langen Artikeln in allen Details.Warum brauchen wir alle 3 - Tesser, Transducer core.reducers in Clojure

Ich suche nach einer kurzen Antwort

  • warum wir verschiedene Bibliotheken und
  • verwenden, wenn und wann nicht zu verwenden, um eine bestimmte Bibliothek benötigen.

Bisher diejenigen, die mich verwirren, weil sie gleich aussehen sind

  • tesser,
  • Wandler (mit core.async Pipeline),
  • core.reducers (parallel Falten)
+0

Ich sehe Wandler und Reducer als mehr anwendbar für parallele Programmierung und core.async CSP (communicating Sequential Processes) Parallelität. – endbegin

Antwort

0

Das ist (noch) eine gute Frage!

Ich merke nur, dass Tesser Reduzierungen, Falten (oder, Umarmungen!) Verwendet, und bietet Zugriff auf effiziente und Multicore-Verarbeitung. Es hat einige Einschränkungen hinsichtlich der Anforderung, dass Funktionen assoziativ und kommutativ sein müssen. Beide haben foldr (fold right), was "auf dem Weg zur Faulheit" ist.

Wandler haben auch faltl. Eine linke Falte ist anscheinend "auf dem Schleifenweg". Es scheint, dass Sie mit Wandlern Ihre Wahl treffen können!

Das Vimeo-Video 2014, das ich gesehen habe, wies auf einen Mangel an Wandlern hin, wo der Programmierer Zwischenergebnisse erhalten muss. Clojure Stateful Transducer könnten viele der Probleme lösen, die in Tesser gelöst wurden.

Ich bin neu in diesem Thema, ich arbeite gerade durch, ich selbst!