Elixir (linguaggio di programmazione)
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.17.3 (18 settembre 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/ |
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]
Storia
[modifica | modifica wikitesto]Il 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
[modifica | modifica wikitesto]Elixir 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 | modifica wikitesto]- 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
[modifica | modifica wikitesto]I 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 | modifica wikitesto]- 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 | modifica wikitesto]- ^ 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 | modifica wikitesto]- (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 | modifica wikitesto]- Wikimedia Commons contiene immagini o altri file su Elixir
Collegamenti esterni
[modifica | modifica wikitesto]- (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 |
---|