english Icono del idioma   español Icono del idioma  

Por favor, use este identificador para citar o enlazar este ítem: https://hdl.handle.net/20.500.12008/52203 Cómo citar
Título: Compilación de un lenguaje funcional simple a LLVM
Autor: Gazzano Núñez, José
Collares Arcos, Andrés
Tutor: Alberto, Pardo
Viera, Marcos
Tipo: Tesis de grado
Palabras clave: Haskell, LLVM, LambdaKal, Kaleidoscope, Programación funcional, Lenguaje de programación
Fecha de publicación: 2025
Resumen: Este proyecto de grado tiene como objetivo la implementación de un lenguaje de programación funcional utilizando Haskell como lenguaje de desarrollo y la infraestructura de compilación LLVM (Low-Level Virtual Machine). El trabajo se enfoca en la implementación de un compilador y un intérprete para un lenguaje funcional simple, los cuales generan código en el lenguaje intermedio de LLVM (LLVM IR). La optimización y generación de código máquina son delegadas a las herramientas provistas por LLVM. El lenguaje funcional creado, denominado LambdaKal, basa su diseño en Kaleidoscope, que es el lenguaje de programación utilizado como ejemplo en la documentación oficial de LLVM. LambdaKal es un lenguaje tipado, conciso y expresivo, capaz de ejecutarse tanto a partir de archivos fuente como en un entorno interactivo REPL (Read-Eval-Print Loop) con un sistema de compilación en tiempo de ejecución o JIT (Just-In-Time compilation). LambdaKal cuenta con tres tipos de datos primitivos: enteros (Int), números en punto flotante (Double) y booleanos (Bool). Además, admite estructuras de datos como listas y tuplas, incluyendo tuplas anidadas. El lenguaje permite la definición de funciones, incluyendo funciones recursivas y de alto orden. En cuanto al control de flujo, ofrece construcciones if/else y la definición de contextos locales mediante expresiones let...in. La biblioteca estándar proporciona un conjunto de funciones para la manipulación de listas y tuplas, así como operaciones sobre tipos escalares como seno, coseno, valor absoluto, etc. También se incluyen funciones típicas de los lenguajes funcionales modernos, tales como map, filter, y foldr. Una característica destacada de LambdaKal es su capacidad para integrarse con funciones escritas en otros lenguajes como C, mediante el uso de bibliotecas compartidas dinámicas en formato .so (Shared Object). Esta funcionalidad permite extender el lenguaje y aprovechar funcionalidades de la biblioteca estándar de C como la función printf. Gracias al uso de primitivas de bajo nivel provistas por LLVM, se logró una implementación eficiente, con un rendimiento que en ciertas pruebas iguala o incluso supera al de lenguajes funcionales establecidos como Haskell. Además, es posible interpretar y compilar para múltiples arquitecturas gracias al uso de LLVM IR como objetivo de compilación. La arquitectura del compilador ha sido diseñada de manera modular para favorecer la extensibilidad y el mantenimiento del código. Asimismo, se desarrolló una extensa suite de pruebas automatizadas de regresión que permite trabajar sobre el proyecto con mayor confianza y estabilidad.
Editorial: Udelar. FI.
Citación: Gazzano Núñez, J. y Collares Arcos, A. Compilación de un lenguaje funcional simple a LLVM [en línea] Tesis de grado. Montevideo: Udelar. FI. INCO, 2025.
Título Obtenido: Ingeniero en Computación.
Facultad o Servicio que otorga el Título: Universidad de la República (Uruguay). Facultad de Ingeniería.
Licencia: Licencia Creative Commons Atribución - No Comercial - Sin Derivadas (CC - By-NC-ND 4.0)
Aparece en las colecciones: Tesis de grado - Instituto de Computación

Ficheros en este ítem:
Fichero Descripción Tamaño Formato   
GC25.pdfTesis de grado552,42 kBAdobe PDFVisualizar/Abrir


Este ítem está sujeto a una licencia Creative Commons Licencia Creative Commons Creative Commons