Elixir (lenguaje de programación)
Elixir | ||
---|---|---|
Desarrollador(es) | ||
José Valim https://elixir-lang.org/ | ||
Información general | ||
Extensiones comunes | .ex, .exs | |
Paradigma | multiparadigma: funcional, concurrente, distribuido, orientada a procesos | |
Apareció en | 9 de enero de 2011 (13 años, 11 meses y 16 días) | |
Diseñado por | José Valim | |
Última versión estable | 1.16.0 (22 de diciembre de 2023 (1 año y 3 días)) | |
Última versión en pruebas | 1.5.0-rc.2 (20 de julio de 2017 (7 años, 5 meses y 5 días)) | |
Sistema de tipos | dinámico | |
Influido por | Erlang, Ruby, Clojure | |
Sistema operativo | Multiplataforma | |
Licencia | Licencia Apache, versión 2.0 | |
Elixir es un lenguaje de programación funcional, concurrente, de propósito general que se ejecuta sobre la máquina virtual de Erlang (BEAM). Elixir está escrito sobre Erlang y comparte las mismas abstracciones para desarrollar aplicaciones distribuidas y tolerantes de fallos. Elixir también proporciona un diseño extensible con herramientas productivas. Incluye soporte para metaprogramación en tiempo de compilación con macros y polimorfismo mediante protocolos.[1]
Elixir ha cosechado éxito en la industria con empresas como Pinterest[2] y Moz.[3] Elixir también es usado para el desarrollo web, por empresas como Bleacher Report, Discord, e Inverse,[4] y para desarrollar sistemas embebidos.[5][6] La comunidad organiza eventos anuales en los Estados Unidos,[7][8][9] Europa[10] y Japón,[11] así como conferencias menores.[12][13]
Historia
[editar]José Valim, egresado de la Universidad de São Paulo, es el brasileño creador del lenguaje de programación Elixir, y del proyecto R&D de Plataformatec, una filial del nubank.[14] Sus objetivos eran crear un lenguaje que permitiese una alta extensibilidad y productividad en la máquina virtual de Erlang manteniendo compatibilidad con el ecosistema de Erlang.[15][16]
Características
[editar]- Es un lenguaje que compila a bytecode para la máquina virtual de Erlang (BEAM)[17]
- Todo es una expresión[17]
- Las funciones de Erlang se pueden llamar desde Elixir sin tener impacto en tiempo de ejecución, debido a su compilación al bytecode de Erlang, y viceversa.
- Metaprogramación permitiendo manipular directamente el AST[17]
- polimorfismo mediante un mecanismo denominado protocolos. Al igual que en Clojure, los protocolos proporcionan un mecanismo de enlaces dinámicos. Aunque esto no debe confundirse con los enlaces múltiples ya que los protocolos de Elixir son sobre un único tipo.
- Soporte para documentación a través de docstrings tipo Python en el lenguaje de marcado Markdown[17]
- Shared nothing concurrent programming via message passing (Modelo de Actores)[18]
- Énfasis en la recursión y en funciones de orden superior en vez de bucles basados en efectos secundarios
- Evaluaciones perezosas y promesas mediante flujos
- Búsqueda de patrones[17]
- Soporte de Unicode y cadenas de caracteres UTF-8
Variables en Elixir
[editar]El funcionamiento de Elixir es muy especial en comparación con otros lenguajes ya que presenta un paradigma funcional. Las variables que maneja Elixir son, en realidad, inmutables, lo que significa que no pueden modificarse. La forma en que Elixir maneja un cambio en una variable es creando una nueva variable idéntica y asignando a ella el nuevo valor y la misma etiqueta de identificación; el recolector de basura en Elixir está altamente optimizado, por lo que esta nueva asignación no representa un desperdicio de memoria; por el contrario, Elixir tiene alta eficiencia en memoria y velocidad. También es importante mencionar que la revinculación (la forma de Elixir de modificar una variable) no es permitida en la búsqueda de patrones ni con el uso del operador pin (^).
Algunos tipos de datos que Elixir maneja son los siguientes:
- Entero
- Punto flotante
- Booleano
- Cadena
- Octal
- Hexadecimal
- Binario
- Lista
- Tupla
- Átomo
Este último tipo de dato, el átomo, es uno introducido por Elixir para representar valores constantes e inalterables. Su uso está destinado a una mayor optimización de recursos. Los átomos son declarados anteponiendo dos puntos
:nombre
Uno de los átomos más utilizados en Elixir es el átomo :ok
, que sirve para identificar si una función fue ejecutada correctamente o no.
Ejemplos
[editar]Los siguientes ejemplos se pueden ejecutar desde el intérprete o se pueden guardar en un fichero y ejecutarlo desde la línea de comandos escribiendo elixir <nombre del fichero>
.
Ejemplo clásico Hola mundo:
iex> IO.puts "Hola mundo"
Hola mundo
iex> for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
[1, 9, 25]
iex> [1, a] = [1, 2]
iex> a
2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
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
Invocación secuencial de miles de procesos
for num <- 1..1000, do: spawn fn -> IO.puts "#{num * 2}" end
Realización de tareas de forma asíncrona
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
Véase también
[editar]- Portal:Software libre. Contenido relacionado con Software libre.
Referencias
[editar]- ↑ «Elixir Protocols». José Valim. Consultado el 17 de febrero de 2013.
- ↑ «Introducing new open-source tools for the Elixir community». Consultado el 1 de agosto de 2016.
- ↑ «Unlocking New Features in Moz Pro with a Database-Free Architecture». Consultado el 1 de agosto de 2016.
- ↑ «What big projects use Elixir?». Consultado el 1 de agosto de 2016.
- ↑ «Elixir in production interview: Garth Hitchens». Consultado el 1 de agosto de 2016.
- ↑ «Nerves - Craft and deploy bulletproof embedded software in Elixir». Consultado el 1 de agosto de 2016.
- ↑ «ElixirConf 2014». Consultado el 1 de agosto de 2016. (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
- ↑ «ElixirConf 2015». Consultado el 1 de agosto de 2016. (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
- ↑ «ElixirConf». Consultado el 1 de agosto de 2016.
- ↑ «ElixirConf». Consultado el 1 de agosto de 2016.
- ↑ «ElixirConf.jp». Archivado desde el original el 18 de junio de 2017. Consultado el 9 de julio de 2017.
- ↑ «Elixir LDN». Consultado el 1 de agosto de 2016.
- ↑ «EMPEX - Empire State Elixir Conference». Consultado el 1 de agosto de 2016.
- ↑ «Important information about our Elixir and Ruby Open Source projects». Consultado el 7 de enero de 2020.
- ↑ Elixir - A modern approach to programming for the Erlang VM. Consultado el 17 de febrero de 2013.
- ↑ José Valim - ElixirConf EU 2017 Keynote. Consultado el 14 de julio de 2017.
- ↑ a b c d e «Elixir». Consultado el 7 de septiembre de 2014.
- ↑ Loder, Wolfgang (12 de mayo de 2015). Erlang and Elixir for Imperative Programmers. "Capítulo 16: Code Structuring Concepts", sección "Actor Model": Leanpub. Consultado el 7 de julio de 2015.
Enlaces externos
[editar]- Página web de Elixir
- Código en GitHub
- Examples of most common features
- Elixir - A modern approach to programming for the Erlang VM (peresentación en vídeo)
- Dave Thomas: "Programming Elixir 1.2: Functional → Concurrent → Pragmatic → Fun" (book)
- Simon St. Laurent, J. David Eisenberg: "Introducing Elixir" (book)
- Chris McCord: "Metaprogramming Elixir " (book)
- Joe Armstrong: "A Week with Elixir" (entrada de blog)
- Introduction to Elixir programming
- When to use Elixir?
- What are some good uses for the Elixir programming language?
- Why use Elixir for Web Development?