Elixir es un lenguaje de programación funcional , concurrente , de alto nivel y de propósito general que se ejecuta en la máquina virtual BEAM , la cual también se utiliza para implementar el lenguaje de programación Erlang . [ 7 ] Elixir se basa en Erlang y comparte las mismas abstracciones para la creación de aplicaciones distribuidas y tolerantes a fallos . Elixir también proporciona herramientas y un diseño extensible . Este último se apoya en la metaprogramación en tiempo de compilación con macros y el polimorfismo mediante protocolos. [ 8 ]
La comunidad organiza eventos anuales en Estados Unidos, [ 9 ] Europa, [ 10 ] y Japón, [ 11 ] así como eventos y conferencias locales menores. [ 12 ] [ 13 ]
Historia
José Valim creó el lenguaje de programación Elixir como un proyecto de investigación y desarrollo 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. [ 14 ] [ 15 ]
Elixir está orientado a sitios web y aplicaciones a gran escala. Utiliza características de Ruby , Erlang y Clojure para desarrollar un lenguaje de alta concurrencia y baja latencia. Fue diseñado para manejar grandes volúmenes de datos. Elixir también se utiliza en telecomunicaciones, comercio electrónico y finanzas. [ 16 ]
En 2021, se anunció el proyecto Numerical Elixir con el objetivo de incorporar aprendizaje automático, redes neuronales, compilación de GPU, procesamiento de datos y cuadernos computacionales al ecosistema de Elixir. [ 17 ]
Características
- Compila a código de bytes para la máquina virtual BEAM de Erlang . [ 8 ] Interoperabilidad total con el código Erlang, sin impacto en el tiempo de ejecución .
- Escalabilidad y tolerancia a fallos, gracias a los mecanismos de concurrencia ligeros de Erlang [ 8 ].
- Herramientas integradas para gestionar dependencias, compilar código, ejecutar pruebas, formatear código, depurar de forma remota y mucho más.
- Un REPL interactivo dentro de programas en ejecución, incluidos servidores web Phoenix , con recarga de código y acceso al estado interno.
- Todo es una expresión [ 8 ]
- Coincidencia de patrones [ 8 ] para promover código asertivo [ 18 ]
- Sugerencias de tipo para herramientas de análisis estático
- Datos inmutables, con énfasis, al igual que otros lenguajes funcionales , en la recursión y las funciones de orden superior en lugar de bucles basados en efectos secundarios.
- Programación concurrente sin recursos compartidos mediante paso de mensajes ( modelo de actor ) [ 19 ]
- Colecciones perezosas y asíncronas con flujos
- Programación orientada al ferrocarril mediante la
withconstrucción [ 20 ] - Metaprogramación higiénica mediante acceso directo al árbol de sintaxis abstracta (AST). [ 8 ] Las bibliotecas suelen implementar pequeños lenguajes específicos de dominio , como para bases de datos o pruebas.
- Ejecución de código en tiempo de compilación. El compilador de Elixir también se ejecuta en BEAM, por lo que los módulos que se están compilando pueden ejecutar inmediatamente el código que ya ha sido compilado.
- Polimorfismo mediante un mecanismo llamado protocolos. Despacho dinámico , como en Clojure , pero sin despacho múltiple porque los protocolos de Elixir despachan en un solo tipo.
- Soporte para documentación mediante cadenas de documentación similares a las de Python en el lenguaje de formato Markdown [ 8 ]
- Compatibilidad con Unicode y cadenas UTF-8
Ejemplos
Los siguientes ejemplos se pueden ejecutar en un iexshell o guardar en un archivo y ejecutar desde la línea de comandos escribiendo .elixir <filename>
Ejemplo clásico de "Hola mundo" :
iex> IO . puts ( "Hello World!" ) ¡Hola Mundo!Operador de tuberías:
iex> "Elixir" |> String . graphemes () |> Enum . frequencies () %{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}iex> %{ valores : 1 .. 5 } |> Map . get ( :valores ) |> Enum . map ( & &1 * 2 ) [2, 4, 6, 8, 10]iex> %{ valores : 1 .. 5 } |> Map . get ( :valores ) |> Enum . map ( & &1 * 2 ) |> Enum . sum () 30Coincidencia de patrones (también conocida como desestructuración):
iex> %{ izquierda : x } = %{ izquierda : 5 , derecha : 8 } iex> x 5iex> { :ok , [ _ | resto ]} = { :ok , [ 1 , 2 , 3 ]} iex> resto [2, 3]Coincidencia de patrones con múltiples cláusulas:
iex> case File . read ( "path/to/file" ) do iex> { :ok , contents } -> IO . puts ( "found file: #{ contents } " ) iex> { :error , reason } -> IO . puts ( "missing file: #{ reason } " ) iex> endiex> para n <- 1 .. 5 , rem ( n , 2 ) == 1 , hacer : n * n [1, 9, 25]Lectura asíncrona de archivos con flujos de datos:
1 .. 5 |> Tarea . async_stream ( & Archivo . leer! ( " #{ &1 } .txt" )) |> Flujo . filtro ( fn { :ok , contenido } -> Cadena . trim ( contenido ) != "" fin ) |> Enumeración . unir ( " \n " )Cuerpos multifuncionales con protecciones :
def fib ( n ) cuando n está en [ 0 , 1 ], hacer : n def fib ( n ), hacer : fib ( n - 2 ) + fib ( n - 1 )Bases de datos relacionales con la biblioteca Ecto:
esquema "clima" hacer campo :ciudad # Por defecto es tipo :cadena campo :temp_lo , :entero campo :temp_hi , :entero campo :prcp , :flotante , por defecto : 0.0 finClima |> donde ( ciudad : "Cracovia" ) |> ordenar_por ( :temp_lo ) |> límite ( 10 ) |> Repositorio . todoGenerando mil procesos de forma secuencial:
para num <- 1 .. 1000 , hacer : spawn fn -> IO . puts ( " #{ num * 2 } " ) finRealizar una tarea de forma asíncrona :
tarea = Tarea.async fn- > perform_complex_action ( ) end other_time_consuming_action ( ) Tarea.await tareaVéase también
Referencias
- ^ Valim, José (25 de mayo de 2012). "Lanzamiento de Elixir v0.5.0" . elixir-lang . Consultado el 22 de enero de 2026 .
- ↑ "Evolución de Elixir: Historia y ecosistema" . Software Patterns Lexicon . 23 de noviembre de 2024. Archivado del original el 22 de enero de 2026. Consultado el 22 de enero de 2026 .
- ↑ Woo, Jiahao (15 de enero de 2024). "La historia de Elixir" . OSS History . Archivado del original el 15 de enero de 2024. Recuperado el 22 de enero de 2026 .
- ↑ https://github.com/elixir-lang/elixir/releases/ .
{{cite web}}: Falta o está vacío|title=( ayuda ) - ↑ https://elixir-lang.org/blog/2026/06/03/elixir-v1-20-0-released/
- ↑ "elixir/LICENSE en master · elixir-lang/elixir · GitHub" . GitHub .
- ↑ "Lenguajes de programación más populares de 2018 - Blog de Elite Infoworld" . 30 de marzo de 2018. Archivado del original el 9 de mayo de 2018. Consultado el 8 de mayo de 2018 .
- 1 2 3 4 5 6 7 "Elixir" . elixir-lang . Consultado el 17 de febrero de 2013 .
- ↑ "ElixirConf" . Consultado el 11 de julio de 2018 .
- ↑ "ElixirConf" . Consultado el 11 de julio de 2018 .
- ↑ "Erlang & Elixir Fest" . Archivado del original el 30 de marzo de 2019. Consultado el 18 de febrero de 2019 .
- ↑ "Elixir LDN" . Archivado del original el 12 de julio de 2018. Consultado el 12 de julio de 2018 .
- ↑ "EMPEX - Empire State Elixir Conference" . Consultado el 12 de julio de 2018 .
- ↑ Elixir - Un enfoque moderno para la programación en la máquina virtual de Erlang . Consultado el 17 de febrero de 2013 .
- ↑ José Valim - Conferencia magistral de ElixirConf EU 2017. Archivado del original el 17 de noviembre de 2021. Consultado el 14 de julio de 2017 .
- ↑ "Detrás del código: El creador de Elixir" . Consultado el 25 de noviembre de 2019 .
- ↑ "Numerical Elixir (Nx)" . GitHub . Consultado el 6 de mayo de 2024 .
- ↑ "Escribiendo código asertivo con Elixir" . 24 de septiembre de 2014. Consultado el 5 de julio de 2018 .
- ↑ 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 . Recuperado el 7 de julio de 2015 .
{{cite book}}: CS1 mantenimiento: ubicación ( enlace ) - ↑ Wlaschin, Scott (mayo de 2013). "Programación orientada al ferrocarril" . F# para divertirse y ganar dinero . Archivado del original el 30 de enero de 2021. Recuperado el 28 de febrero de 2021 .
Lecturas adicionales
- Simon St. Laurent; J. Eisenberg (22 de diciembre de 2016). Introducción a Elixir: Primeros pasos en la programación funcional, 2.ª edición . O'Reilly Media . ISBN 978-1491956779.
- Sasa Juric (12 de enero de 2019). Elixir en Acción 2ª Edición . Publicaciones de Manning . ISBN 978-1617295027.
- Lenguajes de programación concurrentes
- Lenguajes funcionales
- Lenguajes de programación que coinciden con patrones
- Lenguajes de programación
- Lenguajes de programación creados en 2012
- Software que utiliza la licencia Apache.
- Inventos brasileños