Análisis de concurrencia en programas de Elixir con la herramienta Rascal (2025)
Elixir es un lenguaje de programación destacado por su sólido modelo de concurrencia, diseñado para construir aplicaciones distribuidas, escalables y resilientes. A medida que su adopción crece en sectores como telecomunicaciones, fintech y servicios web, surge la necesidad de identificar los elementos concurrentes de sus aplicaciones. Comprender los elementos de concurrencia podría llegar en un futuro a ser útil en la facilitación en el diagnóstico de problemas y la optimización de recursos. El objetivo principal de este trabajo es identificar los elementos de concurrencia en programas desarrollados en Elixir. Para ello, Rascal facilita la transformación del código fuente de Elixir en árboles de sintaxis concreta, que representan la estructura escrita del código. Estos árboles permiten inspeccionar elementos de concurrencia y analizar las interacciones entre los componentes del programa de forma estructurada. El análisis con Rascal se fundamenta en el uso de gramáticas formales y herramientas que permiten definir tanto la sintaxis concreta (cómo se escribe el código) como la abstracta (su estructura lógica). A través de módulos gramaticales, Rascal transforma el código fuente en estructuras como árboles de sintaxis abstracta (AST), que representan los elementos del programa. En particular, los árboles de sintaxis (parse trees) proporcionan una representación jerárquica del código fuente, mostrando cómo los elementos del lenguaje se relacionan de acuerdo con sus reglas gramaticales. Esto permite identificar elementos de concurrencia, exponiendo de forma explícita las interacciones y dependencias entre los diferentes componentes. Así, los parse trees se convierten en una manera útil para la visualización de la concurrencia en programas escritos en Elixir. Estas estructuras no solo permiten detectar elementos de concurrencia, sino también la integración de Rascal con colecciones, expresiones regulares y herramientas de visualización que lo convierte en una solución versátil para el estudio de programas en diferentes lenguajes.