De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Elixir es un lenguaje de programación funcional , concurrente y de propósito general que se ejecuta en la máquina virtual BEAM utilizada para implementar el lenguaje de programación Erlang . [3] Elixir construye en la parte superior de Erlang y comparte las mismas abstracciones para la construcción distribuida , de alta disponibilidad de aplicaciones. 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. [4]

Elixir es utilizado por empresas como PagerDuty , [5] Discord , [6] Brex , [7] E-MetroTel, [8] Pinterest , [9] Moz, [10] Bleacher Report , [11] The Outline , [12 ] Inverse , [13] Divvy, [14] FarmBot [15] y para la construcción de sistemas integrados . [16] [17] La comunidad organiza eventos anuales en los Estados Unidos, [18] Europa [19] y Japón [20]así como eventos y conferencias locales menores. [21] [22]

Historia [ editar ]

José Valim es el creador del lenguaje de programación Elixir, un proyecto de investigación y desarrollo de Plataformatec. Sus objetivos eran permitir una mayor extensibilidad y productividad en Erlang VM, manteniendo la compatibilidad con el ecosistema de Erlang. [23] [24]

José Valim tenía como objetivo crear un lenguaje de programación para sitios y aplicaciones a gran escala. Al ser un desarrollador de Ruby, usó 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. Su velocidad y capacidades propagan Elixir en las industrias de telecomunicaciones, comercio electrónico y finanzas. [25]

El 12 de julio de 2018, Honeypot lanzó un mini-documental sobre Elixir. [26]

Control de versiones [ editar ]

Elixir principalmente [27] sigue versiones semánticas y solo tiene una versión principal sin planes para una segunda. Cada una de las versiones menores admite un rango específico de versiones de Erlang / OTP . [28]

Funciones [ editar ]

  • Compila en código de bytes para la máquina virtual Erlang (BEAM) [29]
  • Todo es una expresión [29]
  • 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) [29]
  • 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 [29]
  • Programación simultánea sin contenido compartido mediante el paso de mensajes ( modelo de actor ) [30]
  • Énfasis en la recursividad y las funciones de orden superior en lugar del bucle basado en efectos secundarios
  • Simultaneidad ligera utilizando los mecanismos de Erlang [29]
  • Programación orientada al ferrocarril a través de la withconstrucción [31]
  • 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 transmisiones
  • Coincidencia de patrones [29] para promover un código asertivo [32]
  • Soporte Unicode y cadenas UTF-8

Ejemplos [ editar ]

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

Ejemplo clásico de Hello world :

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

Comprensiones

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

Coincidencia de patrones (desestructuración)

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

Coincidencia de patrones (múltiples cláusulas)

iex> archivo de caso  . leer ( "ruta / a / archivo" ) hacer iex> { : ok , contenido } -> IO . pone ( "archivo encontrado: # { contenido } " ) iex> { : error , motivo } -> IO . pone ( "archivo faltante: # { motivo } " ) iex> fin         

Operador de tubería

iex> "1"  |>  Cadena . to_integer ()  |>  Kernel . * ( 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

Generación secuencial de mil procesos

para  num  <-  1 .. 1000 ,  hacer :  generar  fn  ->  IO . pone ( " # { num  *  2 } " )  final

Realizar una tarea de forma asincrónica

tarea  =  Tarea . async  fn  ->  perform_complex_action ()  end other_time_consuming_action () Tarea . esperar  tarea

Proyectos destacados de Elixir [ editar ]

  • 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. [33]
  • Phoenix es un marco de desarrollo web escrito en Elixir que implementa el patrón Model View Controller ( MVC ) del lado del servidor . [34]
  • Nerves es un entorno de plataforma, marco y herramientas para construir sistemas y dispositivos integrados. [17] [35]
  • Ecto es el contenedor de base de datos y el generador de consultas para Elixir. [36]

Ver también [ editar ]

  • Computación concurrente
  • Computación distribuída

Referencias [ editar ]

  1. ^ "Lanzamientos - elixir-lang / elixir" . Consultado el 16 de marzo de 2021 , a través de GitHub .
  2. ^ "elixir / LICENCIA en master · elixir-lang / elixir · GitHub" . GitHub .
  3. ^ "Lenguajes de programación más populares de 2018 - Blog Elite Infoworld" . 2018-03-30 . Consultado el 8 de mayo de 2018 .
  4. ^ "Elixir" . José Valim . Consultado el 17 de febrero de 2013 .
  5. ^ "Elixir en PagerDuty" . PagerDuty . 2018-06-14 . Consultado el 21 de abril de 2019 .
  6. ^ Vishnevskiy, Stanislav (6 de julio de 2017). "Cómo Discord escaló Elixir a 5.000.000 de usuarios simultáneos" . Consultado el 21 de abril de 2019 .
  7. Valim, José (23 de junio de 2020). "Elixir en fintech con Brex" . elixir-lang.github.com . Consultado el 14 de noviembre de 2020 .
  8. ^ "Novedades de la versión 6.0 | Documentación" . www.emetrotel.com . Consultado el 21 de abril de 2019 .
  9. ^ "Presentación de nuevas herramientas de código abierto para la comunidad de Elixir" . Consultado el 1 de agosto de 2016 .
  10. ^ "Desbloqueo de nuevas funciones en Moz Pro con una arquitectura sin bases de datos" . Consultado el 1 de agosto de 2016 .
  11. ^ "Elixir" . Ingeniería de informes de blanqueador . Consultado el 22 de mayo de 2019 .
  12. ^ Lucia, Dave (24 de septiembre de 2018). "Dos años de Elixir en The Outline" . Consultado el 22 de mayo de 2019 .
  13. ^ "¿Qué grandes proyectos usan Elixir?" . Consultado el 1 de agosto de 2016 .
  14. ^ "Por qué Divvy usa Elixir en lugar de lenguajes de codificación más populares" . Consultado el 30 de abril de 2019 .
  15. ^ El sistema operativo y todo el software relacionado que se ejecuta en Raspberry Pi de FarmBot .: FarmBot / farmbot_os , FarmBot, 2019-10-28 , consultado el 2019-10-29
  16. ^ "Elixir en la entrevista de producción: Garth Hitchens" . Consultado el 1 de agosto de 2016 .
  17. ^ a b "Nervios - Elabore e implemente software integrado a prueba de balas en Elixir" . Consultado el 1 de agosto de 2016 .
  18. ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
  19. ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
  20. ^ "Erlang & Elixir Fest" . Consultado el 18 de febrero de 2019 .
  21. ^ "Elixir LDN" . Consultado el 12 de julio de 2018 .
  22. ^ "EMPEX - Conferencia de elixir de Empire State" . Consultado el 12 de julio de 2018 .
  23. ^ Elixir: un enfoque moderno de la programación para Erlang VM . Consultado el 17 de febrero de 2013 .
  24. ^ José Valim - ElixirConf EU 2017 Keynote . Consultado el 14 de julio de 2017 .
  25. ^ "Behinde el código: el que creó el elixir" . Consultado el 25 de noviembre de 2019 .
  26. ^ "Elixir: un mini-documental" . Consultado el 12 de julio de 2018 .
  27. ^ "Las asignaciones imperativas están rompiendo la aplicación en la actualización 1.7 · Edición # 8076 · elixir-lang / elixir" . GitHub . Consultado el 10 de febrero de 2020 .
  28. ^ Elixir es un lenguaje dinámico y funcional diseñado para crear aplicaciones escalables y fáciles de mantener: elixir-lang / elixir , Elixir, 2019-04-21 , consultado el 2019-04-21
  29. ^ a b c d e f "Elixir" . Consultado el 7 de septiembre de 2014 .
  30. ^ Loder, Wolfgang (12 de mayo de 2015). Erlang y Elixir para programadores imperativos . "Capítulo 16: Conceptos de estructuración de código", título de la sección "Modelo de actor": Leanpub . Consultado el 7 de julio de 2015 .CS1 maint: location (link)
  31. ^ Wlaschin, Scott (mayo de 2013). "Programación Orientada al Ferrocarril" . F # por diversión y ganancias . Archivado desde el original el 30 de enero de 2021 . Consultado el 28 de febrero de 2021 .
  32. ^ "Escribir código asertivo con Elixir" . Consultado el 5 de julio de 2018 .
  33. ^ "Mezclar" . Consultado el 18 de abril de 2019 .
  34. ^ "Resumen" . Consultado el 18 de abril de 2019 .
  35. ^ "Introducción" . Consultado el 18 de abril de 2019 .
  36. ^ "Introducción" . Consultado el 16 de abril de 2019 .

Enlaces externos [ editar ]

  • Sitio web de Elixir Language