Elixir (lenguaje de programación)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Elixir es un lenguaje de programación funcional, concurrente y de propósito general que se ejecuta en la máquina virtual BEAM que también se utiliza para implementar el lenguaje de programación Erlang. Elixir se basa en Erlang y comparte las mismas abstracciones para crear aplicaciones distribuidas tolerantes a fallas. Elixir también proporciona herramientas productivas y un diseño extensible. Este último es compatible con metaprogramación en tiempo de compilación con macros y polimorfismo a través de protocolos.

Elixir es utilizado por empresas como Ramp, PagerDuty, Discord, Brex, E-MetroTel, Pinterest, Moz, Bleacher Report, The Outline, Inverse, Divvy, FarmBot y para crear sistemas integrados. La comunidad organiza eventos anuales en los Estados Unidos, Europa y Japón, así como eventos y conferencias locales menores.

Historia

José Valim es el creador del lenguaje de programación Elixir, un proyecto de investigación y desarrollo creado en Plataformatec. Sus objetivos eran permitir una mayor extensibilidad y productividad en la máquina virtual de Erlang manteniendo la compatibilidad con el ecosistema de Erlang.

Elixir estaba destinado a sitios y aplicaciones a gran escala. Elixir utiliza características de Ruby, Erlang y Clojure para desarrollar un lenguaje de "alta concurrencia" y "baja latencia". Elixir fue diseñado para manejar grandes volúmenes de datos. Elixir se utiliza en las industrias de telecomunicaciones, comercio electrónico y finanzas.

El 12 de julio de 2018, Honeypot lanzó un mini documental sobre Elixir.

Versionado

Elixir sigue principalmente el control de versiones semántico y tiene solo 1 versión principal sin planes para una segunda. Cada una de las versiones secundarias admite un rango específico de versiones de Erlang/OTP. La versión de lanzamiento estable actual es 1.14.1.

Características

  • Compila a código de bytes para la máquina virtual Erlang (BEAM)
  • Todo es una expresión.
  • Las funciones de Erlang se pueden llamar desde Elixir, y viceversa, sin impacto en el tiempo de ejecución, debido a la compilación en el código de bytes de Erlang
  • Metaprogramación que permite la manipulación directa del árbol de sintaxis abstracta (AST)
  • Polimorfismo a través de un mecanismo llamado protocolos. Al igual que en Clojure, los protocolos proporcionan un mecanismo de envío dinámico. Sin embargo, esto no debe confundirse con el envío múltiple, ya que los protocolos Elixir se envían en un solo tipo.
  • Soporte para documentación a través de cadenas de documentos similares a Python en el lenguaje de formato Markdown
  • Programación concurrente sin nada compartido a través del paso de mensajes (modelo Actor)
  • Énfasis en la recursividad y funciones de orden superior en lugar de bucles basados ​​en efectos secundarios
  • Concurrencia ligera utilizando los mecanismos de Erlang
  • Programación orientada al ferrocarril a través de la withconstrucción.
  • Herramientas integradas para administrar dependencias, compilación de código, ejecución de pruebas, formateo de código, depuración remota y más
  • Colecciones perezosas y asíncronas con flujos
  • Coincidencia de patrones para promover un código asertivo
  • Compatibilidad con Unicode y cadenas UTF-8

Ejemplos

Los siguientes ejemplos pueden ejecutarse en un iexshell o guardarse en un archivo y ejecutarse desde la línea de comando escribiendo. elixir <filename>

Ejemplo clásico de Hola mundo:

iex > IO . pone ("¡Hola Mundo!") 
¡Hola Mundo!

Lista de comprensión:

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

Coincidencia de patrones (desestructuración):

es decir > ​​[ 1,  un ]  =  [ 1,  2 ] 
es decir > ​​un 
2

iex> {:ok,  [ hola:  a ]}  =  {:ok,  [ hola:  "mundo" ]} 
iex> a 
"mundo"

Coincidencia de patrones (cláusulas múltiples):

iex> expediente del caso . read ("ruta/al/archivo") do iex> {:ok, contenidos } -> IO . puts ("archivo encontrado: #{ contenidos } ") iex> {: error, razón } -> IO . puts ("archivo faltante: #{ motivo } ") iex> end 
     
     

Operador de tubería:

iex> "1"  |>  Cadena . to_integer ()  |>  Núcleo .* (2) 
2

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

Generando secuencialmente mil procesos:

para  num  <-  1.. 1000,  haga:  spawn  fn  ->  IO . pone (" #{ num  *  2 } ")  fin

Realización asincrónica de una tarea:

tarea  =  tarea . async  fn  ->  perform_complex_action ()  end 
other_time_Consuming_action () 
Task . esperar  tarea

Proyectos destacados de Elixir

  • Mix es una herramienta de automatización de compilación que proporciona tareas para crear, compilar y probar proyectos de Elixir, administrar sus dependencias y más.
  • Phoenix es un marco de desarrollo web escrito en Elixir que implementa el patrón Model View Controller (MVC) del lado del servidor.

Contenido relacionado

SHRDLU

Streaming de extensiones SIMD

Variedad (cibernética)

En cibernética, el término variedad denota el número total de elementos distinguibles de un conjunto, más a menudo el conjunto de estados, entradas o...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save