Linguagem de programação Nim versão 1.4.0

Foi lançada uma nova versão da linguagem de programação do sistema Nim, que em setembro marca um ano desde seu lançamento. primeira versão estável. A sintaxe é semelhante à do Python e o desempenho é quase como o do C++. De acordo com Perguntas frequentes a linguagem empresta muito de (em ordem de peso de contribuição): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.


Funciona em qualquer lugar graças à capacidade de compilar para C/C++/Objective-C/JS. Ele suporta macros, OOP, genéricos, exceções, substituição de código quente e muito mais. Licença - MIT.

As mudanças mais significativas:

  • Há um novo coletor de lixo ORC que usa o algoritmo ARC, mas lida com referências circulares de uma maneira especial. Ativado com a opção --gc:orc. Sobre as diferenças ARC/ORC há um ótimo artigo.

  • Um modo de definições de funções estritas foi adicionado, o que inclui uma verificação adicional para a mutabilidade do objeto. Ativado por meio do pragma {.experimental: "strictFuncs".} ou por meio da opção --experimental:strictFuncs.

  • A palavra-chave from agora pode ser usada como um operador.

  • Adicionado .noalias pragma. Ele mapeia para a palavra-chave restrita C para aumentar a eficiência que essa palavra-chave pode fornecer.

  • Avisos específicos agora podem ser transformados em erros via --warningAsError[X]:on|off.

  • Novo comando: nim r main.nim [args...], que compila e executa main.nim, e inclui --usenimcache para que o resultado seja armazenado em $nimcache/main$exeExt, usando a mesma lógica de nim c - r para se livrar da recompilação, quando o código-fonte não foi alterado. Exemplo:

nim r compiler/nim.nim --help # compilado pela primeira vez
echo 'import os; echo getCurrentCompilerExe()' | nim r - # isso também funciona
nim r compiler/nim.nim --fullhelp # sem recompilação
nim r --nimcache:/tmp main # binário salvo em /tmp/main

  • Adicionada uma nova dica --hint:msgOrigin que mostrará onde o compilador gerou mensagens de erro/aviso. Isso ajuda quando não é óbvio de onde veio a mensagem.

  • Adicionado sinalizador --backend:js|c|cpp|objc (ou -b:js, etc.) para alterar o back-end.

  • Adicionado sinalizador --usenimcache para binários de saída para nimcache.

  • Chaves removidas: --oldNewlines, --laxStrings, --oldast, --oldgensym

  • O utilitário nimsuggest agora mostra não apenas a declaração de encaminhamento, mas também o local da implementação quando solicitado def.

Além disso, muitas alterações foram adicionadas à biblioteca padrão e muitas correções de bugs.

Fonte: linux.org.ru