Após cinco anos de desenvolvimento está disponível liberar Lua 5.4, uma linguagem de programação de script rápida e compacta que é amplamente usada como linguagem incorporada (por exemplo, para definir configuração ou escrever extensões). O código interpretador Lua é escrito em C e distribuído por sob a licença do MIT.
Lua combina uma sintaxe processual simples com poderosas capacidades de descrição de dados através do uso de matrizes associativas e semântica extensível da linguagem. Lua usa digitação dinâmica, convertendo construções de linguagem em bytecode que roda em cima de uma máquina virtual baseada em registro com coleta automática de lixo. O próprio interpretador foi projetado como uma biblioteca que pode ser facilmente integrada a projetos nas linguagens C e C++.
Um novo modo de operação do coletor de lixo foi implementado - “geracional“, que complementou o modo de coleta de lixo incremental disponível anteriormente. O novo modo envolve a execução de um rastreamento reduzido com mais frequência, cobrindo apenas objetos criados recentemente. Um percurso completo de todos os objetos é realizado somente se, após um curto percurso, não for possível atingir o consumo de memória desejado. Essa abordagem permite obter maior desempenho e reduzir o consumo de memória ao armazenar um grande número de objetos que permanecem por um curto período de tempo.
Adicionada a capacidade de definir variáveis constantes definidas com o atributo “const”. Tais variáveis só podem ser atribuídas uma vez e, uma vez inicializadas, não podem ser alteradas.
Adicionado suporte para variáveis "para ser fechada", que são atribuídos através do atributo "close" e se assemelham a variáveis locais constantes (com o atributo const), diferenciando-se delas pelo valor ser fechado (o método "__close" é chamado) sempre que sai do escopo, por exemplo, após a conclusão normal do bloco, faça a transição usando break/goto/return ou saia quando ocorrer um erro.
Tipo "dados do usuário“, que fornece a capacidade de armazenar quaisquer dados C em variáveis Lua (representa um bloco de dados na memória ou contém um ponteiro C), agora pode conter vários valores (ter várias metatabelas).
É apresentada uma nova implementação da função de geração de números pseudoaleatórios - math.random.
Adicionado um sistema de avisos que são determinados usando a expressão avisar e, diferentemente dos erros, não afetam a execução posterior do programa.
Adicionadas informações de depuração sobre argumentos de função e valores de retorno.
Uma nova semântica foi proposta para enumerar inteiros em loops”para". O número de iterações é calculado antes do início do loop, o que evita overflow e loop de variáveis. Se o valor inicial for maior que o valor limite, será exibido um erro.
Em função 'string.gmatch‘adicionou um novo argumento opcional ‘init’, que determina em que posição iniciar a pesquisa (por padrão, a partir de 1 caractere).
Novos recursos adicionados ‘lua_resetthread‘(redefine o thread, limpa toda a pilha de chamadas e fecha todas as variáveis “a serem fechadas”) e ‘corrotina.fechar‘(fecha a corrotina e todas as variáveis “a serem fechadas” associadas).
As funções para converter strings em números foram movidas para a biblioteca "string".
As chamadas para a função de alocação de memória agora poderão falhar se o tamanho do bloco de memória for reduzido.
Em função 'string.formato‘ adicionado suporte para o novo especificador de formato ‘%p’ (ponteiro retornado por lua_topointer).