Luau – linguagem de script baseada em Lua que é rápida, pequena, segura e com tipagem gradual
(luau.org)- Luau é uma linguagem de script embutida rápida, segura e com suporte a tipagem gradual, derivada de Lua 5.1
- Ela evoluiu com melhorias em desempenho, ferramentas de linguagem e sistema de tipos para dar suporte a jogos complexos e grandes bases de código na plataforma Roblox
- Diferentemente do Lua padrão, foi projetada com recursos de sandboxing para permitir que códigos com diferentes níveis de privilégio sejam executados lado a lado
- A sintaxe é compatível com Lua 5.1, mas oferece extensões adicionais de sintaxe e ferramentas de análise (
linter, verificador de tipos) para elevar a qualidade do código - Com otimizações de desempenho, bytecode personalizado e suporte a JIT, busca velocidade de execução no nível do LuaJIT, com grande potencial de uso além do Roblox em diversos ambientes embarcados
Motivation (motivação)
- Por volta de 2006, a Roblox adotou Lua 5.1 como linguagem de script para jogos
- Com o passar do tempo, à medida que o nível dos jogos da plataforma Roblox aumentou e o tamanho das equipes cresceu, a linguagem e sua implementação foram amplamente aprimoradas para superar as limitações do Lua original
- Com o crescimento da plataforma, houve grande investimento em otimização de desempenho, facilidade de uso e desenvolvimento de ferramentas relacionadas à linguagem
- Em especial, ao gerenciar em 2020 uma grande base de código com mais de 1 milhão de linhas, tornou-se claro que a adoção de um sistema de tipos gradual era essencial
- Com base nessas necessidades, a Roblox desenvolveu o Luau, uma linguagem derivada de Lua que oferece recursos para aplicar tipos gradualmente, além de ser rápida, pequena e segura
- Mais detalhes estão disponíveis no documento Why Luau
Visão geral do Luau
- Luau é uma linguagem de script embutida baseada em Lua 5.1
- Oferece um runtime rápido e leve
- Dá suporte a um sistema de tipos gradual, permitindo análise dinâmica e estática em conjunto
- Está integrado ao Roblox Studio, e o modo estrito pode ser ativado com a flag
--!strict - Os desenvolvedores podem consultar a documentação integrada ao Roblox em Luau Creator Docs
Sandboxing (sandbox)
- O Luau restringe a biblioteca padrão exposta e fornece recursos adicionais de sandboxing
- Isso permite a execução paralela e segura de código sem privilégios escrito por desenvolvedores comuns e código privilegiado interno da plataforma
- Por isso, ele tem um ambiente de execução diferente do Lua padrão
- Mais detalhes podem ser vistos na explicação sobre Sandbox
Compatibility (compatibilidade)
- Mantém, tanto quanto possível, a compatibilidade retroativa com Lua 5.1, incorporando também alguns recursos de versões posteriores
- No entanto, o Luau não adota todas as decisões de design do Lua, refletindo casos de uso e restrições específicos do Roblox
- O status de suporte aos recursos das versões posteriores ao Lua 5.1 está disponível na documentação de Compatibility
Syntax (sintaxe)
- É totalmente compatível com a sintaxe do Lua 5.1
- Além disso, oferece extensões de sintaxe modernas e familiares para melhorar a experiência de desenvolvimento
- A sintaxe completa pode ser consultada na documentação de Syntax
Analysis (ferramentas de análise)
-
Fornece ferramentas de análise de scripts para ajudar na escrita de código correto
-
Componentes:
- Linter: detecta erros comuns
- Type Checker: valida tipos
-
Pode ser executado com a ferramenta de CLI
luau-analyze -
As regras de lint estão na documentação de Lint, e o guia de verificação de tipos na documentação de Typecheck
Performance (desempenho)
- Oferece um frontend personalizado com parser, linter e verificador de tipos, além de bytecode otimizado, interpretador e compilador
- Em alguns casos, entrega desempenho capaz de competir com o interpretador LuaJIT
- Dá suporte a compilador JIT manual em plataformas x64 e ARM64, podendo melhorar significativamente o desempenho de programas específicos
- O runtime continua sendo otimizado e parcialmente reescrito para melhorar a eficiência
- Os detalhes de desempenho estão disponíveis na documentação de Performance
Libraries (bibliotecas)
- A linguagem em si é um superconjunto completo do Lua 5.1
- Na biblioteca padrão, algumas funções foram removidas e algumas novas foram adicionadas
- Quando incorporada a uma aplicação, também é possível acessar bibliotecas de extensão específicas do app
- A documentação completa das bibliotecas pode ser consultada na documentação de Library
1 comentários
Comentários do Hacker News
CreateThread(fn),Wait(ms)e suporte a Await/Promises, como no FiveM, para lidar com corrotinas de forma mais simples (implementação de Promise para Luau); no FiveM, esses wrappers facilitam a otimização dos scripts e o gerenciamento de corrotinas; exemplo do scheduler Lua do FiveM--!strict, o código roda sem nenhum erro ou aviso até em casos óbvios de violação de tipo; não era o comportamento que eu esperavaluau, a checagem não é aplicada; se em um ambiente embarcado todo o código fosse forçado a passar por type checking antes da compilação, você teria a experiência esperada de capturar erros de tipo; isso é uma consequência inevitável do fato de terem migrado de uma vez milhões de linhas de código Lua 5.1 para Luautsce depois mapear os erros/resultados de volta para Luau, o que talvez permitisse criar type checkers rápidos para várias linguagens dinâmicas