Lua 5.4

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

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster