Lançamento da linguagem de programação Lua 5.4

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++.

O principal inovações:

  • 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).
  • A biblioteca utf8 fornece suporte códigos de caracteres com números até 2 ^ 31.

Fonte: opennet.ru

Adicionar um comentário