Elixir/Phoenix

Elixir

Esperamos que el lenguaje funcional Elixir se generalice en el mundo del desarrollo de aplicaciones web en la década de 2020.

¿Por qué lenguajes funcionales? ¿Por qué el elixir?

Esto se debe a que el entorno que rodea las aplicaciones web se está volviendo cada vez más complejo. Ahora podemos manejar fácilmente computadoras con muchos núcleos y una gran memoria. Como resultado, continuamos creando aplicaciones web más complejas, nos guste o no.

Para que un sistema complejo funcione correctamente, es importante desarmar el sistema en una colección de partes simples. Si es posible, es deseable que estas partes sean independientes entre sí y se muevan de forma autónoma y en paralelo. Los lenguajes funcionales son adecuados para construir tales sistemas.

Hay muchos tipos de lenguajes funcionales, pero esperamos especialmente Elixir. La gramática de Elixir es similar a la de los lenguajes populares en el desarrollo web como Python, PHP, Ruby y Perl, por lo que los obstáculos de transición son muy bajos. También tiene características interesantes que marcan la mente del programador, como la coincidencia de patrones y los operadores de canalización.

Elixir es un nuevo idioma nacido en 2012. A partir de 2019, se considera que se encuentra en la primera fase del ciclo de vida de la tecnología (Innovadores)1, pero anticipamos que en algún momento de la década de 2020 pasará de la fase de Adoptadores Tempranos a Fase de mayoría temprana.

  1. 1 Programming Languages InfoQ Trends Report - October 2019

Características de los lenguajes funcionales.

La mayoría de los lenguajes de programación tienen el concepto de una función. Algunos lenguajes pueden llamarlo subrutina, método o procedimiento, pero son esencialmente lo mismo.

Por lo tanto, la persona que escucha la palabra "lenguaje funcional" por primera vez se siente incómoda. Suena como una palabra para lenguajes de programación en general. Pero ese no es el caso.

De hecho, el término lenguaje funcional no tiene una definición ampliamente aceptada y clara. Entonces, al comparar dos lenguajes específicos, Ruby y Elixir, explicaremos (parte de) las características de los lenguajes funcionales.

Tanto Ruby como Elixir manejan varios datos (entero, cadena de caracteres, tiempo, etc.) necesarios para la ejecución del programa nombrándolos. Este nombre se llama variable. Como ejemplo, consideremos el proceso de agregar "!" al final de la cadena señalada por la variable s cuando su longitud es 3 o menos.

Ahora s apunta a la cadena "abc". Esta cadena se almacena en una ubicación de memoria. En Ruby, estos datos pueden modificarse directamente a "abc!". Sin embargo, Elixir no puede alterar los datos en sí. En cambio, transforma los datos a otros datos. Específicamente, "abc" y "!" se concatenan para crear la cadena "abc!", y nuevamente se asocia con la variable s.

Aunque parece una diferencia menor, en realidad tiene un significado decisivo. ¿Qué sucede si dos programas X e Y se ejecutan en paralelo en la misma computadora, ambos tienen una variable s que se refiere a la cadena "abc" almacenada en la misma ubicación en la memoria, y el proceso anterior se ejecuta casi simultáneamente en ambos programas?

En el caso de Ruby, algo malo sucede dependiendo del momento. Inmediatamente después de que X confirme que la longitud de la cadena señalada por la variable s es 3, si Y agrega "!" a la misma cadena, X también agrega "!" después de eso, entonces finalmente la cadena señalada por la variable s se cambiará a "abc!!".

Pero esto no sucede con Elixir. Esto se debe a que los datos originales se mantienen intactos y se crean nuevamente otros datos. En otras palabras, Elixir transforma los datos sin cambiarlos.

Por lo tanto, hay una diferencia significativa entre la alteración y la transformación. La característica más importante del lenguaje funcional Elixir es que los datos no pueden modificarse. Los programas escritos en Elixir proceden a través de una cadena de transformaciones de datos. Los lenguajes como Elixir se denominan funcionales porque esta transformación de datos es similar a una función matemática.

Por supuesto, si programa cuidadosamente en Ruby, los problemas anteriores no ocurrirán. Pero los humanos cometen errores. Elixir es más seguro en situaciones donde está involucrado el procesamiento paralelo.

Marco de Phoenix

Phoenix Framework (“Phoenix”) es un marco de desarrollo de aplicaciones web escrito en Elixir. Está muy influenciado por Ruby on Rails. En particular, el método de configuración de enrutamiento y cómo escribir controladores y plantillas HTML son muy similares. Aunque el ambiente es un poco diferente cuando se trata de manejar bases de datos, las ideas fundamentales son comunes.

Lo que más nos gusta de Phoenix es que puede manejar WebSockets muy fácilmente. WebSocket es un estándar técnico para realizar comunicaciones bidireccionales en aplicaciones web. El uso de WebSocket hace que sea muy fácil desarrollar una aplicación de página única (SPA).

En cuanto a WebSocket, también debe prestar atención a Phoenix LiveView. Reúne datos HTML en el lado del servidor, envía la diferencia al lado del navegador con WebSocket, reescribe el DOM y actualiza la pantalla del navegador.

Si usa LiveView, puede escribir código que se escribió en JavaScript hasta ahora en Elixir. Esto tiene dos ventajas. Una es que no tiene que escribir códigos de validación en dos idiomas. La otra es que la mayor parte del procesamiento se realiza en el servidor, lo que reduce el riesgo de fuga secreta y acceso no autorizado.

Desarrollo de Teamgenik por Elixir/Phoenix

En 2016, descubrimos la posibilidad de desarrollo web de Elixir/Phoenix y adquirimos conocimientos a través del desarrollo de aplicaciones experimentales.

En el verano de 2018, comenzamos un nuevo desafío con Elixir/Phoenix. Ese es Teamgenik.

Teamgenik es un servicio que brinda a los usuarios la experiencia de convertirse en propietarios de mini SNS, pero se caracteriza por la capacidad de crear mini aplicaciones en el navegador y agregar funciones a mini-SNS. Hemos descubierto que Elixir/Phoenix (especialmente Phoenix LiveView) se puede usar para implementar eficientemente estas mini aplicaciones.

Actualmente continuamos desarrollando Teamgenik día y noche. La versión preliminar se lanzará a principios de diciembre de 2019. Y planeamos lanzar la versión 1.0 en la primavera de 2020.