Elixier (Programmiersprache) - Elixir (programming language)
Paradigma | Multiparadigma : funktional , nebenläufig , verteilt , prozessorientiert |
---|---|
Erstmals erschienen | 2011 |
Stabile Version | |
Schreibdisziplin | dynamisch , stark , duck |
Plattform | Erlang |
Lizenz | Apache-Lizenz 2.0 |
Dateinamenerweiterungen | .ex, .exs |
Webseite | elixier-lang |
Beeinflusst von | |
Clojure , Erlang , Ruby | |
Beeinflusst | |
LFE |
Elixir ist eine funktionale , gleichzeitige , universelle Programmiersprache , die auf der virtuellen BEAM- Maschine ausgeführt wird, die zur Implementierung der Programmiersprache Erlang verwendet wird. Elixir baut auf Erlang auf und teilt die gleichen Abstraktionen zum Erstellen verteilter , fehlertoleranter Anwendungen. Elixir bietet auch produktive Werkzeuge und ein erweiterbares Design. Letzteres wird durch Metaprogrammierung zur Kompilierzeit mit Makros und Polymorphismus über Protokolle unterstützt.
Elixir wird von Unternehmen wie PagerDuty , Discord , Brex , E-MetroTel, Pinterest , Moz, Bleacher Report , The Outline , Inverse , Divvy, FarmBot und zum Bau von eingebetteten Systemen verwendet . Die Gemeinschaft organisiert jährliche Veranstaltungen in den Vereinigten Staaten, Europa und Japan sowie kleinere lokale Veranstaltungen und Konferenzen.
Geschichte
José Valim ist der Schöpfer der Programmiersprache Elixir, einem Forschungs- und Entwicklungsprojekt von Plataformatec. Seine Ziele bestanden darin, eine höhere Erweiterbarkeit und Produktivität in der Erlang-VM zu ermöglichen und gleichzeitig die Kompatibilität mit dem Erlang-Ökosystem zu wahren.
José Valim wollte eine Programmiersprache für große Websites und Apps entwickeln. Als Ruby-Entwickler nutzte er Funktionen von Ruby, Erlang und Clojure, um eine Sprache mit hoher Parallelität und geringer Latenz zu entwickeln. Elixir wurde für den Umgang mit großen Datenmengen entwickelt. Seine Geschwindigkeit und Fähigkeiten verbreiten Elixir in der Telekommunikations-, E-Commerce- und Finanzbranche.
Am 12. Juli 2018 veröffentlichte Honeypot eine Mini-Dokumentation über Elixir.
Versionierung
Elixir folgt hauptsächlich der semantischen Versionierung und hat nur eine Hauptversion ohne Pläne für eine zweite. Jede der Nebenversionen unterstützt einen bestimmten Bereich von Erlang/ OTP- Versionen.
Merkmale
- Kompiliert in Bytecode für die Erlang Virtual Machine (BEAM)
- Alles ist ein Ausdruck
- Erlang-Funktionen können von Elixir aus aufgerufen werden und umgekehrt, ohne Auswirkungen auf die Laufzeit aufgrund der Kompilierung in Erlang-Bytecode
- Metaprogrammierung zur direkten Manipulation des abstrakten Syntaxbaums (AST)
- Polymorphismus über einen Mechanismus namens Protokolle. Wie in Clojure bieten Protokolle einen dynamischen Dispatch- Mechanismus. Dies ist jedoch nicht mit Mehrfachversand zu verwechseln, da Elixir-Protokolle auf einem einzigen Typ versenden.
- Unterstützung für Dokumentation über Python-ähnliche Docstrings in der Markdown- Formatierungssprache
- Geteilte nichts gleichzeitige Programmierung über Message Passing ( Actor-Modell )
- Betonung von Rekursion und Funktionen höherer Ordnung anstelle von Nebeneffekt- basierten Schleifen
- Leichte Parallelität mit den Mechanismen von Erlang
-
Bahnorientierte Programmierung über das
with
Konstrukt - Integrierte Tools zum Verwalten von Abhängigkeiten, Codekompilierung, Ausführen von Tests, Formatieren von Code, Remote-Debugging und mehr
- Faule und asynchrone Sammlungen mit Streams
- Musterabgleich zur Förderung von durchsetzungsfähigem Code
- Unicode- Unterstützung und UTF-8- Strings
Beispiele
Die folgenden Beispiele können in einer iex
Shell ausgeführt oder in einer Datei gespeichert und über die Befehlszeile durch Eingabe von ausgeführt werden .
elixir <filename>
Klassisches Hello-World- Beispiel:
iex> IO.puts("Hello World!")
Hello World!
Verständnis
iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n
[1, 9, 25]
Pattern Matching (Destrukturierung)
iex> [1, a] = [1, 2]
iex> a
2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
Mustervergleich (mehrere Klauseln)
iex> case File.read("path/to/file") do
iex> {:ok, contents} -> IO.puts("found file: #{contents}")
iex> {:error, reason} -> IO.puts("missing file: #{reason}")
iex> end
Rohrbetreiber
iex> "1" |> String.to_integer() |> Kernel.*(2)
2
Module
defmodule Fun do
def fib(0), do: 0
def fib(1), do: 1
def fib(n), do: fib(n-2) + fib(n-1)
end
Nacheinander tausend Prozesse hervorbringen
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
Eine Aufgabe asynchron ausführen
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
Bemerkenswerte Elixir-Projekte
- Mix ist ein Build-Automatisierungstool, das Aufgaben zum Erstellen, Kompilieren und Testen von Elixir-Projekten, zum Verwalten seiner Abhängigkeiten und mehr bereitstellt.
- Phoenix ist ein in Elixir geschriebenes Webentwicklungs-Framework, das das serverseitige Model View Controller ( MVC )-Muster implementiert .