Elixir – mit Erlangs Erben in die Zukunft

Seite 2: Elixir

Inhaltsverzeichnis

Funktionale Sprachen gibt es zahlreich und seit langer Zeit; genannt seien zur Einordnung JavaScript, Python, Ruby und XSLT. Alle haben durchaus Vor- und Nachteile. Erlang gehört ebenfalls zur Gruppe der funktionalen Sprachen und erinnert von der Syntax her an das bei vielen Entwicklern ungeliebte Prolog. An dem Punkt setzt Elixir an: Die Sprache nutzt die Vorteile von Erlang, kommt allerdings mit einer deutlich besseren und eleganteren Syntax daher.

Die Elixir-Entwicklung wurde im Jahr 2013 von José Valim, der übrigens auch Mitglied des Ruby on Rails Core Teams ist, initiiert. Hauptgrund für den Wunsch nach einer neuen Sprache war die Erweiterbarkeit der Erlang VM.

Zunächst ein kurzer Blick auf die Besonderheiten von Elixir. Wichtig sind vor allem die Möglichkeiten zur Rekursion und die sogenannten Funktionen höherer Ordnung. Wie im folgenden Codeausschnitt zu sehen ist, akzeptieren sie andere Funktionen als Argumente:

defmodule Content do
def foursome(value, function) do
4 * function.(value)
end
end

Elixir unterstützt zudem das Konzept der Reflexion beziehungsweise der Metaprogrammierung. Die Sprache besitzt also die Fähigkeit, sich selbst zu analysieren. Ein einführendes Beispiel dazu gibt es auf GitHub.

Auch der Einsatz von Streams ist in Elixir möglich: Man verwendet sie, um Daten in eine Anwendung einzulesen oder sie aus einer Applikation auszugeben. Das zugrunde liegende Konzept ist dabei mit dem aus Java vergleichbar.

Geboten wird außerdem ein Pattern Matching, mit dem sich Daten nach einem String durchsuchen lassen.

Um Elixir nutzen zu können, ist Erlang 17.0 (oder höher) nötig. Die Sprache unterstützt Linux-, Mac-OS-X- und Windows-Systeme. Unter Windows lässt sich der Web Installer zur Installation verwenden. Auf Linux-Systemen gibt es die bekannten Installationsvarianten. Hier der Weg für Ubuntu und Debian:

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
&& sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install elixir

Nach erfolgreicher Installation lässt sich die interaktive Shell iex beziehungsweise unter Windows iex.bat starten. Wer mit Ruby arbeitet, wird sich schnell zu Hause fühlen, schließlich erinnert iex stark an irb. Das Tool bietet eine umfangreiche Dokumentation. Will man sich etwa die Beschreibung des Enum-Modul ansehen, ist h(Enum) einzugeben.

Mit Strg+C lässt sich das BREAK-Menü öffnen, über das Nutzer die Shell beenden und Einblick in laufende Prozesse nehmen können. Wichtig ist darüber hinaus die Tastenkombination Strg+G. Mit dem Menü, dass sich so öffnen lässt, kann man unter anderem eine zusätzliche Shell bereitstellen.

User switch command 
--> s 'Elixir.IEx'
--> c

Personalisiert wird die Shell über h IEx.configure/1. Die Konfiguration kann man dabei für das aktuelle Projekt oder global anpassen.

Rings um Elixir hat sich eine kleine, aber aktive Community etabliert, die mit ihren selbst entwickelten Tools und Anwendungen die Arbeit mit der Sprache komfortabler macht. Hervorzuheben ist vor allem der Paketmanager hex.pm, dank dessen sich Erlang- und Elixir-Code direkt als Pakete installieren lässt. Interessant ist zudem die Template-Engine EEx, die das Kompilieren von Templates zu Code ermöglicht. Auch bei ihr wird übrigens wieder die Nähe von Elixir und Ruby deutlich, da sich EEx am bekannten Ruby ERB orientiert:

<%= @content %>

Wie der Codeschnipsel zeigt, arbeitet EEx mit der üblichen Platzhaltersyntax. Um bei der Fehlersuche nicht auf den Komfort anderer Sprachen verzichten zu müssen, existiert mit ExUnit ein Test-Framework. Der Einsatz folgt dem folgenden Muster:

ExUnit.start

defmodule TestCase do
use ExUnit.Case

test "the truth" do
assert true
end
end

Abschließend ist auch für Elixir ein Build Tool erhältlich: mix ist das native Werkzeug der Wahl, wenn es darum geht, Projekte zu kompilieren.

Um sich über aktuelle Entwicklungen aus dem Elixir-Umfeld auf dem Laufenden zu halten, gibt es mittlerweile unter anderem eine Mailing-Liste, einen Twitter-Account und regelmäßige Veranstaltungen, über die die Community via GitHub informiert.