stringtranslate.com

Elixir (lenguaje de programación)

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

La comunidad organiza eventos anuales en los Estados Unidos, [5] Europa, [6] y Japón, [7] así como conferencias y eventos locales menores. [8] [9]

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 Erlang VM mientras se mantenía la compatibilidad con el ecosistema de Erlang. [10] [11]

Elixir está dirigido a sitios y aplicaciones de 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. [12]

En 2021, se anunció el esfuerzo de Numerical Elixir con el objetivo de incorporar el aprendizaje automático, las redes neuronales, la compilación de GPU, el procesamiento de datos y los cuadernos computacionales al ecosistema de Elixir. [13]

Versionado

Cada una de las versiones menores admite un rango específico de versiones de Erlang/ OTP . [14] La versión estable actual es 1.17.2 [1] .

Características

Ejemplos

Los siguientes ejemplos se pueden ejecutar en un iex shell o guardar en un archivo y ejecutar desde la línea de comando escribiendo .elixir <filename>

Ejemplo clásico de Hola mundo :

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

Operador de tubería:

iex> "Elixir" |> Cadena . grafemas () |> Enum . frecuencias () %{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}    iex> %{ valores : 1 .. 5 } |> Mapa . obtener ( :valores ) |> Enum . mapa ( & &1 * 2 ) [2, 4, 6, 8, 10]        iex> |> Enum . suma () 30 

Coincidencia de patrones (también conocida como desestructuración):

iex> %{ izquierda : x } = %{ izquierda : 5 , derecha : 8 } iex> x 5      iex> { :ok , [ _ | resto ]} = { :ok , [ 1 , 2 , 3 ]} iex > resto [2, 3]        

Coincidencia de patrones con múltiples cláusulas:

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

Comprensión de lista :

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

Lectura asincrónica de archivos con transmisiones:

1 .. 5 |> Tarea . async_stream ( & Archivo . leer! ( " #{ &1 } .txt " )) |> Corriente . filter ( fn { :ok , contenido } -> String . trim ( contenido ) ! = "" end ) |> Enum . unirse ( " \n " )          

Cuerpos de múltiples funciones con protectores :

def fib ( n ) cuando n 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 # El valor predeterminado es escribir : campo de cadena :temp_lo , : campo entero :temp_hi , : campo entero :prcp , :float , predeterminado : 0.0 fin                Tiempo |> dónde ( ciudad : "Cracovia" ) |> order_by ( :temp_lo ) |> límite ( 10 ) |> Repo . todo         

Generando secuencialmente mil procesos:

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

Realizar una tarea de forma asincrónica :

tarea = Tarea . async fn -> perform_complex_action () finaliza other_time_consum_action () Tarea . esperar tarea       

[ cita necesaria ]

Ver también

Referencias

  1. ^ ab "Versión 1.17.2". 6 de julio de 2024 . Consultado el 22 de julio de 2024 .
  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. Archivado desde el original el 9 de mayo de 2018 . Consultado el 8 de mayo de 2018 .
  4. ^ "Elíxir". José Valim . Consultado el 17 de febrero de 2013 .
  5. ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
  6. ^ "ElixirConf" . Consultado el 11 de julio de 2018 .
  7. ^ "Festival Erlang y Elixir" . Consultado el 18 de febrero de 2019 .
  8. ^ "Elixir LDN" . Consultado el 12 de julio de 2018 .
  9. ^ "EMPEX - Conferencia Empire State Elixir" . Consultado el 12 de julio de 2018 .
  10. ^ Elixir: un enfoque moderno de programación para Erlang VM . Consultado el 17 de febrero de 2013 .
  11. ^ José Valim - Conferencia magistral de ElixirConf EU 2017. Archivado desde el original el 17 de noviembre de 2021 . Consultado el 14 de julio de 2017 .
  12. ^ "Detrás del código: el que creó el elixir" . Consultado el 25 de noviembre de 2019 .
  13. ^ "Elixir numérico (Nx)" . Consultado el 6 de mayo de 2024 .
  14. ^ Elixir es un lenguaje dinámico y funcional diseñado para crear aplicaciones escalables y mantenibles: elixir-lang/elixir, Elixir, 2019-04-21 , consultado el 21 de abril de 2019.
  15. ^ abcdef "Elixir" . Consultado el 7 de septiembre de 2014 .
  16. ^ "Escribir código asertivo con Elixir". 24 de septiembre de 2014 . Consultado el 5 de julio de 2018 .
  17. ^ 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 .{{cite book}}: Mantenimiento CS1: ubicación ( enlace )
  18. ^ Wlaschin, Scott (mayo de 2013). "Programación orientada al ferrocarril". F# para diversión y ganancias . Archivado desde el original el 30 de enero de 2021 . Consultado el 28 de febrero de 2021 .

Otras lecturas