Linda (Programmiersprache)
Linda ist eine Programmiersprache für verteilte Programmierung. Sie wurde Mitte der 1980er Jahre von David Gelernter an der Yale-Universität entwickelt.[1]
Konzept
Ziel von Linda ist es, Prozessen einer Anwendung zu erlauben, miteinander zu kommunizieren, ohne identifizierende Information voneinander zu besitzen. Die ursprüngliche Spezifikation von Linda geht von einem Tupelraum (engl. Tuple Space) als einer abstrakten Umgebung aus, die die Basis für Lindas Kommunikationsmodell darstellt. Verschiedene nebenläufige Prozesse eines verteilten Programms kommunizieren über einen gemeinsamen Tupelraum dadurch, dass jeder dieser Prozesse diesem Tupelraum beliebig Tupel hinzufügen und Tupel daraus entfernen kann.
Ein Prozess A lässt einem Prozess B Information zukommen, indem er eine gebündelte Menge von Werten, ein Tupel, im Tupelraum ablegt. Prozess B kann anschließend das Tupel lesen oder es aus dem Tupelraum entfernen, womit der Kommunikationsakt abgeschlossen ist. Der Prozess A benötigt weder einen Namen, eine Adresse oder sonstige identifizierende Information von Prozess B; für Prozess A ist es völlig irrelevant, ob Prozess B oder irgendein beliebiger anderer Prozess, mehrere Prozesse oder kein Prozess das Tupel liest. Derjenige Prozess, der das Tupel des Prozesses A entnimmt, muss nicht einmal zur gleichen Zeit wie Prozess A aktiv sein oder existieren. Das von A generierte Tupel ist von seinem Erzeugerprozess vollkommen unabhängig, das bedeutet, dass Prozess A zum Zeitpunkt der Entnahme seines Tupels durch Prozess B schon lange beendet sein kann.
Die hieraus resultierende zeitliche und aufgrund der Verteilung auch räumliche Entkoppelung ermöglicht einen Entwurf verteilter Protokolle, die flexibel und robust auf die Herausforderungen verteilter Programmierung durch Latenz, erhöhten Synchronisationsaufwand und mögliche Teilausfälle des Systems reagieren können.
Die erste Spezifikation von Linda besaß einen einzigen globalen Tupelraum. Die naheliegende Erweiterung des Konzepts auf mehrere Tupelräume folgte mit der Spezifikation von Melinda.[2]
Weitere Erweiterungen, beispielsweise um nicht-blockierende Operationen und Stapel-Operationen (bulk operations), folgten 1998.[3]
Implementierungen
Die erste Linda-Implementierung wurde 1984 von Carriero umgesetzt.[4] Eine beträchtliche Anzahl weiterer Implementierungen in unterschiedlichen Programmiersprachen wie Prolog, C, C++ (CppLINDA) oder Java (JavaSpaces) folgten. Die Standardbibliothek (stdlib) von Ruby enthält eine Implementierung namens Rinda.
Quellen
- David Gelernter, Nicholas Carriero, Sarat Chandran, and Silva Chang. “Parallel programming in linda”. In International Conference on Parallel Processing, pages 255–263, 1985.
- Susanne Hupfer. Melinda: Linda with multiple tuple spaces, 1990.
- Antony I. T. Rowstron and Alan Wood. “Solving the linda multiple rd problem using the copy-collect primitive”. Science of Computer Programming, 31 (2–3): 335–358, 1998.
- David Gelernter. “Generative communication in linda”. ACM Trans. Program. Lang. Syst., 7 (1): 80–112, 1985.