Nova versão da linguagem de programação Nim 0.20

aconteceu liberação da linguagem de programação do sistema Nim 0.20.0. A linguagem usa digitação estática e foi criada pensando em Pascal, C++, Python e Lisp. O código-fonte do Nim é compilado em uma representação C, C++ ou JavaScript. Posteriormente, o código C/C++ resultante é compilado em um arquivo executável usando qualquer compilador disponível (clang, gcc, icc, Visual C++), o que permite obter desempenho próximo ao C, se você não levar em consideração os custos de execução. o coletor de lixo. Semelhante ao Python, o Nim usa recuo como delimitadores de bloco. São suportadas ferramentas e recursos de metaprogramação para a criação de linguagens específicas de domínio (DSLs). Código do projeto fornecido sob a licença do MIT.

A versão Nim 0.20 pode ser considerada uma candidata à primeira versão estável 1.0, incorporando diversas mudanças que quebram a interoperabilidade necessárias para formar a primeira ramificação estável que confirmará o estado da linguagem. A versão 1.0 é apresentada como uma versão de suporte estável e de longo prazo que garantirá a manutenção da compatibilidade com versões anteriores na parte estabilizada da linguagem. Separadamente, o compilador também terá um modo experimental disponível no qual serão desenvolvidos novos recursos que podem quebrar a compatibilidade com versões anteriores.

Entre as mudanças propostas no Nim 0.20 estão:

  • "Not" agora é sempre um operador unário, ou seja, expressões como “assert(not a)” agora não são permitidas e apenas “assert not a” é permitido;
  • Habilitadas verificações rigorosas para conversão de números inteiros e reais na fase de compilação, ou seja, a expressão "const b = uint16(-1)" agora resultará em erro, pois -1 não pode ser convertido em um tipo inteiro sem sinal;
  • É fornecida a descompactação de tuplas para constantes e variáveis ​​de loop.
    Por exemplo, agora você pode usar atribuições como 'const (d, e) = (7, "eight")" e "for (x, y) in f";

  • Fornecida inicialização padrão de hashes e tabelas. Por exemplo, após declarar “var s: HashSet[int]” você pode executar imediatamente “s.incl(5)”, o que anteriormente levava a um erro;
  • Informações de erro aprimoradas para problemas relacionados ao operador “case” e índice de array fora dos limites;
  • É proibido alterar o comprimento da tabela durante a iteração.

Fonte: opennet.ru

Adicionar um comentário