Este artículo incluye contenido que está escrito como un anuncio . ( Junio de 2020 ) ( Obtenga información sobre cómo y cuándo eliminar este mensaje de plantilla ) |
Paradigma | multi-paradigma : funcional , concurrente , distribuido , orientado a procesos |
---|---|
Apareció por primera vez | 2011 |
Lanzamiento estable | 1.11.4 / 16 de marzo de 2021 [1] |
Disciplina de mecanografía | dinámico , fuerte , pato |
Plataforma | Erlang |
Licencia | Licencia de Apache 2.0 [2] |
Extensiones de nombre de archivo | .ex, .exs |
Sitio web | elixir-lang |
Influenciado por | |
Clojure , Erlang , Ruby | |
Influenciado | |
LFE |
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
with
construcció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 iex
shell 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 ]
- ^ "Lanzamientos - elixir-lang / elixir" . Consultado el 16 de marzo de 2021 , a través de GitHub .
- ^ "elixir / LICENCIA en master · elixir-lang / elixir · GitHub" . GitHub .
- ^ "Lenguajes de programación más populares de 2018 - Blog Elite Infoworld" . 2018-03-30 . Consultado el 8 de mayo de 2018 .
- ^ "Elixir" . José Valim . Consultado el 17 de febrero de 2013 .
- ^ "Elixir en PagerDuty" . PagerDuty . 2018-06-14 . Consultado el 21 de abril de 2019 .
- ^ 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 .
- ↑ Valim, José (23 de junio de 2020). "Elixir en fintech con Brex" . elixir-lang.github.com . Consultado el 14 de noviembre de 2020 .
- ^ "Novedades de la versión 6.0 | Documentación" . www.emetrotel.com . Consultado el 21 de abril de 2019 .
- ^ "Presentación de nuevas herramientas de código abierto para la comunidad de Elixir" . Consultado el 1 de agosto de 2016 .
- ^ "Desbloqueo de nuevas funciones en Moz Pro con una arquitectura sin bases de datos" . Consultado el 1 de agosto de 2016 .
- ^ "Elixir" . Ingeniería de informes de blanqueador . Consultado el 22 de mayo de 2019 .
- ^ Lucia, Dave (24 de septiembre de 2018). "Dos años de Elixir en The Outline" . Consultado el 22 de mayo de 2019 .
- ^ "¿Qué grandes proyectos usan Elixir?" . Consultado el 1 de agosto de 2016 .
- ^ "Por qué Divvy usa Elixir en lugar de lenguajes de codificación más populares" . Consultado el 30 de abril de 2019 .
- ^ 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
- ^ "Elixir en la entrevista de producción: Garth Hitchens" . Consultado el 1 de agosto de 2016 .
- ^ a b "Nervios - Elabore e implemente software integrado a prueba de balas en Elixir" . Consultado el 1 de agosto de 2016 .
- ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
- ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
- ^ "Erlang & Elixir Fest" . Consultado el 18 de febrero de 2019 .
- ^ "Elixir LDN" . Consultado el 12 de julio de 2018 .
- ^ "EMPEX - Conferencia de elixir de Empire State" . Consultado el 12 de julio de 2018 .
- ^ Elixir: un enfoque moderno de la programación para Erlang VM . Consultado el 17 de febrero de 2013 .
- ^ José Valim - ElixirConf EU 2017 Keynote . Consultado el 14 de julio de 2017 .
- ^ "Behinde el código: el que creó el elixir" . Consultado el 25 de noviembre de 2019 .
- ^ "Elixir: un mini-documental" . Consultado el 12 de julio de 2018 .
- ^ "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 .
- ^ 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
- ^ a b c d e f "Elixir" . Consultado el 7 de septiembre de 2014 .
- ^ 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)
- ^ 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 .
- ^ "Escribir código asertivo con Elixir" . Consultado el 5 de julio de 2018 .
- ^ "Mezclar" . Consultado el 18 de abril de 2019 .
- ^ "Resumen" . Consultado el 18 de abril de 2019 .
- ^ "Introducción" . Consultado el 18 de abril de 2019 .
- ^ "Introducción" . Consultado el 16 de abril de 2019 .
Enlaces externos [ editar ]
- Sitio web de Elixir Language