MoR: Einführung in Elixir & OTP mit Elixir

MoR: Einführung in Elixir & OTP mit Elixir
Zum zweiten Mal war Elixir Thema bei Monster on Rails, der Software Engineering User Group aus Münster. Vor 1,5 Jahren beschäftigten wir uns zum ersten Mal mit der von José Valim entwickelten und auf der Erlang VM basierenden funktionalen Programmiersprache. Seitdem ist viel passiert und Elixir trägt mittlerweile die Versionsnummer 1. Wir hatten also genügend Gesprächsmaterial, um in der Januar Ausgabe einen weiteren Abend mit dieser spannenden Technologie zu füllen.

Mit knapp 20 Teilnehmern war die münsteraner User Group gut besucht und auch einige Besucher von außerhalb waren diesmal dabei. Da der Wissensstand bei der noch jungen Programmiersprache bei allen anwesenden Softwareentwicklern recht heterogen verteilt war, hatten wir uns für 2 Vorträge entschieden. Zunächst wurde eine Einführung in das Thema gegeben und im Anschluss erfolgte eine genauere Betrachtung von OTP in Verbindung mit Elixir.

Einführung in Elixir \- Patrick Oscity

Den Anfang machte Patrick Oscity, der im ersten Vortrag die Grundlagen der noch relativ jungen funktionalen Programmiersprache erläuterte. Elixir basiert, wie anfänglich erwähnt, auf der Erlang VM (BEAM) und bietet Programmierern somit eine Plattform zur Entwicklung von skalierbaren, verteilten und fehlertoleranten Applikationen. Trotz des zarten Alters der Sprache ist das Ökosystem bereits ziemlich ausgereift und so werden Werkzeuge wie eine interaktive Konsole (REPL), ein Build-Tool (Mix) und ein Paketmanager (Hex) mitgeliefert. Darüber hinaus bietet die Sprache eingebaute Werkzeuge für Dokumentation und Unit Testing.

Bei Elixir handelt es sich um eine dynamisch typisierte Sprache, wobei keine benutzerdefinierten Typen existieren. Funktionen bilden den Kern der Sprache und dienen als kleinste Kapselungseinheit für Quellcode. Anonyme Funktionen können in jedem Kontext erzeugt werden, wobei benannte Funktionen immer in einem Modul geschachtelt sein müssen. So ist es möglich, zur Laufzeit Module auszutauschen und z. B. durch eine neue, verbesserte Version zu ersetzen (Hot Code Swapping). Eine wichtige Komponente der Sprache ist das Pattern Matching, welches in den Argument-Listen von Funktionsdefinitionen und in diversen anderen Konstrukten verwendet wird. Dieses ersetzt in vielen Fällen bedingte Anweisungen und ermöglicht den schnellen und einfachen Zugriff auf beliebig tief verschachtelte Daten. Von besonderer Bedeutung ist die Zerlegung von Listen in das erste Element und den Rest der Liste – ein Konzept welches der Sprache Lisp entstammt. Dies ermöglicht es, mit relativ schlankem Code rekursiv über Listen zu iterieren und macht somit Schleifenkonstruktionen überflüssig. Da dies jedoch nicht immer zu lesbarem Code führt und von Einsteigern oft als Hürde wahrgenommen wird, gibt es mit dem reichhaltigen Enum-Modul sowie der for-Anweisung auch nicht-rekursive Alternativen um über Kollektionen zu iterieren.

Eine der größten Stärken der Erlang VM ist die tief verankerte Unterstützung zur Implementierung von nebenläufigen Programmen. Die hierfür herangezogenen Konzepte unterscheiden sich aber von den weitverbreiteten Sprachen wie C, Java und deren Abkömmlingen. Man spricht im Elixir-Kontext von Prozessen, jedoch sind diese viel leichtgewichtiger als die uns bekannten Unix-Prozesse und Threads. Somit können sie flexibler eingesetzt werden – Millionen gleichzeitig laufender Erlang-Prozesse sind z.B. kein Problem. Prozesse können über ein integriertes Messaging-System miteinander kommunizieren und so Informationen austauschen. Ferner ist es möglich, Prozesse miteinander zu verknüpfen, sodass diese sich gegenseitig benachrichtigen können, wenn etwas schief gelaufen ist. Für all diese Anwendungsfälle ist es dabei unerheblich, ob zwei Prozesse auf dem gleichen Rechner oder auf unterschiedlichen durch ein Netzwerk verbundenen Rechnern laufen.

OTP mit Elixir \- Heiko Zeus

Im zweiten Vortrag ging Heiko Zeus auf die oben genannten Elixir-Prozesse und deren Standardisierungsmöglichkeiten mit Hilfe von OTP ein. OTP (“Open Telecom Platform”) implementiert eine Reihe von Mustern, mit deren Hilfe Prozesse bestimmte Aufgaben übernehmen können. Zunächst wurde das Server-Muster vorgestellt. Dieses kann zum einen selbst mit Hilfe von spawn, send und receive implementiert werden; allerdings bietet OTP auch Abstraktionsebenen, die die Implementierung vereinfachen und die Stabilität der Lösung verbessern. Im Vortrag wurden hierbei Lösungen mit GenServer und Agent vorgestellt. Anschließend wurde gezeigt, wie Supervisoren dafür sorgen können, dass abgestürzte Prozesse neu gestartet werden können. Dieses Verhalten kann für das Bauen von fehlertoleranten Anwendungen genutzt werden, bei denen Fehler in einem Teil des Systems abgefangen werden können und nicht zu Problemen im Gesamtsystem führen.

Im Anschluss an beide Vorträge wurde sich noch einige Zeit über Elixir ausgetauscht. Alle Anwesenden waren sich über das große Potential von Elixir im Bereich der funktionalen Programmiersprachen einig.

Wie immer gilt unser Dank den beiden Vortragenden und allen Besuchern die durch ihre Anwesenheit, ihre Fragen und Diskussionsbeiträge am Gelingen der User Group Anteil hatten. Das nächste Treffen der Monster on Rails User Group findet am 26. Februar statt.

Über Monster on Rails

Die “Monster on Rails” User Group Münster beschäftigt sich mit Themen rund ums Software Engineering, insbesondere Ruby und Ruby on Rails, diskutiert aber auch über Technologien, die um das Ruby-Ökosystem herum existieren, wie z. B. Javascript, Node.js, Go, Docker und NoSQL. In der Regel treffen wir uns immer am letzten Donnerstag im Monat. Nach einigen Vorträgen zum jeweiligen Thema beenden wir den Abend in entspannter Atmosphäre bei einem Bier. Wir freuen uns über jedes neue Gesicht!

Sie suchen den richtigen Partner für erfolgreiche Projekte?
Nehmen Sie Kontakt mit uns auf →