Erlang (Programmiersprache)

Erlang ist eine Müll-gesammelte, gleichzeitige Mehrzweckprogrammiersprache und Laufzeitsystem. Die folgende Teilmenge von Erlang ist eine funktionelle Sprache, mit der strengen Einschätzung, der einzelnen Anweisung und dem dynamischen Schreiben. Es wurde von Ericsson entworfen, um verteilte, mit der Schuld tolerante, pausenlose Weich-Echtzeitanwendungen zu unterstützen. Es unterstützt das heiße Tauschen, so dass Code geändert werden kann, ohne ein System aufzuhören.

Während, wie man betrachtet, Fäden ein kompliziertes und fehlbares Thema auf den meisten Sprachen sind, stellt Erlang Sprachebene-Eigenschaften zur Verfügung, um Prozesse mit dem Ziel zu schaffen und zu führen, gleichzeitige Programmierung zu vereinfachen. Obwohl die ganze Parallelität in Erlang ausführlich ist, teilen Prozesse Verwenden-Nachricht mit, die statt geteilter Variablen geht, der das Bedürfnis nach Schlössern entfernt.

Die erste Version wurde von Joe Armstrong 1986 entwickelt. Es war ursprünglich eine Eigentumssprache innerhalb von Ericsson, aber wurde als offene Quelle 1998 veröffentlicht.

Geschichte

Der Name "Erlang", der Bjarne Däcker zugeschrieben ist, ist als eine Verweisung auf den dänischen Mathematiker und Ingenieur Agner Krarup Erlang, und (am Anfang mindestens) gleichzeitig als eine Abkürzung der "Sprache von Ericsson" verstanden worden.

Erlang wurde mit dem Ziel entworfen, die Entwicklung von Telefonie-Anwendungen zu verbessern. Die anfängliche Version von Erlang wurde in der Einleitung durchgeführt und war unter Einfluss der Programmiersprache im früheren Austausch von Ericsson verwendeter PLEX. Gemäß Armstrong ist die Sprache vom Laboratorium-Produkt bis echte Anwendungen im Anschluss an den Zusammenbruch des AXT-Austausches der folgenden Generation genannt die AXT-N 1995 gegangen. Infolgedessen wurde Erlang für den folgenden ATM-Austausch-AXD gewählt.

1998 der Ericsson wurde AXD301 Schalter bekannt gegeben, mehr als eine Million Linien von Erlang enthaltend, und hat berichtet, um eine Zuverlässigkeit neun "9" s zu erreichen. Kurz danach wurde Erlang innerhalb von Radiosystemen von Ericsson für neue Produkte verboten, eine Vorliebe für Nichteigentumssprachen zitierend. Das Verbot hat Armstrong und andere veranlasst, Ericsson zu verlassen. Die Durchführung war offener sourced am Ende des Jahres. Das Verbot an Ericsson wurde schließlich gehoben, und Armstrong wurde von Ericsson 2004 wiederangestellt.

2006 wurde heimische symmetrische in einer Prozession mehrgehende Unterstützung zum Laufzeitsystem und der virtuellen Maschine hinzugefügt.

Philosophie

Die Philosophie, die verwendet ist, um Erlang zu entwickeln, passt ebenso gut mit der Entwicklung von mit Sitz in Erlang

Systeme. Mike Williams, einen der drei Erfinder von Erlang zitierend:

  1. Finden Sie die richtigen Methoden — Design durch Prototyping.
  2. Es ist nicht gut genug, Ideen zu haben, Sie müssen auch im Stande sein, sie durchzuführen und zu wissen, dass sie arbeiten.
  3. Machen Sie Fehler auf einer kleinen Skala, nicht in einem Produktionsprojekt.

Funktionelle Programmierbeispiele

Ein factorial Algorithmus hat in Erlang durchgeführt:

- Modul (Tatsache). % Das ist die Datei 'fact.erl', das Modul und der Dateiname, muss vergleichen

- Export ([fac/1]). % exportiert Das die Funktion 'fac' arity 1 (1 Parameter, kein Typ, kein Name)

fac (0)-> 1; % Wenn 0, kehren Sie dann 1 zurück, sonst (bemerken Sie den Strichpunkt; die Bedeutung 'sonst')

fac (N) wenn N> 0, is_integer (N)-> N * fac (n-1).

% Bestimmen Sie rekursiv, dann geben Sie das Ergebnis zurück

% (bemerken Sie die Periode. wenn sie 'endif' bedeutet oder, 'endet Funktion')

</Quelle>

Ein Sortieren-Algorithmus (ähnlich der Schnellsortierung):

%% qsort:qsort (Liste)

%% Sortieren Sie eine Liste von Sachen

- Modul (qsort). % ist Das die Datei 'qsort.erl'

- Export ([qsort/1]). % Eine Funktion 'qsort' mit 1 Parameter wird (kein Typ, kein Name) exportiert

qsort ([])-> []; %, Wenn die Liste [] leer ist, gibt eine leere Liste (nichts zur Sorte) zurück

qsort ([Pivot|Rest])->

% Setzen Sie rekursiv eine Liste mit 'der Vorderseite' für alle Elemente zusammen, die vor 'der Türangel' sein sollten

% dann 'Türangel' dann 'Zurück' für alle Elemente, die nach 'der Türangel' sein sollten

qsort ([Vorderseite || Vorderseite

</Quelle>

Das obengenannte Beispiel ruft rekursiv die Funktion an, bis nichts sortiert werden muss. Der Ausdruck

Eine Vergleich-Funktion kann für mehr komplizierte Strukturen wegen der Lesbarkeit verwendet werden.

Der folgende Code würde Listen gemäß der Länge sortieren:

% Das ist Datei 'listsort.erl' (der Bearbeiter wird dieser Weg gemacht)

- Modul (listsort).

% Exportieren Sie 'by_length' mit 1 Parameter (sorgen Sie sich des Typs und Namens nicht)

- Export ([by_length/1]).

by_length (Listen)-> %-Gebrauch 'qsort/2' und stellt eine anonyme Funktion als ein Parameter zur Verfügung

qsort (Listen, Spaß (A, B)-> A

qsort ([Pivot|Rest], Kleiner)->

% Teilungsliste mit 'Kleineren' Elementen vor 'der Türangel' und nicht-'Smaller' Elementen

% nach 'der Türangel' und Sorte die Sublisten.

qsort ([X || X

Hier wieder genommen vom ersten Parameter zu sein, der und der Rest dessen gegeben ist, wird genannt. Bemerken Sie dass der Ausdruck

ist

nicht in der Form von verschieden

(im vorherigen Beispiel) abgesehen vom Gebrauch einer Vergleich-Funktion im letzten Teil, "Konstruktion eine Liste von solchen Elementen sagend, der ein Mitglied dessen ist, und", mit dem definieren früher als wahr

ist

Bemerken Sie auch, dass die anonyme Funktion in der Parameter-Liste der zweiten Definition dessen genannt wird, so dass darin durch diesen Namen innerhalb dieser Funktion Verweise angebracht werden kann. Es wird in der ersten Definition dessen nicht genannt, der sich mit dem Grundfall einer leeren Liste befasst und so kein Bedürfnis nach dieser Funktion, ganz zu schweigen von einem Namen dafür hat.

Datenstrukturen

Erlang hat acht primitive Datentypen:

  1. Ganze Zahlen: Ganze Zahlen werden geschrieben, weil Folgen von dezimalen Ziffern, zum Beispiel, 12, 12375 und-23427 ganze Zahlen sind. Arithmetik der ganzen Zahl ist genau und nur durch das verfügbare Gedächtnis auf der Maschine beschränkt. (Das wird Arithmetik der Willkürlichen Präzision genannt.)
  2. Atome: Atome werden innerhalb eines Programms verwendet, um bemerkenswerte Werte anzuzeigen. Sie werden als Reihen von alphanumerischen Konsekutivcharakteren, der erste Charakter geschrieben, der ein kleiner Brief ist. Atome können jeden Charakter enthalten, wenn sie innerhalb von einzelnen Notierungen eingeschlossen werden und eine Flucht-Tagung besteht, der jedem Charakter erlaubt, innerhalb eines Atoms verwendet zu werden.
  3. Hin- und Herbewegungen: Das Schwimmen von Punkt-Zahlen verwendet den IEEE 754 64-Bit-Darstellung. (Reihe: ±10.)
  4. Verweisungen: Verweisungen sind allgemein einzigartige Symbole, deren nur Eigentum darin besteht, dass sie für die Gleichheit verglichen werden können. Sie werden geschaffen, indem sie primitiven Erlang bewerten.
  5. Dualzahlen: Eine Dualzahl ist eine Folge von Bytes. Dualzahlen stellen eine raumeffiziente Weise zur Verfügung, binäre Daten zu versorgen. Primitive von Erlang bestehen, um Dualzahlen und für den effizienten Eingang/Produktion von Dualzahlen zusammenzusetzen und zu zersetzen.
  6. Pids: Pid ist für den Prozess-Bezeichner kurz — Pid wird von Erlang geschaffen primitive Pids sind Verweisungen auf Prozesse von Erlang.
  7. Häfen: Häfen werden verwendet, um mit der Außenwelt zu kommunizieren. Häfen werden mit der eingebauten Funktion (BIF) geschaffen. An Nachrichten kann gesandt und von Häfen erhalten werden, aber diese Nachrichten müssen dem so genannten "Hafen-Protokoll folgen."
  8. Späße: Späße sind Funktionsverschlüsse. Späße werden durch Ausdrücke der Form geschaffen:.

Und zwei zusammengesetzte Datentypen:

  1. Tupel: Tupel sind Behälter für eine festgelegte Zahl von Datentypen von Erlang. Die Syntax zeigt ein Tupel an, dessen Argumente Die Argumente sind, kann primitive Datentypen sein oder Datentypen zusammensetzen. Auf die Elemente eines Tupels kann in der unveränderlichen Zeit zugegriffen werden.
  2. Listen: Listen sind Behälter für eine variable Zahl von Datentypen von Erlang. Die Syntax zeigt eine Liste an, deren erstes Element ist, und dessen restliche Elemente die Liste sind. Die Syntax zeigt eine leere Liste an. Die Syntax ist dafür kurz. Auf das erste Element einer Liste kann in der unveränderlichen Zeit zugegriffen werden. Das erste Element einer Liste wird den Leiter der Liste genannt. Der Rest einer Liste, als sein Kopf entfernt worden ist, wird den Schwanz der Liste genannt.

Zwei Formen von syntaktischem Zucker werden zur Verfügung gestellt:

  1. Schnuren: Schnuren werden als doppelt angesetzte Listen von Charakteren geschrieben, das ist syntaktischer Zucker für eine Liste der ganzen Zahl ASCII Codes für die Charaktere in der Schnur so zum Beispiel, die Schnur "Katze" ist Schnellschrift dafür. Es hat teilweise Unterstützung für Unicode-Schnuren
  2. Aufzeichnungen: Aufzeichnungen stellen einen günstigen Weg zur Verfügung, für ein Anhängsel mit jedem der Elemente in einem Tupel zu vereinigen. Das erlaubt uns, sich auf ein Element eines Tupels namentlich und nicht durch die Position zu beziehen. Ein Vorübersetzer nimmt die Rekorddefinition und ersetzt sie durch die passende Tupel-Verweisung.

Es hat keine Möglichkeit, Klassen zu definieren, obwohl es einige Außenbibliotheken hat, um das zu tun

Parallelität und Vertriebsorientierung

Die Hauptkraft von Erlang ist Unterstützung für die Parallelität. Es hat einen kleinen, aber starken Satz von Primitiven, um Prozesse zu schaffen und unter ihnen zu kommunizieren. Prozesse sind die primären Mittel, eine Anwendung von Erlang zu strukturieren. Prozesse von Erlang folgen lose dem Modell des Kommunizierens folgender Prozesse (CSP). Sie bedienen Systemprozesse noch Betriebssystemfäden weder, aber Leichtgewichtler geht etwas ähnlich Javas ursprünglichen "grünen Fäden" in einer Prozession. Wie Betriebssystemprozesse (und verschieden von grünen Fäden und Betriebssystemfäden) haben sie keinen geteilten Staat zwischen ihnen. Das geschätzte minimale oben für jeden ist 300 Wörter; so können viele von ihnen ohne erniedrigende Leistung geschaffen werden: Ein Abrisspunkt mit 20 Millionen Prozessen ist erfolgreich durchgeführt worden. Erlang hat symmetrische Mehrverarbeitung seit der Ausgabe R11B des Mais 2006 unterstützt.

Zwischenprozess-Kommunikation arbeitet über einen geteilten - nichts asynchrone Nachricht vorübergehendes System: Jeder Prozess hat einen "Briefkasten", eine Warteschlange von Nachrichten, die durch andere Prozesse gesandt und noch nicht verbraucht worden sind. Ein Prozess verwendet den Primitiven, um Nachrichten wiederzubekommen, dieses Match hat Muster gewünscht. Eine nachrichtenbehandelnde Routine prüft Nachrichten der Reihe nach gegen jedes Muster, bis zu einem von ihnen Matchs. Wenn die Nachricht verbraucht und vom Briefkasten die Prozess-Zusammenfassungsausführung entfernt wird. Eine Nachricht kann jede Struktur von Erlang, einschließlich Primitiver (ganze Zahlen, Hin- und Herbewegungen, Charaktere, Atome), Tupel, Listen und Funktionen umfassen.

Das Codebeispiel zeigt unten die eingebaute Unterstützung für verteilte Prozesse:

% Schaffen Sie einen Prozess und rufen Sie die Funktion web:start_server (Hafen, MaxConnections) an

ServerProcess = Laich (Web, start_server, [Hafen, MaxConnections]),

% Schaffen Sie einen entfernten Prozess und rufen Sie die Funktion an

% web:start_server (Hafen, MaxConnections) auf der Maschine RemoteNode

RemoteProcess = Laich (RemoteNode, Web, start_server, [Hafen, MaxConnections]),

% Senden Sie eine Nachricht an ServerProcess (asynchron). Die Nachricht besteht aus einem Tupel

% mit dem Atom "Pause" und die Nummer "10".

ServerProcess! {Pause, 10},

% Erhalten Sie Nachrichten, die an diesen Prozess gesandt sind

erhalten Sie

a_message-> do_something;

{Daten, DataContent}-> Griff (DataContent);

{hallo, Text}-> io:format ("Hat hallo Nachricht bekommen: ~s", [Text]);

{auf Wiedersehen, Text}-> io:format ("Hat auf Wiedersehen Nachricht bekommen: ~s", [Text])

Ende.

</Quelle>

Da sich das Beispiel zeigt, können Prozesse auf entfernten Knoten geschaffen werden, und die Kommunikation mit ihnen ist im Sinn durchsichtig, dass die Kommunikation mit entfernten Prozessen genau als Kommunikation mit lokalen Prozessen arbeitet.

Parallelität unterstützt die primäre Methode des Fehlerberührens in Erlang. Wenn ein Prozess abstürzt, herrscht er ordentlich und sendet eine Nachricht an den Steuern-Prozess, der handeln kann. Dieser Weg des Fehlers, der Zunahme-Haltbarkeit behandelt, und reduziert Kompliziertheit des Codes.

Durchführung

Die Durchführung von Ericsson Erlang lädt virtuelle Maschine bytecode, der zum Gewindecode in der Ladezeit umgewandelt wird. Es schließt auch einen heimischen Codebearbeiter auf den meisten Plattformen ein, die durch die Hohe Leistung Projekt von Erlang (HiPE) an der Uppsala Universität entwickelt sind. Seit dem Oktober 2001 wird das System von HiPE in Open Source von Ericsson Erlang/OTP System völlig integriert. Es unterstützt auch Interpretation direkt aus dem Quellcode über den abstrakten Syntax-Baum über die Schrift bezüglich R11B-5.

Das heiße Codeladen und die Module

Erlang unterstützt Sprachebene Dynamische Aktualisierende Software. Um das durchzuführen, wird Code geladen und als "Modul"-Einheiten geführt; das Modul ist eine Kompilationseinheit. Das System kann zwei Versionen eines Moduls im Gedächtnis zur gleichen Zeit behalten, und Prozesse können Code von jedem gleichzeitig führen. Die Versionen werden das "neue" und die "alte" Version genannt. Ein Prozess wird in die neue Version nicht umziehen, bis es einen Außenanruf zu seinem Modul macht.

Ein Beispiel des Mechanismus des heißen Codeladens:

%% Ein Prozess, dessen nur Job ist, einen Schalter zu behalten.

%% Die erste Version

- Modul (Schalter).

- Export ([Anfang/0, codeswitch/1]).

fangen Sie -> Schleife (0) an.

Schleife (Summe)->

erhalten Sie

{Zunahme, Graf}->

Schleife (Sum+Count);

{Schalter, Pid}->

Pid! {Schalter, Summe},

Schleife (Summe);

code_switch->

? MODULE:codeswitch (Summe)

% Zwingen Sie den Gebrauch von 'codeswitch/1' von der letzten MODUL-Version

Ende.

codeswitch (Summe)-> Schleife (Summe).

</Quelle>

Für die zweite Version fügen wir die Möglichkeit hinzu, die Zählung zur Null neu zu fassen.

%% Die zweite Version

- Modul (Schalter). - Export ([Anfang/0, codeswitch/1]). fangen Sie -> Schleife (0) an. Schleife (Summe)-> erhalten Sie {Zunahme, Graf}-> Schleife (Sum+Count);

Rücksetzen->

Schleife (0);

{Schalter, Pid}-> Pid! {Schalter, Summe}, Schleife (Summe); code_switch-> ? MODULE:codeswitch (Summe) Ende. codeswitch (Summe)-> Schleife (Summe).</Quelle>Wenn

nur er eine Nachricht erhalten wird, die aus dem Atom besteht, wird 'code_switch' die Schleife einen Außenanruf codeswitch/1 durchführen (ist ein Vorverarbeiter, der für das aktuelle Modul Makro-ist). Wenn es eine neue Version des "Gegen"-Moduls im Gedächtnis gibt, dann wird seine Codeswitch/1-Funktion genannt. Die Praxis, einen spezifischen Zugang-Punkt in eine neue Version zu haben, erlaubt dem Programmierer, Staat darin umzugestalten, was in der neueren Version erforderlich ist. In unserem Beispiel behalten wir den Staat als eine ganze Zahl.

In der Praxis werden Systeme mit Designgrundsätzen von der Offenen Telekommunikationsplattform aufgebaut, die zu mehr Code ausbaufähige Designs führt. Das erfolgreiche heiße Codeladen ist ein heikles Thema; codieren Sie muss geschrieben werden, um von den Möglichkeiten von Erlang Gebrauch zu machen.

Vertrieb

1998 hat Ericsson Erlang als offene Quelle befreit, um seine Unabhängigkeit von einem einzelnen Verkäufer zu sichern und Bewusstsein der Sprache zu vergrößern. Erlang, zusammen mit Bibliotheken und der verteilten Echtzeitdatenbank Mnesia, bildet die Sammlung von Open Telecom Platform (OTP) von Bibliotheken. Ericsson und einige andere Gesellschaften bieten kommerzielle Unterstützung für Erlang an.

Seit der offenen Quellausgabe ist Erlang von mehreren Unternehmen weltweit, einschließlich Nortel und T-Mobile verwendet worden. Obwohl Erlang entworfen wurde, um eine Nische zu füllen, und eine dunkle Sprache für den grössten Teil seiner Existenz geblieben ist, wächst seine Beliebtheit erwartet, gleichzeitige Dienstleistungen zu fordern.

Erlang hat etwas Gebrauch gefunden, indem er MMORPG Server aufs Feld schickt.

Erlang ist für viele Unix ähnliche Betriebssysteme, einschließlich Mac OS X, sowie Windows von Microsoft verfügbar.

Das Projektverwenden Erlang

Das Projektverwenden Erlang schließt ein:

  • Datenbank hat (verteilt):
  • CouchDB, eine dokumentenbasierte Datenbank, die MapReduce verwendet
  • Membase, Datenbankverwaltungssystem optimiert, um Daten hinter interaktiven Webanwendungen zu versorgen.
  • Riak, eine verteilte Datenbank
  • SimpleDB, eine verteilte Datenbank, die ein Teil von Webdiensten von Amazonas ist
  • Chat:
  • ejabberd, ein Ausziehbares Nachrichtenübermittlungs- und Anwesenheitsprotokoll (XMPP) Moment-Nachrichtenübermittlungsserver
  • Facebook Chat-System, das auf ejabberd gestützt ist
  • CM:
  • Zotonic, ein zufriedenes Verwaltungssystem und Webfachwerk
  • Warteschlange:
  • RabbitMQ, eine Durchführung von Advanced Message Queuing Protocol (AMQP)
  • Arbeitsfläche:
  • Flügel 3D, ein 3D-Modellierer
  • Webserver:
  • Gieren-Webserver
  • Werkzeuge
  • Mehrprotokoll der offenen Quelle von Tsung hat Lastprobewerkzeug verteilt
  • Beweglich:
  • WhatsApp, beweglicher Bote
  • Unternehmen:
  • GitHub egitd, ein Ersatz für den Aktienschwachkopf-Dämon dass Schiffe mit dem Schwachkopf
  • Issuu, ein Online-Digitalherausgeber
  • Twitterfall, ein Dienst, Tendenzen und Muster vom Gezwitscher anzusehen
  • Handel
  • Goldman Sachs, Hochfrequenzhandelsprogramme.
  • Smarkets, Sportwetten tauscht aus
  • Spielserver
  • Battlestar Galactica online durch Bigpoint

Klone

Erlang hat Klone seiner Parallelitätsmöglichkeiten für andere Sprachen begeistert:

  • Reia
  • Scala
  • Wurfpfeil

Weiterführende Literatur

Außenverbindungen


EV / Wohlbefinden (Programmiersprache)
Impressum & Datenschutz