Após dois anos de desenvolvimento, em 29 de junho foi lançada discretamente uma nova versão da linguagem de programação Lua – 5.4.
Lua é uma linguagem de programação interpretada e simples, que é facilmente incorporada em aplicações. Devido a essas características, Lua é amplamente utilizada como uma linguagem de extensão ou descrição de configuração de programas (em particular, jogos de computador). A sua distribuição é feita sob a licença MIT.
A versão anterior (5.3.5) foi lançada em 10 de julho de 2018.
Principais mudanças na nova versão
novo coletor de lixo baseado em gerações (generational). Nos parâmetros setpause e setstepmul da função collectgarbage, ambos estão obsoletos, recomenda-se usar o parâmetro incremental;
nova função para emissão de avisos warn com possibilidade de desativar a exibição deles;
nova implementação de math.random que utiliza o algoritmo xoshiro256** em vez do fornecido pelo libc e inicializa o gerador com um número aleatório;
constantes (constant variables);
variáveis "fecháveis" (to-be-closed) — constantes locais que têm o método __close executado ao sair do escopo;
nova função lua_resetthread — limpa a pilha e executa o fechamento de todas as variáveis "fecháveis";
nova função coroutine.close — fecha a corrotina especificada e todas suas variáveis "fecháveis";
dados do usuário (userdata) agora podem conter um conjunto de valores acessíveis por índice. Novas funções foram introduzidas para trabalhar com eles: lua_newuserdatauv, lua_setiuservalue e lua_getiuservalue;
informações de depuração sobre parâmetros e valores de retorno de funções estão disponíveis;
se um índice inteiro é usado em um loop for e ocorre um estouro — o loop é encerrado;
um argumento opcional foi adicionado à função string.gmatch, que especifica um deslocamento a partir do início da string para a busca de correspondências;
as funções de conversão implícita de strings para números foram movidas para a biblioteca de strings, e o seu comportamento mudou. Por exemplo, o resultado da operação "1" + "2" agora é um número inteiro, não um número de ponto flutuante;
na função de alocação de memória, agora é permitido ocorrer um erro ao reduzir um bloco de memória;
novo caractere de formatação na função string.format — %p (para ponteiros);
a biblioteca utf8 aceita códigos de caracteres até 2³¹ (ao especificar uma flag especial, sem isso aceita-se apenas códigos até 0x10FFFF e não são permitidos os códigos de substituição);
Constantes inteiras que excedem o intervalo de valores são convertidas em números de ponto flutuante (antes ocorriam cortes de bits);
O metamétodo __lt não é mais usado para emular o metamétodo __le; se necessário, o metamétodo __le deve ser definido explicitamente;
Uma etiqueta para o operador goto não pode ser criada se já existir uma etiqueta com o mesmo nome no escopo atual (mesmo que tenha sido definida em um escopo externo);
O metamétodo __gc pode não ser apenas uma função. Se a tentativa de chamar o método falhar, um aviso será emitido;
A função print não chama tostring para cada argumento, mas utiliza suas conversões internas;
A função io.lines retorna um conjunto de quatro valores em vez de um, para emular o comportamento antigo, coloque a chamada entre parênteses se você a passar como parâmetro ao chamar outra função.
Fonte: linux.org.ru
