- Erlang (Programmiersprache)
-
Erlang
Funktionale ProgrammierspracheBasisdaten Paradigmen: Funktionale Programmiersprache, Nebenläufige Programmierung Erscheinungsjahr: 1987 Entwickler: Ericsson Aktuelle Version: R14B04 (5. Oktober 2011) Typisierung: dynamisch, stark wichtige Implementierungen: Erlang Einflüsse: 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]
Inhaltsverzeichnis
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:
- Parallelität
- hohe Verfügbarkeit
- Fehlertoleranz
- Auswechseln von Modulen zur Laufzeit etc.
Erlang genügt den Paradigmen der funktionalen, nebenläufigen und verteilten Programmierung. Joe Armstrong, der geistige Vater von Erlang, bezeichnet sie am liebsten als Concurrency Oriented Programming Language (COPL), 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 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 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
%% 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 (Mobilfunkbetreiber)
- Telia (Telekomdienstleister)
- Vail Systems
- Tenerife Skunkworks (Online-Pokerserver)
- Clustrx (HPC-OS)[6]
- WhatsApp (Mobiler Messenger) [7]
Einzelnachweise
- ↑ Interview mit Joe Armstrong auf CIO.com.au (englisch)
- ↑ http://erlang.org/doc/apps/erts/erl_ext_dist.html
- ↑ http://bert-rpc.org/
- ↑ http://github.com/blog/112-supercharged-git-daemon
- ↑ http://github.com/blog/531-introducing-bert-and-bert-rpc
- ↑ http://www.erlang-solutions.com/section/113/
- ↑ http://blog.whatsapp.com/index.php/2011/09/one-million/
Weblinks
- www.erlang.org – Die Homepage von Open Source Erlang
- yaws.hyber.org – Die Homepage des 'Yaws'-Webservers
- 24c3 – Konzeptionelle Einführung in Erlang
- www.erlang-dach.org – Erlang D.A.CH ist die deutschsprachige Anwendergruppe zu Erlang.
- Erlang-Podcast von Tim Pritlove auf Chaosradio Express (März 2008)
- Programming Rules and Conventions
Wikimedia Foundation.