Articulo de referencia

Luau (lenguaje de programación)

Luau ( / ˈ l uː . aʊ / , LOO -ow ) es un lenguaje de scripting de código abierto derivado de Lua 5.1 . Desarrollado por Roblox Corporation , sirve como lenguaje de scripting pri...

Luau ( / ˈ l . / , LOO -ow ) es un lenguaje de scripting de código abierto derivado de Lua 5.1 . Desarrollado por Roblox Corporation , sirve como lenguaje de scripting principal para la plataforma Roblox . Luau añade tipado gradual , mejoras de rendimiento y características de entorno aislado al lenguaje base Lua, manteniendo la compatibilidad con versiones anteriores de Lua 5.1.

El lenguaje se lanzó a los desarrolladores de Roblox en agosto de 2019 y se convirtió en código abierto bajo la licencia MIT en noviembre de 2021. [ 1 ] Desde su lanzamiento como código abierto, Luau ha sido adoptado por varios desarrolladores de videojuegos fuera de Roblox, incluyendo Remedy Entertainment para Alan Wake 2 , [ 2 ] Digital Extremes para Warframe , [ 3 ] y Giants Software para Farming Simulator 2025. [ 4 ]

Historia

Roblox originalmente usaba una versión modificada de Lua 5.1 como lenguaje de scripting. A medida que la plataforma crecía, los desarrolladores comenzaron a crear proyectos más grandes y complejos. El equipo de ingeniería identificó dos problemas principales con Lua estándar a esta escala: la falta de un sistema de tipos dificultaba la detección de errores y el intérprete estándar de Lua tenía limitaciones de rendimiento. [ 5 ]

El equipo consideró adoptar LuaJIT , una implementación de compilador justo a tiempo de Lua conocida por su alto rendimiento. Sin embargo, LuaJIT tenía soporte limitado para ciertas plataformas, en particular consolas de videojuegos , y presentaba dificultades de mantenimiento. En su lugar, Roblox decidió crear su propio lenguaje basado en Lua 5.1. [ 6 ]

Luau se implementó en la plataforma Roblox el 27 de agosto de 2019. El lenguaje se llamaba inicialmente "Faster Lua VM" antes de recibir su nombre actual. [ 6 ] El 3 de noviembre de 2021, Roblox lanzó Luau como software de código abierto bajo la licencia MIT, poniendo a disposición del público el entorno de ejecución, el compilador , el verificador de tipos y el linter en GitHub . [ 1 ]

Características

Sistema de tipos

Luau implementa tipado gradual , lo que permite a los desarrolladores agregar anotaciones de tipo al código o dejarlo con tipado dinámico . El sistema de tipos incluye inferencia de tipos , que determina automáticamente los tipos de variables en función de su uso sin necesidad de anotaciones explícitas. [ 5 ]

-- Ejemplos de anotaciones de tipo comunes de Luau : number -- enteros y flotantes : string -- texto : boolean -- verdadero o falso : any -- la variable puede ser configurada a cualquier tipolocal baseNumber : number = 1 -- baseNumber es de tipo "number"local baseNumber = 1 :: number -- 1 se ha convertido al tipo "number", sobrescribiendo el tipo inferido.

El lenguaje admite dos modos de tipado. El modo estricto requiere anotaciones de tipo más precisas y busca detectar errores de tipo antes de la ejecución. El modo no estricto es más permisivo y está diseñado para minimizar los falsos positivos al agregar tipos gradualmente al código existente. Estos modos se pueden configurar por módulo mediante directivas . [ 7 ]

Luau utiliza tipado estructural en lugar de tipado nominal . El verificador de tipos comprueba que las tablas contengan los campos requeridos con los tipos correctos, en lugar de comprobar nombres de clases o relaciones de herencia. Luau fue el primer lenguaje en implementar subtipado semántico para una gran base de usuarios, utilizando la normalización de tipos para comprobar las relaciones de subtipos. [ 7 ]

Actuación

El entorno de ejecución de Luau se implementa en C++ como una nueva máquina virtual en lugar de una modificación de la máquina virtual estándar de Lua. [ 8 ] El compilador realiza varias optimizaciones antes de la ejecución del código, incluyendo la reducción de constantes , la eliminación de código muerto y la optimización de acceso a datos . El intérprete utiliza almacenamiento en caché en línea para mejorar el rendimiento del acceso a los campos de la tabla.

Las pruebas de rendimiento muestran que el intérprete de Luau se desempeña de manera comparable al modo intérprete de LuaJIT. Cuando LuaJIT utiliza la compilación justo a tiempo, mantiene una ventaja de rendimiento de aproximadamente 1,6x en algunas pruebas. [ 9 ]

En octubre de 2023, Luau incorporó la capacidad de generación de código nativo. [ 10 ] Esta función compila el código de bytes de Luau directamente a código máquina para arquitecturas x64 y ARM64 , incluyendo procesadores con soporte AVX1 y Apple Silicon . Las mejoras de rendimiento derivadas de la generación de código nativo suelen oscilar entre 1,5 y 2,5 veces para código computacionalmente intensivo. [ 10 ]

El compilador puede procesar aproximadamente 950.000 líneas de código por segundo en un procesador Ryzen 5900X con todas las optimizaciones habilitadas. [ 8 ]

Sintaxis

Luau mantiene la compatibilidad sintáctica con Lua 5.1 a la vez que añade características de otros lenguajes. El lenguaje admite operadores de asignación aumentados+= ( , -=, *=, etc.). [ 11 ] La interpolación de cadenas se añadió en febrero de 2023, lo que permite incrustar variables directamente en literales de cadena mediante la sintaxis de acento grave. [ 12 ] [ 13 ] Luau también incluye expresiones condicionales similares a los operadores ternarios de otros lenguajes. [ 14 ]

baseNumber local : número = 1-- Asignación aumentada baseNumber += 1-- Expresiones condicionales local isBaseNumberTwo : number = if baseNumber == 2 then true else false-- Interpolación de cadena print ( `El número base es { baseNumber } ` ) --> El número base es 2

Las características adicionales incluyen la continuepalabra clave para omitir el código restante en la iteración actual de un bucle y pasar a la siguiente [ 15 ] , y la constpalabra clave para enlaces de variables locales que no se pueden modificar una vez inicializados. [ 16 ]

const fruits : { string } = table.freeze ({ " Apple" , "Pear" , "Banana" }) const pearFruit : string = "Pear " local foundPearFruit : boolean = falsefor i : number , fruit : string in fruits do if pearFruit ~= fruit then continue end print ( "¡Se encontró una pera!" ) foundPearFruit = true break endperaFruit = "Manzana" -- fallar

Sandboxing

Luau incluye funciones de seguridad para ejecutar código no confiable. La biblioteca estándar no proporciona acceso al sistema de archivos ni al sistema operativo . El entorno de ejecución impone límites de recursos en el uso de memoria y puede interrumpir el código de larga duración para evitar que los bucles infinitos bloqueen la ejecución. [ 8 ]

Gestión de la memoria

El recolector de basura utiliza un diseño incremental con un controlador PID para el control de la memoria dinámica, basado en técnicas del recolector de basura de Go . [ 8 ] Esto reduce los tiempos de pausa en comparación con la recolección de memoria de parada completa. El sistema incluye optimizaciones para cierres , valores ascendentes y tablas débiles .

Adopción

Roblox

Luau es el lenguaje de scripting principal de la plataforma Roblox, que gestiona la lógica del juego, la física y los sistemas de interfaz de usuario en millones de experiencias creadas por los usuarios.

Remedy Entertainment

Remedy Entertainment reemplazó su lenguaje de scripting propietario con Luau en el motor Northlight para Alan Wake 2. La migración eliminó aproximadamente 80 000 líneas de código heredado. Remedy desarrolló una extensión de servidor de lenguaje para Visual Studio Code para la integración de Luau. [ 2 ]

Extremos digitales

Digital Extremes migró Warframe de su implementación existente en Lua a Luau. El cambio fue motivado por mejoras en la recolección de basura y la eficiencia de la memoria. [ 3 ]

Software gigante

Giants Software adoptó Luau para Farming Simulator 2025 , dejando atrás LuaJIT . La compañía proporciona herramientas de modificación a través de Giants Developer Network que admiten la programación en Luau. [ 4 ]

Laboratorio Linden

En diciembre de 2025, Linden Lab lanzó SLua, un sistema de scripting basado en Luau para Second Life . SLua sirve como alternativa al Linden Scripting Language . [ 17 ]

Detalles técnicos

Compilador

El compilador Luau opera en múltiples pasadas, primero analizando el código fuente en un árbol de sintaxis abstracta antes de generar el código de bytes. [ 18 ] El compilador ofrece tres niveles de optimización. El nivel 0 aplica optimizaciones mínimas. El nivel 1 (predeterminado) realiza plegado de constantes, optimización de valores ascendentes y optimización de peephole mientras conserva la información de depuración . El nivel 2 agrega inserción de funciones en línea y desenrollado de bucles .

El código de bytes utiliza una máquina virtual basada en registros con aproximadamente 200 registros disponibles. Las instrucciones tienen una longitud de 4 bytes, y las constantes se almacenan en un grupo de constantes separado. [ 18 ]

Investigación

El equipo de Luau ha publicado varios artículos académicos sobre el sistema de tipos. El artículo inicial, «Documento de posición: Objetivos del sistema de tipos Luau», se presentó en HATRA 2021. [ 5 ] Los artículos posteriores incluyen «Objetivos del sistema de tipos Luau, dos años después» (2023) y «Hacia un sistema de tipos imperfecto pero completo» (2024). [ 19 ]

Véase también

Referencias

  1. 1 2 "Luau se vuelve de código abierto" . Luau-lang.org . 3 de noviembre de 2021. Archivado del original el 3 de agosto de 2024. Recuperado el 24 de diciembre de 2024 .
  2. 1 2 Gajda, Szymon (26 de octubre de 2023). "Cómo Northlight hace brillar a Alan Wake 2" . Remedy Entertainment . Recuperado el 24 de diciembre de 2024 .
  3. 1 2 Kapoulkine, Arseny (28 de noviembre de 2023). "Es hora" . zeux.io. Consultado el 24 de diciembre de 2024 .
  4. 1 2 "Herramientas de modificación para Farming Simulator 25" . Giants Software Developer Network . Consultado el 24 de diciembre de 2024 .
  5. 1 2 3 Brown, Lily; Friesen, Andy; Jeffrey, Alan (2021). Documento de posición: Objetivos del sistema de tipos Luau (PDF) . HATRA '21: Aspectos humanos de los tipos y asistentes de razonamiento . Recuperado el 24 de diciembre de 2024 .
  6. 1 2 "Luau Progress 2022" . Luau-lang.org . 23 de junio de 2022. Consultado el 24 de diciembre de 2024 .
  7. ^ " Resumen de Luau: diciembre de 2021" . Luau-lang.org . 24 de enero de 2022 . Consultado el 24 de diciembre de 2024 .
  8. 1 2 3 4 "Actuación" . Luau.org . Consultado el 24 de diciembre de 2024 .
  9. "Luau se vuelve de código abierto" . Hacker News . 3 de noviembre de 2021. Consultado el 24 de diciembre de 2024 .
  10. 1 2 "Resumen del Luau: octubre de 2023" . Luau-lang.org . 3 de noviembre de 2023. Consultado el 24 de diciembre de 2024 .
  11. "Asignación compuesta usando la sintaxis op=" . RFCs de Luau . Consultado el 17 de mayo de 2026 .
  12. "Resumen del Luau: febrero de 2023" . Luau-lang.org . 3 de marzo de 2023. Consultado el 24 de diciembre de 2024 .
  13. "Interpolación de cadenas" . RFC de Luau . Consultado el 17 de mayo de 2026 .
  14. "expresión if-then-else" . RFC de Luau . Consultado el 17 de mayo de 2026 .
  15. "continuar instrucción" . RFC de Luau . Recuperado el 17 de mayo de 2026 .
  16. "Const Keyword" . RFCs de Luau . Consultado el 17 de mayo de 2026 .
  17. "Preguntas frecuentes sobre la beta abierta de SLua" . Linden Lab. 2 de diciembre de 2025. Consultado el 24 de diciembre de 2025 .
  18. 1 2 "Compilador" . Luau.org . Consultado el 24 de diciembre de 2024 .
  19. "Investigación" . Luau-lang.org . Consultado el 24 de diciembre de 2024 .
  • Sitio web oficial
  • Luau en GitHub
  • Artículos de investigación sobre el luau