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