Erlang/OTP 28.0 markiert einen bedeutenden Meilenstein in der Entwicklung des beliebten funktionalen Programmiersystems. Diese Version bringt eine Reihe von innovativen Funktionen, tiefgreifenden Verbesserungen und auch einige Anpassungen, die für Entwickler wichtig sind, um ihre Software effizienter, sicherer und flexibler zu gestalten. Die Gemeinschaft der Erlang-Entwickler hat erneut bewiesen, wie engagiert sie an der Weiterentwicklung dieser leistungsfähigen Plattform arbeitet, die speziell für hochverfügbare, skalierbare und nebenläufige Systeme entwickelt wurde. Eine der herausragenden Neuerungen in Erlang/OTP 28.
0 ist die Einführung der Möglichkeit für Prozesse, Prioritätsnachrichten zu empfangen. Dieses Feature orientiert sich an EEP 76 und ermöglicht es Prozessen, Nachrichten mit besonderer Priorität bevorzugt zu behandeln, was gerade in zeitkritischen Anwendungen von großem Vorteil ist. Diese Funktion erweitert die Flexibilität der Prozesskommunikation erheblich und erlaubt es Entwicklern, die Kontrolle über Nachrichtenflüsse präziser zu steuern. Zudem wurde die Syntax von Comprehensions signifikant erweitert. Insbesondere wurden sogenannte „Zip-Generatoren“ eingeführt, die es erlauben, mehrere Generatoren parallel auszuführen.
Ein Beispiel für diese Funktion zeigt, wie aus zwei Listen parallel Elemente miteinander addiert werden können, wie etwa [A+B || A <- [1,2,3] && B <- [4,5,6]], welches die Ergebnisliste [5,7,9] erzeugt. Diese Erweiterung vereinfacht komplexere Datenverarbeitungen und macht den Code gleichzeitig lesbarer und eleganter. Zusätzlich kann jetzt festgelegt werden, dass Generatoren strikt sind, sodass ein Musterfehler sofort eine Ausnahme auslöst statt stillschweigend nicht passende Werte zu ignorieren. Diese stärkere Typenprüfung unterstützt Entwickler dabei, Fehler frühzeitig zu erkennen und sorgt für stabileren Code. Eine weitere wichtige Neuerung ist die Unterstützung von Gleitkommazahlen in beliebigen Basen gemäß EEP 75, was Entwicklern mehr Freiheit bei der Darstellung und Verarbeitung von Fließkommazahlen bietet.
Diese Flexibilität erleichtert numerische Berechnungen, die auf spezielle Anforderungen bei der Basisdarstellung angewiesen sind. Der Compiler hat ebenfalls zahlreiche Verbesserungen erfahren. Besonders hervorzuheben ist die Fähigkeit, bei bestimmten Fehlern automatische Korrekturvorschläge zu machen. So kann er beispielsweise, wenn eine undefinierte Variable verwendet wird, eine ähnliche existierende Variable vorschlagen, was die Fehlersuche deutlich vereinfacht. Das Limit der Atome wurde gelockert: Während bisher Atome eine Begrenzung von 255 Bytes hatten, ist ab Version 28 nur noch die Zeichenzahl begrenzt, nicht mehr die Bytegröße.
Diese Änderung ist vor allem für Atome mit Symbolen und Emojis relevant und erweitert die Anwendbarkeit von Atomen in moderneren Szenarien. Eine neue Compiler-Option namens warn_deprecated_catch erzeugt nun Warnungen bei Verwendung älterer Catch-Ausdrücke, was Entwickler motiviert, moderne und sicherere Try-Catch-Strukturen zu verwenden. Auch Optimierungen beim Umgang mit Maps wurden eingeführt: Falls der Map-Parameter bei maps:put/3 als Map vom Compiler erkannt wird, ersetzt dieser den Aufruf durch eine Map-Update-Syntax, die effizienter ist. Die Just-in-Time-Optimierung (JIT) wurde ebenfalls verbessert, um bestimmte eingebaute Funktionen (BIFs) mit Seiteneffekten performanter im Try-Catch-Block handhaben zu können. Ebenso wurde die Alias-Analyse im Compiler überarbeitet, um optimierte Operationen bei Records und Binärkonstruktionen in mehr Szenarien zu ermöglichen – das führt zu schnellerem und effizienterem Code.
Im sogenannten Erlang Runtime System (ERTS) gibt es ebenfalls bedeutende Neuerungen. Mit der Einführung von trace:system/3 steht eine neue Trace-Funktion bereit, die ähnlich wie erlang:system_monitor/2 operiert, jedoch erweiterte Unterstützung für Trace-Sessions bietet. Außerdem können nun Signale wie SIGWINCH, SIGCONT und SIGINFO über os:set_signal/2 behandelt werden, was die Systemintegration und das Signalmangement auf Betriebssystemebene verbessert. Besonders interessant für Entwickler mit großen und parallelen Anwendungen sind die neuen BIFs erlang:processes_iterator/0 und erlang:process_next/1, die es ermöglichen, den Prozess-Table iterativ und skalierbar zu durchlaufen. Dies ist wesentlich effizienter als der bisherige Ansatz mit erlang:processes/0, der bei zahlreichen Prozessen zu erheblichen Performanceproblemen führen kann.
Auch die Shell und das Terminal haben mit OTP 28 signifikante Updates erhalten. Der bekannte erl-Kommandomodus ohne Shell wurde in zwei Sub-Modi unterteilt: Raw und Cooked. Während Cooked dem bisherigen Standard entspricht, erlaubt Raw-Modus das Lesen von Tastatureingaben in Echtzeit, ohne dass eine Eingabetaste gedrückt werden muss. Außerdem wird der eingegebene Text nicht auf dem Bildschirm angezeigt, was hilfreiche Anwendungen im Bereich von interaktiven Programmen oder Passwortabfragen ermöglicht. Darüber hinaus zeigt die Shell nun einen Hilfetext an, der erklärt, wie man eine lange laufende oder hängende Kommandoausführung unterbricht – eine sinnvolle Usability-Verbesserung.
Das Standardbibliotheks-Toolkit (STDLIB) wurde ebenfalls ausgeweitet. So wurde beispielsweise die Funktion join/2 in das Modul binary aufgenommen, die Listen von Binärwerten mit einem Separator verbindet. Das Modul sets baut nun standardmäßig interne Strukturen als Maps auf, was bessere Performance und einfachere Nutzung verspricht. Das regex-Modul wurde auf die neuere PCRE2-Bibliothek aktualisiert, was Verbesserungen bei der Regulären-Ausdrucks-Verarbeitung bringt. Erfreulich ist die Einführung eines neuen Moduls namens zstd, das die moderne und effiziente Zstandard-Kompression unterstützt – das erweitert stark die Möglichkeiten der Datenkompression direkt aus Erlang heraus.
Im Bereich der Kryptografie wurde das public_key-Modul aufgefrischt. Die alten ASN.1-Module wurden durch modernere ersetzt, wobei großer Wert darauf gelegt wurde, die Schnittstelle für Anwender kompatibel zu halten. Dies gewährleistet mehr Sicherheit und bessere Wartbarkeit ohne Brüche in bestehenden Anwendungen. Für statische Codeanalyse wurde das Dialyzer-Tool weiterentwickelt und EEP 69 implementiert, welche die sogenannten Nominaltypen hinzufügt.
Diese erlauben eine präzisere Typdefinition und erweitern die Möglichkeiten der Typprüfung. Im SSL-Bereich wurden ebenfalls Optimierungen vorgenommen, speziell bei der Datenverarbeitung von TLS 1.3, was die Sicherheit und Leistung bei verschlüsselten Verbindungen verbessert. Abschließend gibt es erfreuliche Neuigkeiten auch für Entwickler, die Erlang mit Emacs nutzen. Das indent-region-Feature wurde so erweitert, dass es nun auch mehrzeilige Strings besser korrekt einrückt und so den Code lesbarer macht.
Erlang/OTP 28.0 präsentiert sich als umfassendes Update, das nicht nur neue Features mit sich bringt, sondern auch zahlreiche Detailverbesserungen und Optimierungen, die sowohl die Produktivität der Entwickler als auch die Performance und Stabilität der Anwendungen steigern. Die Integration von Prioritätsnachrichten, erweiterte Comprehensions, Verbesserungen im Compiler und Laufzeitsystem sowie Updates bei Bibliotheken und Tools machen diese Version zu einer lohnenswerten Aktualisierung. Für Entwickler und Unternehmen, die auf Hochverfügbarkeit, Skalierbarkeit und zuverlässige Systeme setzen, ist Erlang/OTP 28.0 ein wichtiger Schritt nach vorne, der neue Möglichkeiten eröffnet und bestehende Visionen noch besser unterstützt.
Die breite Unterstützung der Entwicklergemeinde und die konsequente Umsetzung von EEPs (Erlang Enhancement Proposals) zeigen, dass Erlang sich kontinuierlich an moderne Anforderungen anpasst und zukunftssicher weiterentwickelt wird.