Luau, una variante con verificación de tipo del lenguaje Lua, es de código abierto

Anunció el código abierto y la publicación de la primera versión independiente del lenguaje de programación Luau, continuando el desarrollo del lenguaje Lua y compatible con versiones anteriores de Lua 5.1. Luau está diseñado principalmente para incorporar motores de secuencias de comandos en aplicaciones y tiene como objetivo lograr un alto rendimiento y un bajo consumo de recursos. El código del proyecto está escrito en C++ y está abierto bajo la licencia MIT.

Luau amplía Lua con capacidades de verificación de tipos y algunas construcciones sintácticas nuevas, como cadenas literales. El lenguaje es compatible con Lua 5.1 y parcialmente con versiones más recientes. Se admite la API Lua Runtime, lo que le permite utilizar Luau con código y enlaces existentes. El tiempo de ejecución del lenguaje se basa en un código Lua runtime 5.1 muy reelaborado, pero el intérprete está completamente reescrito. Durante el desarrollo, se utilizaron algunas técnicas de optimización nuevas para lograr un mayor rendimiento en comparación con Lua.

El proyecto fue desarrollado por Roblox y se utiliza en el código de la plataforma de juegos, juegos y aplicaciones de usuario de esta empresa, incluido el editor Roblox Studio. Inicialmente, Luau se desarrolló a puerta cerrada, pero al final se decidió transferirlo a la categoría de proyectos abiertos para un mayor desarrollo conjunto con la participación de la comunidad.

Características principales:

  • Escritura gradual, ocupando una posición intermedia entre la escritura dinámica y estática. Luau le permite utilizar escritura estática según sea necesario especificando información de tipo a través de anotaciones especiales. Se proporcionan los tipos integrados "cualquiera", "nulo", "booleano", "número", "cadena" y "hilo". Al mismo tiempo, se conserva la posibilidad de utilizar tipificación dinámica sin definir explícitamente el tipo de variables y funciones. función foo(x: número, y: cadena): booleano local k: cadena = y:rep(x) return k == “a” fin
  • Soporte para cadenas literales (como en Lua 5.3) como "\0x**" (número hexadecimal), "\u{**}" (carácter Unicode) y "\z" (fin de línea), así como el capacidad de visualizar el formato de números (puede escribir 1_000_000 en lugar de 1000000), literales para números hexadecimales (0x...) y binarios (0b......).
  • Soporte para la expresión "continuar", que complementa la palabra clave "romper" existente, para saltar a una nueva iteración del bucle.
  • Soporte para operadores de asignación compuesta (+=, -=, *=, /=, %=, ^=, ..=).
  • Soporte para el uso de bloques condicionales "if-then-else" en forma de expresiones que devuelven el valor calculado durante la ejecución del bloque. Puede especificar un número arbitrario de expresiones elseif en un bloque. maxValue local = si a > b entonces a else b signo local = si x < 0 entonces -1 elseif x > 0 entonces 1 else 0
  • La presencia de un modo de aislamiento (sandbox), que le permite ejecutar código no confiable. Esta función se puede utilizar para organizar el lanzamiento en paralelo de su propio código y del código escrito por otro desarrollador, por ejemplo, bibliotecas de terceros cuya seguridad no se puede garantizar.
  • Se ha eliminado una limitación de la biblioteca estándar de la que se eliminan funciones que potencialmente podrían crear problemas de seguridad. Por ejemplo, las bibliotecas "io" (acceder a archivos y ejecutar procesos), "paquete" (acceder a archivos y cargar módulos), "os" (funciones para acceder a archivos y cambiar variables de entorno), "debug" (operación insegura con memoria) , “dofile” y “loadfile” (acceso FS).
  • Proporcionar herramientas para el análisis de código estático, identificar errores (linter) y comprobar el uso correcto de tipos.
  • Propio analizador, intérprete de código de bytes y compilador de alto rendimiento. Luau aún no admite la compilación JIT, pero se afirma que el rendimiento del intérprete de Luau es bastante comparable al de LuaJIT en algunas situaciones.

Fuente: opennet.ru

Añadir un comentario