El pasado 11 de abril tuve la fortuna de poder entrevistar a Louis Pilfold, creador del lenguaje Gleam. Hablamos durante una hora sobre el lenguaje, su futuro y sus orígenes, ¿damos una vuelta por Gleam?
Me habría gustado tener no solo la transcripción sino también el vídeo disponible con sus subtítulos. En el momento que esté terminado lo pondré a disposición en Youtube. Puedes suscribirte al canal para recibir la notificación de cuando esté disponible.
Pasamos con la entrevista.
Louis Pilfold
Louis Pilfold es un entusiasta desarrollador, un programador políglota que cayó enamorado (como muchos otros) de la máquina virtual de Erlang (BEAM) pero al mismo tiempo quería seguir empleando lenguajes de tipo ML que le proporcionasen una mayor ayuda al detectar inconsistencias y fallos en su código. Este creativo desarrollador británico decidió probar como muchos otros y proporcionar un nuevo sabor al ecosistema BEAM agregando un nuevo lenguaje. Le damos la bienvenida y pasamos directamente a las preguntas.
El origen del nombre
Manuel :
Es un placer tenerte aquí y poder hablar sobre Gleam porque creo que es un lenguaje muy interesante y tu has estado en su creación desde el principio. Así que, mi primera pregunta, ¿de dónde viene el nombre de Gleam?
Louis :
Bueno, en principio no estaba seguro de cómo llamarlo, así que agarré un diccionario y comencé a leerlo, comencé en la A, después la B y me mantuve leyendo hasta que encontré una palabra que parecía buena. Yo realmente quería algo que fuese relativamente fácil de decir, fácil de deletrear y, tú sabes, que la gente no se confunda.
Entonces, vi Gleam y pensé: "es perfecto". Porque rima con BEAM, el cuál es el nombre de la máquina virtual de Erlang y también es un sinónimo de BEAM, significan lo mismo, así que me fascinó. Sentí que encajaba bien. Parecía una palabra bonita. Así que ahí lo tienes, no hay una gran y excitante historia, solo fuerza bruta en realidad.
Manuel :
Cuando dijiste que la palabra rimaba con BEAM, inmediatamente pensé "no pun intended" (juego de palabras no intencionado, en UK es una expresión muy empleada), pero en este caso sí fue así.
¿Cuál fue la idea inicial o la necesidad a cubrir?
Todo lenguaje surge de algún sitio, la idea que subyace y que motiva la aparición del lenguaje indica su orientación, a qué se enfoca y qué problemas soluciona mejor.
Manuel :
¿De dónde viene la idea de Gleam? ¿Cuál fue la idea inicial o la necesidad para crearlo inicialmente?
Louis :
Si echas un vistazo al principio de Gleam es algo así como solo una exploración o fue solo una exploración de cómo la compilación de la máquina virtual de Erlang podía funcionar con el lenguaje porque es algo que encontré muy interesante, así que comenzó como un poco de auto descubrimiento, o algo así, intentando aprender cosas por mi mismo y entonces tuve algo de éxito haciendo un poco de lenguaje tipado dinámicamente que compilaba a BEAM e hice una charla en una conferencia sobre esto.
Después volví a mi trabajo normal. Entonces en el siguiente año estuve dándole vueltas a, ¿qué aspecto tendría un nuevo lenguaje para BEAM? ¿Qué podría ser realmente bueno? ¿Qué podría traer a BEAM para hacer su sistema mejor de lo que tenemos actualmente?
Una de las cosas que aparecían recurrentemente era mi experiencia con lenguajes como Elm u OCaml y este tipo de lenguajes inspirados en ML que son realmente de lenguajes tipados de utilidad que te ayudan a cazar fallos y errores y se sienten como casi un compañero de programación en parejas cuando estás trabajando solo con el compilador y eso era algo que extrañaba cuando no empleaba estos lenguajes y volviendo a mi querido Erlang y el maravilloso Elixir, yo no tenía estas cosas y me sentía en conflicto porque quería tener lo que BEAM proporcionaba, es un sistema de ejecución realmente maravilloso, el modelo de concurrencia es fantástico, la forma de tratar con errores es fantástico, pero no tenía esa ayuda y quería un poco de ayuda del compilador así que pensé: "vale, llegados a este punto no sé cómo los sistemas de tipos funcionan realmente, vamos a ver si puede hacer uno".
Hice varios prototipos y parecían bastante prometedores y entonces solo continué y aquí estamos, tenemos lo que creo que es un lenguaje útil.
Manuel :
Creo que sí, porque tengo la impresión de que cuando estamos usando Gleam en comparación con otros lenguajes de BEAM, tenemos pleno control de los tipos de datos lo que es muy significativo y con un pequeño toque de Rust, pero hablaremos de esto más adelante.
¿A qué categoría pertenece Gleam?
Manuel :
Cuando pensaste en la implementación de Gleam, ¿tuviste claro a qué categorías pertenecería? ¿Podríamos decir que es programación funcional, lógica, con tipado fuerte, gradual o estático?
Louis :
Sí, qué cantidad de buzzwords. Creo que definitivamente funcional porque ¿qué pasaría si eliminamos todos los tipos y toda esa sustancia y miramos únicamente lo que en realidad hace el sistema en ejecución? Es práctiamente lo mismo que Erlang, es bastante similar, así que tú sabes, es una programación funcional muy simple y es inmutable, pero si traemos todo eso que hace el compilador también es tipado estático, un lenguaje fuertemente tipado también y debido a que construimos sobre la máquina virtual de Erlang es también basado en actores y altamente concurrente.
Aunque debería decir una pequeña advertencia en que Gleam compila tanto a la máquina virtual de Erlang como a JavaScript y puede ejecutarse en cualquier sitio donde JavaScript se ejecute. Así, cuando estamos ejecutando el código en JavaScript, tenemos todas las propiedades iniciales, pero no disponemos del sistema de actores porque aunque sería adorable poder ejecutar actores en JavaScript, tomamos una decisión de no implementar el sistema de actores de Erlang en JavaScript y no creo que realmente se pueda hacer completamente, tú sabes, crear una aproximación es lo mejor que podríamos hacer con las capacidades del tiempo de ejecución de JavaScript, pero significa que haríamos JavaScript muy difícil y una cosa que Gleam realmente intenta hacer es actuar elegantemente con los lenguajes y los sistemas únicos.
Así que es realmente fácil usar Gleam desde Erlang y queremos hacerlo fácil también el uso de Gleam desde JavaScript. Así se hace un poco más predecible. Así tenemos el sistema basado en actores si estamos en Erlang pero probablemente no tendremos sistema basado en actores si estamos en JavaScript.
Aquí Louis nos indica la decisión de Gleam de no agregar OTP en Gleam, lo cual sería necesario si queremos emplear elementos como gen_server
cuando transpilamos a JavaScript. La decisión tomada por el equipo de desarrollo es simplificar y mantener OTP solo cuando se transpila a Erlang al igual que se pueden obtener otras ventajas cuando se transpila a JavaScript.
Casos de Uso de Gleam
Manuel :
¿Qué tipo de desarrollos o casos de uso crees que están mejor cubiertos en Gleam?
Louis :
Gleam intenta ser un lenguaje de programación de propósito general, estamos muy inspirados por Elm en términos de mostrar mensajes de error realmente bonitos y obtener un buen comienzo y un buen diseño para ser fácil de aprender. No hacemos lo mismo que Elm hace, no intentamos hacer solo una cosa específica. Elm está muy enfocado a escribir aplicaciones web en el navegador. En Gleam, puedes escribir aplicaciones web para el navegador compilandolas a JavaScript para obtener exactamente lo mismo que Elm pero también puedes usarlo para escribir, ya sabes, JSON API, o quizás una aplicación web más tradicional donde renderizas el HTML o puedes ir a la base de datos o puedes escribir scripts para la línea de comandos, puedes escribir lo que quieras, nosotros intentamos ser realmente de propósito general pero eso no nos dice en qué sitios Gleam es mejor o peor.
Un sitio donde creo que Gleam es mucho mejor que otros lenguajes es escribiendo servicios de red porque se construyen sobre BEAM y este tiene poderosas capacidades para enfocarse en concurrencia, tolerancia a fallos, baja latencia y cosas así, así que si quieres hacer una aplicación web o una API web, o una base de datos, o una cola de mensajes, cualquier cosa donde, tú sabes, Erlang o Elixir pueda realmente sobresalir, creo que Gleam puede ser también sobresalir.
Es tan solo otra forma de escribir el código, puedes tener una experiencia diferente de desarrollo la cual puede ser muy gratificante o si no te gustan los tipos quizás pueda ser ligeramente menos gratificante, siempre vale la pena hablar sobre los lugares que no son tan buenos y porque no podemos ser positivos todo el tiempo, hay un área donde Gleam probablemente no es sobresaliente, es en cualquier sitio donde necesites muchos tipos de computaciones numéricas. Es una de las grandes desventajas de BEAM por hacer referencia solo a que no es muy veloz en parte porque usamos números enteros de tamaño arbitrario que son muy convenientes en programación normal pero si si queremos, ya sabes, hacer un puñado de cálculos científicos de números no va a ser muy bueno, ya sabes, como Python por sus librerías matemáticas o Julia o similares.
Manuel :
Hablando de esto, cuando comentabas el cálculo científico de números, recordé que José Valim está trabajando ahora en algunas librerías que podrían cambiar esto en poco tiempo.
Louis :
Súper emocionante, no tengo ni idea si podremos usarlo desde Erlang o Gleam o cualquier otro aún, pero ellos pueden estar eliminando uno de esos grandes problemas con la máquina virtual. Es muy emocionante.
¿Cómo se emplea Gleam en los proyectos?
Manuel :
He oído que algunas compañias están usando Gleam principalmente para implementar su lógica de negocio, es decir, crean un proyecto Elixir o Erlang y entonces agregan código en Gleam para implementar la lógica de negocio porque consideran más fácil emplear las facilidades de Gleam con respecto a los tipos y otras mecánicas. ¿Sabes de alguno de estos proyectos?
Louis :
He oído de unos pocos proyectos y sí, parece ser ese tipo de deseo repetido de obtener algo de un alto valor o de una parte de alta complejidad de un sistema de Elixir o Erlang y escribirlo usando Gleam, porque bueno ahí está la idea de poder obtener más seguridad con un lenguaje que use tipos el cual creo puede ser un poco engañoso. Creo que lo que obtienes es ayuda, creo que ayuda es probablemente un mejor término. Te permite detectar inconsistencias un poco más fácil así puedas ver qué es una diferencia. ¿Es un error o una elección? Bueno, hay cosas que queremos poder gritar y ver en estos sistemas de alto valor.
Así que es realmente maravilloso y creo que es un signo real de que un montón del trabajo que se ha volcado en el diseño de Gleam funciona y la gente puede hacer algunos sistemas en Gleam y ponerlo en bonita conjunción con Elixir y Erlang. Aún creo que tenemos un montón de mejoras que hacer. Es bastante hábil ahora pero me gustaría que estuviese realmente libre de fallos y hacer realmente fácil usar Gleam con otros lenguajes.
Aunque hay también algunas personas que escriben proyectos completamente en Gleam lo cual encuentro personalmente un poco más emocionante que poner Gleam dentro de una aplicación Erlang o Elixir, ellos comienzan desde la base y continúan desde ahí y creo que particularmente con la siguiente versión, vamos a entregar el servidor de lenguaje de forma que puedas tener características de IDE en todos tus editores tanto si eres una persona-Vim o una persona-Emacs o cualquier otro tipo de persona. Tendrás estas capacidades y una vez comiences creo que habrá un montón más de razones por las que desees utilizar Gleam por sí mismo porque vamos a tener algo realmente Turing robusto.
Grandes expectativas que nos depara Gleam. Un proyecto que ha comenzado desde una idea inicial y que como vemos, versión tras versión, nos va proporcionando nuevas características. Inicialmente surgió como una extensión a agregar sobre Erlang para producir código de forma mucho más simple y hoy en día es posible crear un proyecto completamente sin escribir ni ver código Erlang por el camino.
Continuará...
Si quieres apoyar el desarrollo de Gleam, puedes hacerte sponsor del proyecto, contribuir con código, escribiendo documentación o simplemente probándolo. En su página web puedes encontrar más información.
Esta es la primera parte de la entrevista que mantuve con Louis. En las siguientes entregas seguimos comentando más aspectos del lenguaje, no olvides dejarnos un comentario sobre qué te parece Gleam, la entrevista o cualquier otra idea que nos pueda servir para mejorar.