Erlang (Programmiersprache)
Erlang (benannt nach Agner Krarup Erlang) ist eine Programmiersprache (und Laufzeitsystem), welche bei Ericsson von Joe Armstrong et al. entwickelt wurde.
Spricht man von Erlang, meint man meist nicht nur die relativ kompakte Sprache, sondern auch die umfangreiche Bibliothek und das Laufzeitsystem, zusammen Erlang/OTP genannt, wobei OTP für The Open Telecom Platform steht. Enthalten ist z.B. eine verteilte Datenbank namens Mnesia.
Erlang wurde ursprünglich für die Programmierung von Anwendungen in der Telekommunikation geschaffen, insbesonders für Vermittlungsstellen von Telefonnetzen (Switch).
Die dort vorhandenen besonderen Anforderungen, wie Parallelität, hohe Verfügbarkeit und Fehlertoleranz, Auswechseln von Modulen zur Laufzeit etc., gingen unmittelbar in den Entwurf der Programmiersprache und des Laufzeitsystems ein.
Erlang genügt den Paradigmen der funktionalen, nebenläufigen und verteilten Programmierung. Joe Armstrong, der geistige Vater von Erlang, bezeichnet sie am liebsten als COPL (Concurrency Oriented Programming Language), was in etwa als nebenläufigkeits-orientierte Programmiersprache zu übersetzen ist und andeutet, dass Prozesse die wichtigsten Objekte in Erlang sind. Den funktionalen Kern findet er weniger wichtig, auch wenn dieser wegen der Vermeidung von Seiteneffekten recht nützlich für die nebenläufige Programmierung ist.
Erlang ist eine der wenigen funktionalen Programmiersprachen, die den Sprung aus dem akademischen Bereich in die Industrie geschafft haben, insbesondere Telefon- und Netzwerkausrüster setzen Erlang ein.
Prozesse sind in Erlang sehr resourcenschonend implementiert, der in Erlang geschriebene Webserver Yaws mit seiner hohen Skalierbarkeit ist ein schönes Beispiel dafür.
Die Syntax von Erlang erinnert an Prolog, was nicht ganz verwundert, da das System anfänglich als in Prolog geschriebener Interpreter existierte.
Beispiele
Berechnung der Fakultät:
-module(test). -export([fac/1]). fac(0) -> 1; fac(N) -> N * fac(N-1).
Aus Getting Started Quickly with Erlang.
Eine kleine verteilte Anwendung, die auf zwei Erlang-Knoten läuft:
-module(ping_pong).
-export([ping/0, pong/0]).
ping() ->
Pong = spawn(ping_pong, pong, []),
Pong ! {self(), ping},
receive
pong ->
pong
end.
pong() ->
receive
{Ping, ping} ->
Ping ! pong
end.
Kommuniziert wird via Message Passing. Der Operator ! sendet eine Nachricht.
Aus Getting Started with Erlang.
Weblinks
- www.erlang.org Die Homepage von Open Source Erlang
- Joe Armstrongs Doktorarbeit
- Ein Wiki zu Erlang
- Concurrency Oriented Programming in Erlang
- yaws.hyber.org Die Homepage des Yaws Webservers
- Review von Concurrent Programming in Erlang
