[[Vorlage(Getestet, hardy, gutsy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(./erlang_logo.gif, align=left)]] [http://www.erlang.org/ Erlang] {en} ist eine [:Programmiersprache:], die hauptsächlich bei Anwendungen im Bereich Telekommunikation genutzt wird und von Ericsson entwickelt wurde, aber heute OpenSource ist. Ihre Stärke ist die parallele Verarbeitung von Programmlogik. Es gibt im Desktop-Bereich nicht viele Anwendungen, die auf dieser Sprache basieren. Prominente Gegenbeispiele sind der Jabber-Server [:ejabberd:], der Webserver [http://yaws.hyber.org/ Yaws] {en} und [http://www.wings3d.com/ wings3d] {en} . = Installation = Möchte man Erlang nutzen, muss man das Paket * '''erlang''' (''universe'', [2]) installieren [1]. Für weitere Informationen sind noch folgende Pakete geeignet: * '''erlang-doc-html''' (''universe'') - HTML-Dokumentation * '''erlang-manpages''' (''universe'') - [:man:Manpages] = Besonderheiten der Sprache = == Funktional == Erlang ist eine [http://de.wikipedia.org/wiki/Funktionale_Programmierung funktionale Programmiersprache] {de} . Dies bedeutet, dass ein komplettes Erlang-Programm ausschliesslich aus einer Aneinanderreihung von Funktionen und deren Aufrufen besteht. Im Gegensatz zu imperativen Programmiersprachen gibt es keinen "Ablaufplan" eines Programms, sondern der Ablauf wird durch Funktionen, deren Rückgabewerten und Ereignissen bestimmt. Erlang kommt fast ohne Schleifen und Zuweisungen aus, setzt dafür verstärkt auf Rekursionen. == Modular == Erlang-Programme bestehen fast ausschließlich aus miteinander agierenden Modulen. Jede Funktion schreibt man in ein Modul und verschachtelt die Module miteinander. == Hohe Verfügbarkeit == Eine stärke von Erlang liegt darin, dass man Code ohne Probleme zur Laufzeit ändern kann. Man muss eine Serveranwendung also nicht anhalten um etwas auszubessern oder einen Bug zu beseitigen, sondern man kann das entsprechende Module einfach zur Laufzeit austauschen. Dadurch erreichen Erlang-Programme eine hohe Verfügbarkeit. Ericcson hat die Verfügbarkeit ihrer Erlang-Systeme auf über 99% im Jahr beziffert, was etwa einer Ausfallzeit von 3,65 Tagen/Jahr entspricht. == Parallelität == Erlang Programme sind unter hohen Auslastungen weit weniger rescourcen- und rechenintensiv wie Programme in anderen Sprachen. Dies liegt vor allem an der Parallelität, auch [http://de.wikipedia.org/wiki/Nebenläufigkeit Nebenläufigkeit] {de} genannt. Die Erlang-Laufzeitumgebung erkennt Programmanweisungen welche nicht voneinander abhängig sind und verteilt diese auf mehrere Pipelines zur selben CPU oder auf mehrere CPUs, falls vorhanden um diese parallel ablaufen zu lassen. Ein simples Beispiel wäre: {{{#!vorlage Befehl A = 1+5. B = 4+6. C = A+B. }}} In normalen Programmiersprachen würden diese drei Zuweisungen hintereinander ausgeführt werden. Erlang erkennt jedoch, dass die ersten zwei Zuweisungen nicht voneinander abhängig sind und parallelisiert sie. = Die Erlang-Shell = Um Erlang Programme zu testen, zu warten oder auch einfach nur um ein bisschen mit Erlang rumzuspielen bietet sich die Erlang-Shell an. Diese wird automatisch mit Erlang mitinstalliert und kann vom Terminal [3] aus, durch den Befehl: {{{#!vorlage Befehl erl }}} gestartet werden. = HalloWelt-Programm = In den meisten Sprachen ist das HalloWelt-Programm das erste was man schreibt. Auch in Erlang kann man dies machen, jedoch sollte klar sein, dass dies in Erlang etwas kompliziert aussieht, da Erlang seine Stärke in komplexen und nicht in einfachen Programmen besitzt. Zuerst erstellt man eine Datei '''hallo.erl''' mit folgendem Inhalt: {{{-module(hallo). % Der Name unseres Moduls. -export([hallo_welt/0]). % Deklaration der Funktion die wir aus dem Modul exportieren möchten. hallo_welt() -> io:format("Hallo Welt ~n"). % Was bei Aufruf der Funktion geschehen soll, hier: es soll Hallo Welt auf den Screen geschrieben werden. }}} Danach öffnet man die Erlang-Shell,kompiliert das Modul und führt die Funktion aus: {{{#!vorlage Befehl ~$ erl Erlang (BEAM) emulator version 5.5.5 [source] [async-threads:0] [kernel-poll:false] Eshell V5.5.5 (abort with ^G) 1> c(hallo). {ok,hallo} 2> hallo:hallo_welt(). Hallo Welt ok 3> }}} Der Befehl {{{#!vorlage Befehl c(hallo). }}} hat unser Modul kompiliert und der Befehl: {{{#!vorlage Befehl hallo:hallo_welt(). }}} ruft aus dem kompilierten Modul ``hallo`` die Funktion ``hallo_welt()`` auf. = Links = * [http://www.erlang.org/ Homepage des OpenSource Erlangs] {en} * [http://www.dmoz.org/Computers/Programming/Languages/Erlang/ OpenDirectory-Links zu Erlang] {en} * [http://trapexit.org/ Erlang-Community] {en} * [http://mirror.engelkotzen.net/video/24c3/matroska/24c3-2216-de-erlang.mkv Vortrag auf dem 24C3 über Erlang] {de} * [http://de.wikipedia.org/wiki/Erlang_%28Programmiersprache%29 Die Wikipedia über Erlang] {de} ---- # tag: Programmierung