Se ha anunciado la apertura del código fuente y la publicación del primer lanzamiento independiente del lenguaje de programación Luau, que continúa el desarrollo del lenguaje Lua y es compatible con Lua 5.1. El lenguaje Luau está diseñado principalmente para integrar scripts en aplicaciones y se centra en lograr un alto rendimiento con un bajo consumo de recursos. El código del proyecto está escrito en C++ y se libera bajo la licencia MIT.
Luau amplía Lua con capacidades de verificación de tipos y algunas nuevas construcciones sintácticas, como literales de cadena. El lenguaje es compatible con Lua 5.1 y parcialmente con versiones más recientes. Soporta la API de Lua Runtime, lo que permite usar Luau con código y vinculaciones (binding) ya existentes. El runtime del lenguaje se basa en un código de Lua runtime 5.1 altamente modificado, pero el intérprete está completamente reescrito. En el desarrollo se han utilizado nuevas técnicas de optimización que han permitido alcanzar un mejor rendimiento en comparación con Lua.
El proyecto fue desarrollado por Roblox y se utiliza en el código de su plataforma de juegos, juegos y aplicaciones de usuario, incluido el editor Roblox Studio. Inicialmente, Luau se desarrolló a puerta cerrada, pero finalmente se decidió convertirlo en un proyecto abierto para continuar su desarrollo colaborativo con la participación de la comunidad.
Características principales:
- Sistema de tipos gradual (Gradual typing), que ocupa una posición intermedia entre la tipificación dinámica y la estática. Luau permite utilizar tipificación estática según sea necesario, especificando información de tipos a través de anotaciones especiales. Se proporcionan tipos integrados como «any», «nil», «boolean», «number», «string» y «thread». Al mismo tiempo, se mantiene la posibilidad de usar tipificación dinámica sin definir explícitamente el tipo de variables y funciones. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == «a» end
- Soporte para literales de cadena (como en Lua 5.3), tales como «\0x**» (número hexadecimal), «\u{**}» (símbolo Unicode) y «\z» (fin de línea), así como la posibilidad de formatear números de forma visual (se puede escribir 1_000_000 en lugar de 1000000), literales para números hexadecimales (0x…) y binarios (0b…….).
- Soporte para la expresión «continue», que complementa la palabra clave existente «break», para pasar a una nueva iteración del ciclo.
- Soporte para operadores de asignación compuestos (+=, -=, *=, /=, %=, ^=, ..=).
- Soporte para el uso de bloques condicionales 'if-then-else' en forma de expresiones que devuelven un valor calculado en tiempo de ejecución del bloque. Se permite especificar un número arbitrario de expresiones elseif en el bloque. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Disponibilidad de un modo de aislamiento (sandbox) que permite ejecutar código no confiable. Esta capacidad se puede utilizar para organizar la ejecución paralela de su propio código y el código escrito por otros desarrolladores, por ejemplo, bibliotecas de terceros cuya seguridad no se puede garantizar.
- Restricción de la biblioteca estándar de la cual se han eliminado funciones que potencialmente pueden presentar problemas de seguridad. Por ejemplo, se excluyen de la biblioteca estándar las bibliotecas 'io' (acceso a archivos y ejecución de procesos), 'package' (acceso a archivos y carga de módulos), 'os' (se eliminan funciones para acceder a archivos y modificar variables de entorno), 'debug' (trabajo inseguro con la memoria), 'dofile' y 'loadfile' (acceso al sistema de archivos).
- Provisión de herramientas para análisis estático de código, detección de errores (linter) y verificación de la correcta utilización de tipos.
- Propios analizadores de alto rendimiento, intérprete de bytecode y compilador. Luau aún no admite compilación JIT, pero se afirma que el intérprete de Luau en algunas situaciones es comparable en rendimiento a LuaJIT.
Fuente: opennet.ru
