Parallele Anwendungen entwickeln mit Erlang/OTP

Erlang hat den Weg aus der akademischen Nische heraus geschafft. Die funktionale Programmiersprache ist prädestiniert für skalierbare und hochverfügbare Anwendungen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 22 Min.
Von
  • Frank Müller
  • Kersten Auel
Inhaltsverzeichnis

Nicht viele funktionale Programmiersprachen haben den Weg aus der akademischen Nische heraus geschafft. Erlang ist eine davon. Ein kompakter Code, in dem Nebenläufigkeit und Verteilung eine entscheidende Rolle spielen, prädestinieren die Sprache für skalierbare und hochverfügbare Anwendungen.

Jahrelang steigerte sich die Performanz von Rechnersystemen durch die Erhöhung des Prozessortakts. Dieser Weg hat jedoch seine Grenzen, beispielsweise wegen thermischer Schwierigkeiten. Eine Alternative ist die parallele Verarbeitung mit multiplen Ablaufpfaden auf der CPU durch mehrfache Prozessorkerne oder Multiprozessorsysteme. So sind Notebooks heute mit Dual-Core-Prozessoren ausgestattet, Hochleistungs-PCs mit bis zu acht Kernen und Server mit einer großen Anzahl von CPUs. Allerdings ist es nicht eben trivial, Aufgabenstellungen zu parallelisieren geschweige denn, dies in Code zu gießen. Eine Plattform, die dem Entwickler bei verteilten und parallelen Anwendungen entgegenkommt, ist Erlang/OTP.

Immer mehr Programmierer sehen sich vor die Aufgabe gestellt, solche Systeme zu entwickeln, sodass der Name Erlang in letzter Zeit mehr und mehr auftaucht. Die Geschichte der Sprache sowie der dazugehörigen Plattform beginnt jedoch schon viel früher. Der Grundstein wurde bereits 1984 gelegt, als Joe Armstrong, Göran Båge, Seved Torstendahl und Mike Williams das Computer Science Laboratory (CSLab) des Telekommunikationsunternehmens Ericsson gründeten. Eine der Aufgaben dieses Teams war die Entwicklung einer Softwareinfrastruktur für Telekommunikationssysteme. Hierzu experimentierten die Forscher mit verschiedenen Formen imperativer, deklarativer, regelbasierter und objektorientierter Sprachen und prüften sie auf ihre Eignung für das Einsatzgebiet der Telefonie.

Anforderungen an die Programmiertechnik waren eine massiv-parallele Verarbeitung sowie die Möglichkeit, asynchrone Nachrichten zwischen den Prozessen zu senden. Weiterhin sollten Updates zur Laufzeit einen unterbrechungsfreien Betrieb gewährleisten. Ein weiterer Anspruch war, Programme mit wenig und elegantem Code realisieren zu können, der sich dicht an der formalen Spezifikation orientiert. Die Motivation hierfür lag in der Erkenntnis, dass die Anzahl fehlerfrei entwickelter Code-Zeilen pro Tag unabhängig von der gewählten Programmiersprache ist. Somit sollte wenig Code pro Funktion zu einer geringen Fehlerträchtigkeit führen.

Einige dieser Eigenschaften waren zu dieser Zeit mit Prolog möglich, sodass Erlang zunächst auf dieser deklarativen Sprache basierte, ergänzt durch Nebenläufigkeit. Allerdings erwies sich im Laufe der Entwicklung das Backtracking von Prolog als ungeeignet, und die Weichen wurden in Richtung funktionaler Programmierung gestellt. Um einen geeigneten Namen für die neue Sprache zu finden, griff das Entwicklerteam auf die Tradition zurück, Programmiersprachen nach Mathematikern zu benennen. Nach Pascal, Euclid und Occam fiel die Wahl auf A.K. Erlang, dessen Formel für Warteschlangenprobleme in der Telefonie zudem einen Bezug zu Herstellern von Telekommunikationstechnik herstellt. Damit steht der Name Erlang entgegen der vielfach vertretenen Meinung nicht für den Begriff Ericsson Language.

Die während der Entwicklung von Erlang getroffenen Design-Entscheidungen finden sich teils in weiteren zu diesem Zeitpunkt bereits bekannten Sprachen wieder, sind teils jedoch auch einmalig. Letztendlich repräsentiert Erlang einen individuellen Mix für die spezifischen Anforderungen und ist daher eher pragmatisch denn an einer reinen Lehre orientiert.

Eine ihrer signifikanten Eigenschaften ist die Nutzung einer virtuellen Maschine für Portabilität unabhängig vom Betriebssystem. Ericsson bietet Erlang heute für Solaris, Linux, Windows und VxWorks an, in der Open-Source-Version zusätzlich für Mac OS X und im Quelltext. Nebenläufigkeit sowie Speicherverwaltung inklusive der Garbage Collection sind Aufgabe der VM.