Elixir (linguaggio di programmazione)
Elixir è un linguaggio di programmazione funzionale, concorrente, il cui codice compilato viene interpretato dalla macchina virtuale Erlang (BEAM). Utilizza quest'ultima proprio per fornire applicazioni distribuite, fault-tolerant e (near) real-time, ma anche per estenderla verso il supporto della meta-programmazione attraverso macro, polimorfismo e protocolli.[2]
Elixir linguaggio di programmazione | |
---|---|
Il logo ufficiale del linguaggio di programmazione Elixir. | |
Autore | José Valim, collaboratori su GitHub |
Data di origine | 24 maggio 2012 | (v0.5.0)
Ultima versione | 1.18.0 (19 dicembre 2024) |
Utilizzo | scripting, general purpose |
Paradigmi | concorrente, funzionale, distribuito |
Tipizzazione | dinamica, forte |
Specifiche di linguaggio | Elixir Documentation |
Estensioni comuni | ex e exs |
Influenzato da | Erlang, Ruby, Clojure |
Implementazione di riferimento | |
Licenza | Licenza Apache 2.0[1] |
Sito web | elixir-lang.org/ |
Storia
modificaIl creatore del linguaggio di programmazione Elixir è José Valim. Il linguaggio di programmazione è un progetto R&D di Plataformatec. Lo scopo è quello di consentire una maggiore estensibilità e produttività della VM Erlang, preservando al contempo la compatibilità con gli strumenti e l'ecosistema stesso di Erlang.[3]
La nascita di Elixir è stata motivata dal fatto che la capacità di calcolo dei processori è in continuo aumento, il che ha dato luogo ai processori a core multipli, e che l'ecosistema Erlang, compresa la sua macchina virtuale, sfrutta appieno questo tipo di architettura multi-processore, così che un programma in esecuzione può essere suddiviso in una serie di micro processi paralleli. Elixir è nato per superare le carenze di Erlang su alcuni paradigmi e per rendere disponibili taluni approcci di programmazione non ammessi da Erlang, come la meta-programmazione ed il polimorfismo.
Aspetti tecnici
modificaElixir dispone di un sistema di gestione dei pacchetti, di macro, di uno strumento che automatizza lo sviluppo facile da usare e del sistema di codifica Unicode.[4] Dato che Elixir è un linguaggio che viene eseguito sulla macchina virtuale Erlang, ottiene tutti i vantaggi forniti dalla maturità della VM e può usare le librerie Erlang esistenti, senza penalizzare le performance.[4] Al contrario di Erlang, Elixir dispone dell'operatore pipe.[4] La sintassi di Elixir, al contrario di quella di Erlang, risulta più familiare agli sviluppatori Ruby.[4]
Caratteristiche
modifica- Un linguaggio che viene compilato in bytecode per la macchina virtuale Erlang (BEAM)[2]
- Tutto è un'espressione[2]
- Perfetta integrazione con il linguaggio di programmazione Erlang: nessuna penalità verso le chiamate di funzione Erlang (e vice versa)
- Meta-programmazione che prevede la manipolazione diretta dell'albero sintattico[2]
- Supporto per la documentazione attraverso docstring in stile Python; il linguaggio di markup usato come standard de facto è il markdown[2]
- Polimorfismo attraverso un meccanismo chiamato protocols. Enumerable è un esempio di protocollo ed è ispirato ai riduttori Clojure[5] Così come avviene in Clojure, i protocolli forniscono un meccanismo di collegamento dinamico detto dynamic dispatch. Tuttavia, ciò non va confuso con il collegamento multiplo, anche detto multiple dispatch.
- Architettura shared-nothing attraverso lo scambio di messaggi (Actor model)
- Enfasi sulla ricorsione e le funzioni di ordine superiore piuttosto che side-effects e cicli.
- Collezioni pigre ed asincrone con i flussi
- Pattern matching[2]
- Supporto Unicode e stringhe UTF-8
Esempi
modificaI seguenti esempi possono essere eseguiti in una shell IEx (acronimo di Interactive Elixir) oppure possono essere salvati in un file ed essere eseguiti dalla linea di comando, digitando elixir <filename>
.
Hello world - Stampa sullo standard output della stringa di caratteri Hello world:
IO.puts "Hello World!"
Operazioni sulle liste - Degli elementi appartenenti alla lista originale si selezionano solo quelli dispari (ottenuti laddove il resto della loro divisione per 2 è uguale ad 1) e si crea un elenco contenente questi elementi al quadrato.
for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
#=> [1, 9, 25]
Pattern Matching
[1, a] = [1, 2]
# 'a' now equals 2
{:ok, [hello: a]} = {:ok, [hello: "world"]}
# 'a' now equals "world"
Moduli
defmodule Fun do
def fib(0), do: 0
def fib(1), do: 1
def fib(n) do
fib(n-2) + fib(n-1)
end
end
Invocazione di codice nativo Erlang - Esempio di utilizzo di una libreria di Erlang (la libreria è inet_res); al momento della stesura di questo paragrafo l'indirizzo IP dell'host a cui punta l'URL fornito come parametro d'ingresso al metodo (quello della sezione polacca di Wikipedia) era 91.198.174.192
:inet_res.lookup('pl.wikipedia.org', :in, :a)
#=> [{91, 198, 174, 192}]
Progetti Elixir degni di nota
modifica- Mix è uno strumento di automazione dello sviluppo che fornisce attività per la creazione, la compilazione e il test di progetti Elixir, la gestione delle sue dipendenze e altro ancora.
- Phoenix è un framework di sviluppo web scritto in Elixir che implementa il pattern Model-view-controller (MVC) lato server.
Note
modifica- ^ https://github.com/elixir-lang/elixir/blob/master/LICENSE
- ^ a b c d e f José Valim, Elixir, su Sito Web ufficiale di Elixir, José Valim, 24 aprile 2012. URL consultato il 24 aprile 2012 (archiviato dall'url originale il 18 aprile 2012).
- ^ Elixir - A modern approach to programming for the Erlang VM, su vimeo.com. URL consultato il 17 febbraio 2013.
- ^ a b c d Lau Taarnskov, Elixir - The next big language for the Web, su Creative Deletion, Lau Taarnskov, 19 aprile 2015. URL consultato il 19 aprile 2015 (archiviato dall'url originale il 20 aprile 2015).
- ^ Peter Minten, Elixir's Enumerable, su A Cauldron of Black and White Stones, Weblog personale di Peter Minten, Peter Minten, 7 settembre 2014. URL consultato il 7 settembre 2014 (archiviato dall'url originale il 6 settembre 2014).
Bibliografia
modifica- (EN) Wolfgang Loder, Erlang and Elixir for Imperative Programmers, Prima edizione, capitolo 16: "Code Structuring Concepts", sezione "Actor Model", Leanpub, 12 maggio 2015, p. 53.
- (EN) Dave Thomas, Programming Elixir: : Functional > Concurrent > Pragmatic > Fun, Prima edizione, The Pragmatic Bookshelf, 2014, p. 280, ISBN 978-1937785581.
Altri progetti
modifica- Wikimedia Commons contiene immagini o altri file su Elixir
Collegamenti esterni
modifica- (EN) Sito Web ufficiale, su elixir-lang.org.
- (EN) Codice sorgente pubblicato su GitHub, su github.com.
- (EN) Elixir - A modern approach to programming for the Erlang VM video presentation, su vimeo.com.
Controllo di autorità | LCCN (EN) sh2015000669 · J9U (EN, HE) 987007409094405171 |
---|