Elixir (limbaj de programare) - Elixir (programming language)
![]() | |
| Paradigmă | multi-paradigmă : funcțională , concurentă , distribuită , orientată spre proces |
|---|---|
| A apărut prima dată | 2011 |
| Versiune stabila | |
| Disciplina de tastare | dinamic , puternic , rață |
| Platformă | Erlang |
| Licență | Licență Apache 2.0 |
| Extensii de nume de fișier | .ex, .exs |
| Site-ul web | elixir-lang |
| Influențată de | |
| Clojure , Erlang , Ruby | |
| Influențat | |
| LFE | |
Elixir este un limbaj de programare funcțional , concurent , de uz general , care rulează pe mașina virtuală BEAM utilizată pentru a implementa limbajul de programare Erlang . Elixir se construiește deasupra Erlang și împărtășește aceleași abstracții pentru construirea aplicațiilor distribuite , tolerante la erori . Elixir oferă, de asemenea, scule productive și un design extensibil . Acesta din urmă este susținut de metaprogramarea în timp de compilare cu macro-uri și polimorfism prin protocoale.
Elixir este utilizat de companii precum PagerDuty , Discord , Brex , E-MetroTel, Pinterest , Moz, Bleacher Report , The Outline , Inverse , Divvy, FarmBot și pentru construirea de sisteme încorporate . Comunitatea organizează evenimente anuale în Statele Unite, Europa și Japonia, precum și evenimente și conferințe locale minore.
Istorie
José Valim este creatorul limbajului de programare Elixir, un proiect de cercetare și dezvoltare creat la Plataformatec. Obiectivele sale au fost să permită o extensibilitate și o productivitate mai mari în Erlang VM, păstrând în același timp compatibilitatea cu ecosistemul Erlang.
José Valim și-a propus să creeze un limbaj de programare pentru site-uri și aplicații pe scară largă. Fiind un dezvoltator Ruby, el a folosit caracteristici Ruby, Erlang și Clojure pentru a dezvolta un limbaj cu concurență ridicată și cu latență redusă. Elixir a fost conceput pentru a gestiona volume mari de date. Viteza și capacitățile sale răspândesc Elixir în industria telecomunicațiilor, comerțului electronic și finanțelor.
Pe 12 iulie 2018, Honeypot a lansat un mini-documentar pe Elixir.
Versionare
Elixir urmărește în principal versiunile semantice și are doar o versiune majoră, fără planuri pentru o secundă. Fiecare dintre versiunile minore acceptă o gamă specifică de versiuni Erlang / OTP .
Caracteristici
- Compilează în bytecode pentru mașina virtuală Erlang (BEAM)
- Totul este o expresie
- Funcțiile Erlang pot fi apelate din Elixir și viceversa, fără impact asupra timpului de rulare , datorită compilării codului de bytec Erlang
- Metaprogramare care permite manipularea directă a arborelui abstract de sintaxă (AST)
- Polimorfism printr-un mecanism numit protocoale. Ca și în Clojure , protocoalele oferă un mecanism de expediere dinamic . Cu toate acestea, acest lucru nu trebuie confundat cu expediere multiplă, deoarece protocoalele Elixir se expediază pe un singur tip.
- Suport pentru documentare prin docstrings în formă de Python în limbajul de formatare Markdown
- Nu s-a partajat nimic simultan de programare prin transmiterea mesajelor ( model de actor )
- Accent pe recursivitate și funcții de ordin superior în loc de looping bazat pe efecte secundare
- Simptomă ușoară utilizând mecanismele lui Erlang
-
Programare orientată pe cale ferată prin
withconstrucție - Instrumente încorporate pentru gestionarea dependențelor, compilarea codului, rularea testelor, formatarea codului, depanarea la distanță și multe altele
- Lazy și colecții async cu fluxuri
- Potrivirea modelelor pentru a promova codul asertiv
- Suport Unicode și șiruri UTF-8
Exemple
Următoarele exemple pot fi rulate într-un iexshell sau salvate într-un fișier și rulate din linia de comandă prin tastare .
elixir <filename>
Exemplu clasic Hello world :
iex> IO.puts("Hello World!")
Hello World!
Înțelegeri
iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n
[1, 9, 25]
Potrivire tipar (destructurare)
iex> [1, a] = [1, 2]
iex> a
2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
Potrivirea tiparului (clauze multiple)
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
Operator de țevi
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
Apare secvențial o mie de procese
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
Efectuarea asincronă a unei sarcini
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
Proiecte Elixir remarcabile
- Mix este un instrument de automatizare a construcțiilor care oferă sarcini pentru crearea, compilarea și testarea proiectelor Elixir, gestionarea dependențelor sale și multe altele.
- Phoenix este un cadru de dezvoltare web scris în Elixir care implementează modelul controlerului de vizualizare a modelului ( MVC ) de pe server .
