Zum Inhalt springen

Erlang (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 6. April 2011 um 10:45 Uhr durch Mnin (Diskussion | Beiträge) (Versionssprung). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Erlang
Basisdaten
Paradigmen: Funktionale Programmiersprache, Nebenläufige Programmierung
Erscheinungsjahr: 1987
Designer: Joe Armstrong
Entwickler: Ericsson
Aktuelle Version: R14B02  (16. März 2011)
Typisierung: dynamisch, stark
Wichtige Implementierungen: Erlang
Beeinflusst von: Prolog
Beeinflusste: Clojure, Scala
Betriebssystem: Windows, Linux, Mac OS X, Solaris
Lizenz: Abgewandelte MPL
Erlang.org

Erlang ist eine Programmiersprache, die bei Ericsson von Joe Armstrong und anderen entwickelt wurde. Sie ist nach dem dänischen Mathematiker Agner Krarup Erlang benannt, kann aber auch für Ericsson language stehen.[1]

Eigenschaften

Spricht man von Erlang, meint man meist nicht nur die relativ kompakte Sprache, sondern auch das Laufzeitsystem und die umfangreiche Bibliothek. Zusammen wird das System Erlang/OTP genannt, wobei OTP eine Abkürzung für The Open Telecom Platform ist. Es handelt sich dabei um eine Middleware für den Bau verteilter, hochverfügbarer Systeme. Hervorzuheben sind z. B. die verteilten Datenbanken Mnesia und CouchDB.

Erlang wurde ursprünglich für die Programmierung von Anwendungen in der Telekommunikation geschaffen, insbesondere für Vermittlungsstellen von Telefonnetzen (Switch).

Die dort vorhandenen besonderen Anforderungen 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äufig ausgerichtete 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 Nebeneffekten 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 ressourcenschonend implementiert. Der in Erlang geschriebene Webserver Yaws mit seiner hohen Skalierbarkeit ist ein Beispiel dafür.

Die Syntax von Erlang erinnert an die von Prolog, was nicht ganz verwundert, da das System anfänglich als in Prolog geschriebener Interpreter vorlag.

Basierend auf dem von Erlang verwendeten Binärformat[2] wurde das allgemeine Binärformat BERT und ein darauf aufbauendes Remote Procedure Call-Protokoll entwickelt.[3]

Beispiele

Berechnung der Fakultät

-module(test).
-export([fac/1]).

fac(0) -> 1;
fac(N) -> N * fac(N-1).
%% quicksort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|Rest]) ->
    qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >= Pivot]).

Im obigen Beispiel wird die Funktion qsort rekursiv aufgerufen, bis nichts mehr zum Sortieren vorhanden ist.

Der Ausdruck

[ X || X <- Rest, X < Pivot]

kann interpretiert werden als "wähle alle 'X', wobei 'X' ein Element von 'Rest' ist und 'X' kleiner ist als 'Pivot'". Dies hat eine sehr bequeme Art der Listenbehandlung zur Folge (in der Literatur als list comprehension bezeichnet).

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 per Message Passing. Der Operator ! sendet eine Nachricht, die asynchron übertragen wird, d.h. der Prozess wartet nicht, bis die Nachricht empfangen wurde.

Prominente Anwendungen

  • CouchDB – Datenbank mit Fokus auf Dokumentenverwaltung
  • ejabberd – XMPP Server
  • RabbitMQ – AMQP Messaging Server
  • SimpleDB – Datenbank
  • Wings 3D – Modeler
  • Yaws – Webserver
  • YXA – SIP Server

Kommerzieller Einsatz von Erlang

Erlang ist eine der wenigen funktionalen Programmiersprachen, die auch in der Industrie eingesetzt wird. Zu den bekannten Anwendern gehören:

  • Bluetail/Alteon/Nortel (verteiltes, fehlertolerantes E-Mail-System, SSL-Beschleuniger)
  • Cellpoint (Ortsbasierte mobile Dienste)
  • Corelatus (SS7 signalling black box).
  • Ericsson (AXD301-Switch)
  • Facebook (ejabberd-based Chat Engine)
  • Finnish Meteorological Institute (Datenerfassung und Echtzeitüberwachung)
  • GitHub (Als Git-Server[4] und für RPC[5])
  • IN Switch Solutions (ePIN elektronisches Zahlungssystem)
  • Mobilearts (GSM und UMTS-Dienste)
  • Motivity Telecom (SS7/ISDN Gateways)
  • Netkit Solutions (Netzwerktechniküberwachung & Operations-Support-Systeme)
  • Process-one (Kommerzialisiert den ejabberd XMPP Server)
  • T-Mobile (früher: one2one)
  • Telia (Telekomdienstleister)
  • Vail Systems
  • Tenerife Skunkworks (Online-Pokerserver)

Einzelnachweise

  1. Interview mit Joe Armstrong auf CIO.com.au (englisch)
  2. http://erlang.org/doc/apps/erts/erl_ext_dist.html
  3. http://bert-rpc.org/
  4. http://github.com/blog/112-supercharged-git-daemon
  5. http://github.com/blog/531-introducing-bert-and-bert-rpc