Uma nova versão da linguagem de programação Nim foi lançada, e em setembro fez um ano desde sua primeira versão estável. primeira versão estável. Em termos de sintaxe, a linguagem é semelhante ao Python, mas em desempenho é quase como C++. De acordo com FAQ a linguagem se inspira em grande parte de (na ordem de contribuição): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Funciona em qualquer lugar devido à capacidade de compilação em C/C++/Objective-C/JS. Ela suporta macros, OOP, genéricos, exceções, substituição de código em quente e muito mais. Licença — MIT.
As mudanças mais significativas:
-
Foi adicionado um novo coletor de lixo ORC, que utiliza um algoritmo do ARC, mas processa links cíclicos de maneira especial. Pode ser habilitado com a opção —gc:orc. Sobre as diferenças entre ARC/ORC, há um ótimo artigo.
Adicionado modo de definições estritas de funções, onde uma verificação adicional sobre a mutabilidade dos objetos é ativada. Pode ser acionado através da pragmática {.experimental: "strictFuncs".} ou pela chave —experimental:strictFuncs.
A palavra-chave from agora pode ser usada como um operador.
Adicionada a pragmática .noalias. Ela se relaciona com a palavra-chave C restrict, para aumentar a eficiência que essa palavra pode proporcionar.
Advertências específicas agora podem ser transformadas em erros através de —warningAsError[X]:on|off.
Novo comando: nim r main.nim [args…], que compila e executa main.nim, incluindo —usenimcache, assim o resultado é salvo em $nimcache/main$exeExt, utilizando a mesma lógica do nim c -r para evitar recompilações quando os arquivos-fonte não foram alterados. 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á de onde o compilador gerou mensagens de erro/advertência. Isso ajuda quando não está claro de onde veio a mensagem.
Adicionado a flag —backend:js|c|cpp|objc (ou -b:js e assim por diante) para mudar o backend.
Adicionado a flag —usenimcache para saída de binários em nimcache.
Removidas as chaves: —oldNewlines, —laxStrings, —oldast, —oldgensym
A utilidade nimsuggest agora mostra não apenas a declaração prévia, mas também a localização da implementação a pedido de def.
Além disso, foram adicionadas várias mudanças à biblioteca padrão e diversas correções de bugs.
Fonte: linux.org.ru
