Elixir (linguaggio di programmazione)

Da Wikipedia, l'enciclopedia libera.
Elixir
Official Elixir logo.png
Il logo ufficiale del linguaggio di programmazione Elixir.
Autore José Valim, collaboratori su GitHub
Data di origine 24 maggio 2012; 4 anni fa (v0.5.0)
Ultima versione 1.1.1[1] (28 settembre 2015; 11 mesi fa)
Utilizzo scripting, general purpose
Paradigmi concorrente, funzionale
Tipizzazione dinamica, forte
Specifiche di linguaggio The Elixir Language Specification
Estensioni comuni ex e exs
Influenzato da Erlang, Ruby, Clojure
Implementazione di riferimento
Licenza Licenza Apache 2.0[2]
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.[3]

Storia[modifica | modifica wikitesto]

Il creatore del linguaggio, José Valim, all'ElixirConf 2014
Il programmatore informatico Dave Thomas all'ElixirConf 2014

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.[4]

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.[5] 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.[5] Al contrario di Erlang, Elixir dispone dell'operatore pipe.[5] La sintassi di Elixir, al contrario di quella di Erlang, risulta più familiare agli sviluppatori Ruby.[5]

Caratteristiche[modifica | modifica wikitesto]

  • Un linguaggio che viene compilato in bytecode per la macchina virtuale Erlang (BEAM)[3]
  • Tutto è un'espressione[3]
  • 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 di AST[3]
  • Supporto per la documentazione attraverso docstring in stile Python; il linguaggio di markup usato come standard de facto è il markdown[3]
  • Polimorfismo attraverso un meccanismo chiamato protocols. Enumerable è un esempio di protocollo ed è ispirato ai riduttori Clojure[6] 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[3]
  • 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}]

Note[modifica | modifica wikitesto]

  1. ^ https://github.com/elixir-lang/elixir/blob/v1.1.1/CHANGELOG.md
  2. ^ https://github.com/elixir-lang/elixir/blob/master/LICENSE
  3. ^ 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 il 01 settembre 2015).
  4. ^ Elixir - A modern approach to programming for the Erlang VM, vimeo.com. URL consultato il 17 febbraio 2013.
  5. ^ 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 il 03 settembre 2015).
  6. ^ Peter Minten, Elixir's Enumerable, su A Cauldron of Black and White Stones, Weblog personale di Peter Minten, Peter Minten, 07 settembre 2014. URL consultato il 07 settembre 2014 (archiviato il 01 settembre 2015).

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, pp. 53.
  • (EN) Dave Thomas, Programming Elixir: : Functional > Concurrent > Pragmatic > Fun, Prima edizione, The Pragmatic Bookshelf, 2014, pp. 280, ISBN 978-1937785581.

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]