Código aberto para Luau, unha variante de verificación de tipo da linguaxe Lua

Anunciouse o código aberto e a publicación da primeira versión independente da linguaxe de programación Luau, que continúa co desenvolvemento da linguaxe Lua e é compatible con Lua 5.1. Luau está deseñado principalmente para incorporar motores de script nas aplicacións e ten como obxectivo acadar un alto rendemento e un baixo consumo de recursos. O código do proxecto está escrito en C++ e está aberto baixo a licenza MIT.

Luau estende Lua con capacidades de verificación de tipos e algunhas construcións sintácticas novas, como literais de cadea. O idioma é compatible con Lua 5.1 e parcialmente con versións máis recentes. Admítese a API de execución de Lua, o que lle permite usar Luau co código e enlaces existentes. O tempo de execución da linguaxe baséase nun código de execución Lua 5.1 moi reelaborado, pero o intérprete está completamente reescrito. Durante o desenvolvemento, utilizáronse algunhas novas técnicas de optimización para conseguir un maior rendemento en comparación con Lua.

O proxecto foi desenvolvido por Roblox e úsase no código da plataforma de xogos, xogos e aplicacións de usuario desta empresa, incluído o editor de Roblox Studio. Inicialmente, Luau desenvolveuse a porta pechada, pero ao final decidiuse trasladalo á categoría de proxectos abertos para un posterior desenvolvemento conxunto coa participación da comunidade.

Características clave:

  • Mecanografía gradual, ocupando unha posición intermedia entre a dixitación dinámica e estática. Luau permítelle usar a escritura estática segundo sexa necesario especificando a información do tipo mediante anotacións especiais. Ofrécense os tipos integrados "calquera", "nil", "booleano", "número", "cadea" e "fío". Ao mesmo tempo, consérvase a posibilidade de utilizar a tipificación dinámica sen definir de forma explícita o tipo de variables e funcións. función foo(x: número, y: cadea): booleano local k: cadea = y:rep(x) return k == "a" final
  • Soporte para literais de cadea (como en Lua 5.3) como "\0x**" (número hexadecimal), "\u{**}" (carácter Unicode) e "\z" (fin de liña), así como o capacidade de visualizar o formato de números (podes escribir 1_000_000 en lugar de 1000000), literais para números hexadecimais (0x...) e binarios (0b......).
  • Soporte para a expresión "continuar", complementando a palabra clave "break" existente, para ir a unha nova iteración do bucle.
  • Soporte para operadores de asignación compostos (+=, -=, *=, /=, %=, ^=, ..=).
  • Soporte para o uso de bloques condicionais "if-then-else" en forma de expresións que devolven o valor calculado durante a execución do bloque. Pode especificar un número arbitrario de expresións elseif nun bloque. local maxValue = se a > b entón a else b signo local = se x < 0 entón -1 elseif x > 0 entón 1 else 0
  • A presenza dun modo de illamento (sandbox), que permite executar código pouco fiable. Esta función pódese usar para organizar o lanzamento en paralelo do teu propio código e código escrito por outro programador, por exemplo, bibliotecas de terceiros cuxa seguridade non se pode garantir.
  • Unha limitación da biblioteca estándar da que se eliminaron funcións que poderían xerar problemas de seguridade. Por exemplo, as bibliotecas "io" (acceder a ficheiros e iniciar procesos), "package" (acceder a ficheiros e cargar módulos), "os" (funcións para acceder a ficheiros e cambiar as variables de ambiente), "debug" (operación non segura coa memoria) , "dofile" e "loadfile" (acceso FS).
  • Proporcionar ferramentas para a análise de código estático, a identificación de erros (linter) e a comprobación do correcto uso dos tipos.
  • Analizador propio de alto rendemento, intérprete de bytecode e compilador. Luau aínda non admite a compilación JIT, pero dise que o intérprete Luau é bastante comparable no seu rendemento a LuaJIT nalgunhas situacións.

Fonte: opennet.ru

Engadir un comentario