Elixir (lenguaje de programación)

lenguaje de programación De Wikipedia, la enciclopedia libre

Elixir (lenguaje de programación)

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]

Datos rápidos Desarrollador(es), Información general ...
Elixir
Thumb
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 (14 años, 2 meses y 29 días)
Diseñado por José Valim
Última versión estable 1.18.2 (22 de enero de 2025 (2 meses y 16 días))
Última versión en pruebas 1.5.0-rc.2 (20 de julio de 2017 (7 años, 8 meses y 18 días))
Sistema de tipos dinámico
Influido por Erlang, Ruby, Clojure
Sistema operativo Multiplataforma
Licencia Licencia Apache, versión 2.0
Cerrar

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

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

Variables en Elixir

Resumir
Contexto

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

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

Comprensiones de listas

iex> for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
[1, 9, 25]

Búsqueda de patrones

iex> [1, a] = [1, 2]
iex> a
2

iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"

Módulos

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

Referencias

Enlaces externos

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.