stringtranslate.com

Elixir (lenguaje de programación)

Elixir es un lenguaje de programación funcional , concurrente y de alto nivel 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 . [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 Estados Unidos, [5] Europa, [6] y Japón, [7] así como eventos y conferencias 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 la máquina virtual Erlang, manteniendo al mismo tiempo la compatibilidad con el ecosistema de Erlang. [10] [11]

Elixir está orientado 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 aprendizaje automático, redes neuronales, compilación de GPU, procesamiento de datos y cuadernos computacionales al ecosistema Elixir. [13]

Control de versiones

Cada una de las versiones menores admite un rango específico de versiones de Erlang/ OTP . [14] La versión de lanzamiento estable actual es 1.17.3 [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 comandos escribiendo .elixir <filename>

Ejemplo clásico de Hola mundo :

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

Operador de tubería:

iex> "Elixir" |> String .graphemes () |> Enum .frequency () % {"E" => 1, "i" => 2, "l " => 1, "r" => 1, "x" => 1}    iex> %{ valores : 1 .. 5 } |> Mapa . get ( : valores ) |> Enumeración . map ( & &1 * 2 ) [2, 4, 6, 8, 10]        iex> |> Enumeración . 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> case File . read ( "ruta/al/archivo" ) do iex> { :ok , contenidos } -> IO . puts ( "archivo encontrado: #{ contenidos } " ) iex> { :error , motivo } -> IO . puts ( "archivo faltante: #{ motivo } " ) iex> end          

Comprensión de listas :

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

Lectura asincrónica de archivos con secuencias:

1 .. 5 |> Tarea . async_stream ( & Archivo . read! ( " #{ &1 } . txt" )) |> Flujo . filter ( fn { :ok , contenido } -> Cadena . trim ( contenido ) != "" fin ) |> Enumeración . join ( " \n " )          

Cuerpos con funciones múltiples y protectores :

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" do campo :ciudad # Por defecto es tipo :cadena campo :temp_lo , :entero campo :temp_hi , :entero campo :prcp , :float , predeterminado : 0.0 fin                Tiempo |> dónde ( ciudad : "Cracovia" ) |> ordenar_por ( :temp_lo ) |> límite ( 10 ) |> Repo . todo         

Generando secuencialmente mil procesos:

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

Ejecutar una tarea de forma asincrónica :

tarea = Tarea . async fn -> realizar_acción_compleja () fin otra_acción_que_consume_tiempo () Tarea . esperar tarea       

[ cita requerida ]

Véase también

Referencias

  1. ^ ab "Versión 1.17.3". 18 de septiembre de 2024. Consultado el 21 de septiembre de 2024 .
  2. ^ "elixir/LICENCIA en master · elixir-lang/elixir · GitHub". GitHub .
  3. ^ "Los lenguajes de programación más populares de 2018 - Blog de Elite Infoworld". 2018-03-30. Archivado desde el original el 2018-05-09 . Consultado el 2018-05-08 .
  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. ^ "Erlang & Elixir Fest" . 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 la máquina virtual Erlang . Consultado el 17 de febrero de 2013 .
  11. ^ José Valim - Keynote de ElixirConf EU 2017. Archivado desde el original el 2021-11-17 . Consultado el 2017-07-14 .
  12. ^ "Detrás del código: El que creó 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 2019-04-21
  15. ^ abcdef "Elixir" . Consultado el 7 de septiembre de 2014 .
  16. ^ "Cómo 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 de CS1: ubicación ( enlace )
  18. ^ Wlaschin, Scott (mayo de 2013). "Programación orientada a ferrocarriles". F# por diversión y ganancias . Archivado desde el original el 30 de enero de 2021. Consultado el 28 de febrero de 2021 .

Lectura adicional