2013-04-16 9 views
8

Angenommen, die folgenden:eine Funktion über das Netzwerk in Haskell Passing

I einen Typ namens World einig Simulationszustand darstellt. Ich habe auch diese Art Synonym:

type Update = World -> World 

Ist Haskell der Lage, die Serialisierung des Update-Typs, so dass sie über das Netzwerk weitergegeben werden können? Oder gibt es andere Möglichkeiten? Vielleicht suche ich nicht so sehr nach einer Serialisierung der Code-Logik, als irgendeine Art von Zeiger oder Kennung, die am anderen Ende gelesen werden kann. Sowohl der Sende- als auch der Empfangsprozess führen dasselbe Haskell-Programm aus.

+10

Sie sollten in 'Cloud Haskell' schauen, die im Grunde ein System zum Übergeben von Zeigern zu Funktionen unter der Annahme ist, dass jede Seite eine passende binäre hat. –

+2

Betrachten Sie eine Datenstruktur 'Daten Event = Thing | Thing2 Int | ... um die atomaren Ereignisse darzustellen, die passieren können, dann eine Funktion "update :: Event -> World -> World". Sie können den "Event" -Typ der Plain-Daten serialisieren und weitergeben (und Logging usw. hinzufügen, wenn Sie möchten) und dann die "update" -Funktion an jedem Ende der Netzwerkverbindung verwenden. – AndrewC

+1

Leider ist die Antwort im Allgemeinen nein. – augustss

Antwort

12

Das Paket ist genau das, was Sie beschrieben haben. Da jedes Programm bereits die gleichen Funktionen hat, wird ein Zeiger auf die Funktion von einem Prozess zu einem anderen übergeben. Es wurde eine Serialisierung der Funktion als ein mögliches zukünftiges Ziel erwähnt, aber es klingt so, als würde es eine Änderung an GHC vornehmen. Die github page ist eine gute Ressource für welche Backends existieren. Die github-pages sehen sehr schön aus mit einigen Beispielen, aber ich wusste bis vor kurzem nichts darüber.

Die wenigen Haskell Parallel Digests um issue 11 ist, wo ich mich erinnere am Lernen. Nehmen Sie sich bestimmt Zeit, um zu erkunden github-pages Ich weiß, dass ich sein werde.

Wenn ich mich recht erinnere, gibt es einfache Beispiele im Hackage-Paket oder auf dem Github Repo erkunden Arbeit stehlen vs Arbeitsteilung und ähnliche Strategien.

+4

Für die Neugierigen: "Distributed-Process" ist die Verkörperung von Cloud Haskell. Genau, warum sie Namen gewechselt haben, weiß ich nicht, aber es ist wahrscheinlich das Beste. –

3

Ich schlage vor, eine DSL-Datenstruktur zu machen. Leider hat Haskell keine Laufzeitkompilierungsfunktionen von Lisp, aber es sollte ausreichen.