Comingle: Verteilte logische Programmierung für dezentrale mobile Ensembles
Von Edmund SL Lam ([email protected]) und Iliano Cervesato ([email protected]) mit Ali Elgazar ([email protected])
Alumni -Entwickler:
Neues Papier über die Semantik unserer Sprache erschien im 10. International Web Ruls Symposium (Ruleml) 2016 mit dem besten Papierpreis (http://2016.Ruleml.org/awards)
Neues Papier erschien in Voraussetzungen der 11. IEEE International Conference über drahtlose und mobile Computing, Netzwerk und Kommunikation (WIMOB2015)
NFC -Erfassungsbibliotheken hinzugefügt.
Mafia Party Game Prototype hinzugefügt (es sieht derzeit etwas hässlich aus, aber es funktioniert! = P bleibt für Updates gespannt!).
Quellcodes für Comingle Android -Bibliotheken hinzugefügt!
New Comingle Runtime arbeitet jetzt sowohl mit WiFi-Direct als auch mit lokalen Regionen in der Region zusammen!
Comingle ist ein Programmierrahmen für die Koorifizierung für orchestrierende Anwendungen, die auf mehreren mobilen Geräten verteilt sind. Verteilte Berechnungen mit mehreren Parteien werden als ein einziges deklaratives Programm auf Ensemble-zentriertes und nicht auf herkömmliche knotenorientierte Weise angegeben, bei der für jeden teilnehmenden Knoten ein separater Kommunikationscode geschrieben wird.
Comingle wird stark von Join -Mustern, Einschränkungen und linearen Logik beeinflusst, wobei verteilte Berechnungen als Umschreibungsregeln zwischen Multisets von Ereignissen angegeben werden. Ereignisse sind an den Computerorten parametrisch und definieren die Fähigkeit von Comingle, dezentrale Berechnungen in einem Ensemble von Computergeräten auszudrücken. Weitere Merkmale sind Multiset-Verständnismuster und nichtlineare Musteranpassungen. In Kombination machen diese Comingle zu einer hoch deklarativen Koordinationssprache für die Orchrestrierung komplexer dezentraler Berechnungen.
Comingle integriert sich in Android -Anwendungen durch einen Mechanismus, der als Trigger und Aktuatoren bezeichnet wird: Auslöser ermöglichen es einer Android -Anwendung, die Vorkommen seiner lokalen Ereignisse (z. B. Berührungseingang, andere UI- oder App -Ereignisse) für die Comingle -Umschreibungssemantik zu signalisieren Nebenwirkungen auf die Android-Anwendung (durch Rückrufvorgänge), die mit Ereignissen verbunden sind, die während des Umschreibens auftreten. Dies bedeutet, dass Comingle mit nativen Android -SDK -APIs zusammenarbeitet und Sie nicht dazu zwingt, lokale Operationen und Berechnungen anders zu programmieren (Sie haben immer noch alles, was Sie lieben und hassen, wenn Sie eigenständige Android -Apps schreiben!)
Insgesamt stellen Comingle -Programme nicht nur leicht zu lesen dezentrale Ensembles dar, sondern auch ausführbar und bieten Ihren Android -Anwendungen eine intuitive Schnittstelle.
Wenn Sie die Theorie hinter der dezentralen Ausführung von Comingle -Regeln kennenlernen möchten, lesen Sie unser Ruleml'2016 -Papier (ausgezeichnet mit dem besten Papier).
Wenn Sie mehr über Comingle erfahren möchten und wie es sich in Android SDK integriert, lesen Sie unser technisches Bericht oder die Koordination von 2015.
Wenn Sie mehr über die zeitliche Synchronisierung verteilter Ereignisse in Coming erfahren möchten, lesen Sie unser Wimob'2015 -Papier.
Wenn Sie mehr über die Theorie hinter dem dezentralen Multiset -Umschreiben mit Verständnismustern erfahren möchten, finden Sie in unserem APLAS'2014 -Papier und PPDP'2013 -Papier.
Dieses Repository enthält eine funktionierende Kopie des Comingle -Compiler- und Laufzeitsystems sowie einige Beispiele, mit denen Sie mit dem Coming beginnen können. Hier ist eine Zusammenfassung dessen, was es enthält:
Um Comingle zu installieren und zu verwenden, befolgen Sie die folgenden Anweisungen "Erste Schritte". Wenn Sie direkt in die Android -Apps eingehen möchten, befolgen Sie die Anweisungen in der ReadMe -Datei unter https://github.com/sllam/comingle/tree/master/android_apps.
Um den Comingle -Compiler und den Codegenerator auszuführen, benötigen Sie:
Um die Comingle erzeugten Codes auszuführen, benötigen Sie:
Um Comingles Compiler zum Laufen zu bringen, müssen Sie zuerst Python 2.7 laufen lassen. Als nächstes benötigen Sie ein paar nicht standardmäßige Python-Module, Ply und Z3Py. Bitte fahren Sie mit http://www.dabeaz.com/ply/ und https://github.com/z3prover/z3 fort, um die jeweiligen Quellen zu erhalten und Anweisungen zu installieren.
** Wichtig! Sie müssen Z3 -Python -Bindungen installieren. Siehe Dokumente in https://github.com/z3prover/z3, insbesondere Z3 -Bindungen -> Python
Sobald Sie sie haben, fahren Sie mit https://github.com/sllam/pysetcomp und installieren Sie: Installieren Sie:
pysetcomp $ sudo python setup.py install
Als nächstes benötigen Sie den MSRE -Compiler, fahren Sie mit https://github.com/sllam/msre fort und installieren Sie nur den Compiler:
MSRE $ CD Compiler/MSREX
msre/compiler/msrex $ sudo python setup.py Installation
Sie sind fast festgelegt, Sie sollten jetzt in der Lage sein, den Comingle -Compiler einzurichten und zu installieren. Tun Sie dies, indem Sie die Datei machen:
Comingle $ sudo installieren
Dies würde Folgendes tun:
Um das Coming zu testen, gehen Sie zum Beispielverzeichnis und probieren Sie es aus:
Comingle $ CD -Beispiele
Comingle/Beispiele $ CMGC DRAGRACING.CMG
Sie werden eine Reihe von Ausgaben und hoffentlich keine Fehlermeldungen sehen. Wenn es erfolgreich ausgeführt wurde, sollten Sie ein Verzeichnis "driagracings" mit einer Java -Quelldatei "draagracing.java" sehen. Diese Java -Klasse implementiert die Comingle -Laufzeit, die im Comingle -Programm 'driagracing.cmg' angegeben ist. Weitere Informationen finden Sie im Eclipse -Projekt unter https://github.com/sllam/comingle/tree/master/android_apps/comingledracracings, um ein Beispiel dafür zu erhalten, wie diese kommende Laufzeit mit einem echten Android -Spiel intergrößt werden kann.
Wenn Sie in einem der oben genannten Schritte auf Fehler gestoßen sind, kontaktieren Sie mich bitte unter [email protected]. Bitte akzeptieren Sie auch meine Entschuldigung, der Comingle -Prototyp arbeitet noch in Arbeit, aber ich arbeite hart daran, ihn in einen stabilen und verwendbareren Zustand zu bringen! =))
Besonderer Dank geht an Folgendes: