Programmiersprache: Elixir 1.13 führt semantische Neukompilierung ein

Das neue Release bietet zahlreiche Werkzeugverbesserungen, die Entwicklerinnen und Entwicklern effizienteres Arbeiten ermöglichen sollen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 3 Min.
Von
  • Matthias Parbel
Inhaltsverzeichnis

Die funktionale Programmiersprache Elixir ist in Version 1.13 erschienen. Während neue Releases in der Regel mit Neuerungen der zentralen API aufwarten, hat sich das Elixir-Team laut Ankündigung im Blogbeitrag diesmal auf Verbesserungen beim Tooling konzentriert. Neue Funktionen wie die semantische Neukompilierung sollen Entwicklerinnen und Entwicklern unmittelbar in laufenden Projekten zugutekommen, den Einsatz von Elixir aber auch langfristig effizienter gestalten.

Bevor ein Neukompilieren angestoßen wurde, hatten Elixir und sein Compiler bisher nicht näher verfolgt, welche Abschnitte einer Datei sich geändert haben. Das führte in vielen Fällen zu einer vollständigen Neukompilierung des gesamten Projekts. Vor allem galt das bei Änderungen in den Dateien mix.exs, config/config.exs, src/* und mix.lock. Mit der Einführung der semantischen Neukompilierung ist es nur noch dann erforderlich, vollständig neu zu kompilieren, wenn Entwicklerinnen und Entwickler die Kompilierungsoptionen in mix.exs ändern oder sich die Konfiguration für das aktuelle Projekt in config/config.exs ändert. Änderungen der Größe einer Datei, beispielsweise infolge eines Branch-Wechsels, lösen kein Kompilieren mehr aus. Auch beim Aktualisieren oder Löschen von Dependencies werden nur die unmittelbar davon betroffenen Dateien neu kompiliert.

Weitere Neuerungen, die auf Anregungen aus der Community zurückgehen, betreffen das Werkzeug mix xref, das die Beziehungen zwischen Dateien analysiert. Anhand der Analyse der Kompilier- und Laufzeitabhängigkeiten zwischen den Dateien können Entwicklerinnen und Entwickler leichter verstehen, was bei jeder Änderung einer Datei neu zu kompilieren ist. Um beispielsweise alle Kompilierzeit-Abhängigkeiten ausfindig zu machen, die zu zusätzlichen transitiven Abhängigkeiten führen, lässt sich der mix xref graph-Parameter --label in Elixir 1.13 auf compile-connected setzen.

Elixir lässt sich bei Bedarf flexibel erweitern. Sigils bieten unter anderem die Möglichkeit, Snippets anderer Programmiersprachen in den Quellcode zu integrieren. Diese ließen sich bisher allerdings nicht wie Elixir-Code mit mix format formatieren. Version 1.13 lässt nun jedoch den Einsatz von Plug-ins für mix format zu, die den Formatter via Mix.Tasks.Format in die Lage versetzen, auch neue Dateien und Sigils zu formatieren. Ein individuelles Plug-in für Markdown sähe beispielsweise wie folgt aus:

defmodule MixMarkdownFormatter do
  @behaviour Mix.Tasks.Format

  def features(_opts) do
    [sigils: [:M], extensions: [".md", ".markdown"]]
  end

  def format(contents, opts) do
    # logic that formats markdown
  end
end

Beliebige Applikationen können damit auf die erweiterten Optionen zur Codeformatierung zugreifen:

# .formatter.exs
[
  # Define the desired plugins
  plugins: [MixMarkdownFormatter],
  # Remember to update the inputs list to include the new extensions
  inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}", "posts/*.{md,markdown}"]
]

Einen detaillierteren Überblick aller Neuerungen im Release 1.13 finden Interessierte im Elixir-Blog sowie in den Release Notes auf GitHub.

Elixir ist eine funktionale Programmiersprache, deren Schwerpunkt im Erstellen skalierbarer, robuster und nebenläufiger Programme liegt. Sie nutzt die über Jahrzehnte hinweg erprobte und weiterentwickelte Erlang-VM, denn der Elixir-Compiler erzeugt Erlang-kompatiblen Bytecode. Die grundlegende Syntax ist an Ruby angelehnt und lässt sich über Makros erweitern. Seit der 2014 erschienenen Versionsnummer 1.0 hat sich dank einer offenen und aktiven Community ein großes Ökosystem an Bibliotheken sowie eine umfangreiche Tool-Unterstützung entwickelt. Elixir ist unter der Apache License 2.0 auf GitHub zu finden.

(map)