Após dois anos de desenvolvimento, no dia 29 de junho, uma nova versão da linguagem de programação Lua, 5.4, foi lançada silenciosamente e silenciosamente.
Lua é uma linguagem de programação simples e interpretada que pode ser facilmente integrada em aplicações. Devido a essas qualidades, Lua é amplamente utilizada como linguagem para estender ou descrever a configuração de programas (em particular, jogos de computador). Lua é distribuída sob a licença do MIT.
A versão anterior (5.3.5) foi lançada em 10 de julho de 2018.
Principais mudanças na nova versão
-
coletor de lixo de nova geração. Na função collectgarbage, os parâmetros setpause e setstepmul foram descontinuados e o parâmetro incremental é recomendado em seu lugar;
-
uma nova função para emissão de avisos de alerta com possibilidade de desabilitar sua exibição;
-
a nova implementação de math.random usa o algoritmo xoshiro256** em vez da libc fornecida e inicializa o gerador com um número aleatório;
-
variáveis constantes;
-
Variáveis “to-be-closed” são constantes locais para as quais o método __close é executado ao sair do escopo;
-
nova função lua_resetthread - limpa a pilha e fecha todas as variáveis “fechadas”;
-
nova função coroutine.close - fecha a corrotina especificada e todas as suas variáveis “fechadas”;
-
os dados do usuário podem conter um conjunto de valores acessados por índice. Novas funções foram introduzidas para trabalhar com eles: lua_newuserdatauv, lua_setiuservalue e lua_getiuservalue;
-
Estão disponíveis informações de depuração sobre parâmetros e valores de retorno de funções;
-
se um índice inteiro for usado em um loop for e ocorrer um overflow, o loop termina;
-
um argumento opcional foi adicionado à função string.gmatch, especificando o deslocamento do início da string para procurar correspondências;
-
funções para converter implicitamente strings em números foram movidas para a biblioteca de strings e seu comportamento foi alterado. Por exemplo, o resultado da operação "1" + "2" agora é um número inteiro em vez de um número de ponto flutuante;
-
na função de alocação de memória, pode ocorrer um erro ao reduzir um bloco de memória;
-
novo símbolo de formatação na função string.format - %p (para ponteiros);
-
a biblioteca utf8 aceita códigos de caracteres de até 2³¹ (se um sinalizador especial for especificado, sem ele apenas códigos de até 0x10FFFF serão permitidos e substitutos não serão permitidos);
-
constantes inteiras fora do intervalo de valores são convertidas em números flutuantes (anteriormente ocorria corte 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 especificado explicitamente;
-
um rótulo para uma instrução goto não pode ser criado se um rótulo com o mesmo nome já existir no escopo atual (mesmo que tenha sido definido no escopo externo);
-
O metamétodo __gc pode ser mais do que apenas uma função. Se uma tentativa de chamar um método falhar, um aviso será impresso;
-
a função print não chama tostring para cada argumento, mas usa suas próprias 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 estiver passando-a como parâmetro para outra chamada de função.
Fonte: linux.org.ru