Una descripción general de Erlang con ejemplos

Erlang es un lenguaje de programación funcional desarrollado por Ericsson para su uso en aplicaciones de telecomunicaciones. Debido a que sintieron que es inaceptable que un sistema de telecomunicaciones tenga un tiempo de inactividad significativo, Erlang fue construido para ser (entre otras cosas):

  • distribuido y tolerante a fallas (una pieza de software o hardware defectuoso no debería hacer caer el sistema)
  • concurrente (puede generar muchos procesos, cada uno ejecutando un trabajo pequeño y bien definido, y aislado entre sí pero capaz de comunicarse a través de mensajes)
  • intercambiable en caliente (el código se puede intercambiar en el sistema mientras está en ejecución, lo que genera una alta disponibilidad y un tiempo de inactividad mínimo del sistema)

Sintaxis

Erlang hace un uso intensivo de la recursividad . Dado que los datos son inmutables en Erlang, no se permite el uso de whiley forbucles (donde una variable debe seguir cambiando su valor).

Aquí hay un ejemplo de recursividad, que muestra cómo una función quita repetidamente la primera letra del frente de un nombre y la imprime, y solo se detiene cuando se encuentra la última letra.

-module(name). -export([print_name/1]). print_name([RemainingLetter | []]) -> io:format("~c~n", [RemainingLetter]); print_name([FirstLetter | RestOfName]) -> io:format("~c~n", [FirstLetter]), print_name(RestOfName).

Salida:

> name:print_name("Mike"). M i k e ok

También hay un gran énfasis en la coincidencia de patrones , que con frecuencia elimina la necesidad de una ifestructura o casedeclaración. En el siguiente ejemplo, hay dos coincidencias para nombres específicos, seguidas de un comodín para cualquier otro nombre.

-module(greeting). -export([say_hello/1]). say_hello("Mary") -> "Welcome back Mary!"; say_hello("Tom") -> "Howdy Tom."; say_hello(Name) -> "Hello " ++ Name ++ ".".

Salida:

> greeting:say_hello("Mary"). "Welcome back Mary!" > greeting:say_hello("Tom"). "Howdy Tom." > greeting:say_hello("Beth"). "Hello Beth."

Almacenamiento de términos de Erlang

Erlang Term Storage, normalmente abreviado como ETS, es una base de datos en memoria integrada en OTP. Es accesible dentro de Elixir y es una poderosa alternativa a soluciones como Redis cuando su aplicación se ejecuta en un solo nodo.

Inicio rápido

Para crear una tabla ETS, primero debe inicializar una tabla tableName = :ets.new(:table_otp_name, []); una vez que haya inicializado una tabla, puede: insertar datos, buscar valores, eliminar datos y más.

Demostración de ETS en IEX

iex(1)> myETSTable = :ets.new(:my_ets_table, []) #Reference iex(2)> :ets.insert(myETSTable, {"favoriteWebSite", "freeCodeCamp"}) true iex(3)> :ets.insert(myETSTable, {"favoriteProgrammingLanguage", "Elixir"}) true iex(4)> :ets.i(myETSTable)  {<>,<>}  {<>,<>} EOT (q)uit (p)Digits (k)ill /Regexp -->

Persistencia

Las tablas ETS no son persistentes y se destruyen una vez que finaliza el proceso que las posee. Si desea almacenar datos de manera persistente, se recomienda una base de datos tradicional y / o un almacenamiento basado en archivos.

Casos de uso

Las tablas ETS se utilizan comúnmente para almacenar datos en caché en la aplicación, por ejemplo, los datos de la cuenta extraídos de una base de datos se pueden almacenar en una tabla ETS para reducir la cantidad de consultas a la base de datos. Otro caso de uso es para limitar el uso de funciones en una aplicación web; la velocidad rápida de lectura y escritura de ETS lo hace excelente para esto. Las tablas ETS son una herramienta poderosa para desarrollar aplicaciones web altamente concurrentes al menor costo de hardware posible.

Pruébalo

Hay sitios web en los que puede intentar ejecutar comandos de Erlang sin tener que instalar nada localmente, como estos:

  • ¡Darle una oportunidad! (un tutorial práctico)
  • Tutoriales Codificación de puntos

Si desea instalarlo en su máquina (o en una virtual), puede encontrar los archivos de instalación en Erlang.org o en Erlang Solutions.

Más información:

  • Sobre Erlang
  • Erlang (lenguaje de programación)