The zen of Nim
24 janeiro 2018 / nim-programmin
Pois é, hoje decidi começar a escrever também sobre minha linguagem de programação segundaria, que aos poucos vem se tornando muito útil para meu estilo de programação com I/O de forma paralela ou concorrente, isso torna a linguagem extremamente poderosa para intensas operações desses tipo, e além do mais, fornece uma interoperabilidade com C/C++, deixando-a mais poderosa ainda!
Bom, aqui nessa pequena série sobre a linguagem de programação, vamos abordar em primeiro momento estudo da linguagem de programação em sua sintaxe pura, desde suas características até suas limitações, conforme vamos avançando, vamos ver o que torna ela tão diferente de outras linguagens, em especial algumas comparações com Go ou Python.
Por fim, espero que no final disso tudo, você terá plena capacidade de escrever alguns programas básicos nesse idioma pouco conhecido aqui em terras tupiniquins.
Existem milhares de linguagens, por que devo utilizar Nim?
O idioma em si é extremamente novo, e não está com boa aceitação por novos desenvolvedores, e até mesmo por pesquisadores ou outros profissionais da área, de fato é uma linguagem com certas peculiaridades que a torna um pouco especifica, por mais que esse não seja o foco dela.
Outro fator importante que você precisa saber antes de abraçar a linguagem, é que assim como Rust, ela ainda está em processo de evolução, isso significa que você não vai ter uma biblioteca pronta para o que você precisa, igual já temos em linguagens maduras como Python ou C#.
Porém, toda sua sintaxe, aspectos raízes, semântica, métodos, estruturas de iteração, estruturas genéricas e tudo que é necessário para seu entendimento, tem um nível de maturidade muito bom, levando em conta o tempo que o idioma emergiu ao mercado.
Nim é uma linguagem de programação de propósito geral, projetada para ser eficiente, expressiva, e acima de tudo, elegante. Em um nível hierárquico das coisas, tendo em vista que projetar a arquitetura uma linguagem que faça esses três pilares implementações perfeitas é algo ainda impossível (mas muito bem introduzido por Rust), Nim tem sua seguinte ordem:
O aspecto mais importante de tudo, sendo a eficiência o que move a linguagem;
Logo em seguida, temos sua expressividade;
E por último, seu design conciso, sua elegância.
Com isso em mente, os engenheiros e pesquisadores iniciaram o desenvolvimento da estrutura da linguagem, e depois de uns meses, tivemos uma release estável e funcional dessa parada.
Para começo da conversa, vou abordar assim, de forma mais genérica, sem fazer a garotada pirar :p
Mas não pense que elegância é algo descartável no desenvolvimento de uma linguagem, vamos perceber isso com o desenvolvimento do conteúdo ministrado aqui na série, vale lembrar que muitas das características do idioma é herdado do Python, especialmente sua sintaxe enxuta, especialmente na identação definir o escopo de um bloco de código.
Além disso Nim opta também por utilizar palavras por extenso ao invés de operadores lógicos, como o not do Python por exemplo, mas algo que Nim se sobre sai é o tratamento de exceções no tempo de execução de uma aplicação, vamos ver alguns exemplos disso mais a diante.
Algo também muito importante sobre Nim, que diferente de Python, o compilador, as bibliotecas padrão do idioma, assim como qualquer gerenciador de código, é escrito na própria linguagem de programação!
Nim foi projetado para ser uma linguagem de programação de propósito geral desde o início. Como tal, ele consiste em uma ampla gama de recursos que o tornam utilizável para praticamente qualquer projeto de aplicação, seja ela web, desktop ou embarcada (por que não?)
Assim como você deve perceber, uma linguagem de propósito geral não significa que sua escolha deve se limitar somete a tal, certos aspectos do idioma tornam mais adequado para algumas categorias de aplicativos do que outros. Isso não significa que alguns aplicativos não podem ser escritos usando a linguagem, significa que Nim pode não suportar os estilos de código mais adequados para escrever alguns tipos de aplicativos.
Nim é um idioma compilado, mas a forma como é compilado é muito diferente do que você está acostumado, especialmente se vir do Python(C) ou o próprio Go, que é referência do tempo de compilação
Quando o compilador Nim compila o código-fonte, ele primeiro converte o código em código C, pelo fato da linguagem ser utilizada em praticamente tudo, e ser um vovô para as demais, permite que isso torne o Nim bem adaptado à programação de sistemas, permitindo que projetos como sistemas operacionais, compiladores, drivers de dispositivos e software do sistema incorporado sejam implementados no idioma.
Para você ter uma ideia, Nim é tão bom para escrever aplicações de propósito geral, que existem até sistemas operacionais escritos na linguagem, você pode ver um deles aqui!
Falando mais um pouco sobre uso específico, sabe os IoTs da vida? Eles sim, são um ótimo candidato para implementações de Nim, diria que se sai bem melhor que MicroPython, isso vou tratar bem lá na frente dessa série de postagens, mas tenho certeza que se você já trabalhou com essa implementação de Python, vai sentir uma certa facilidade em entender o motivo da minha afirmação.
Outra coisa, aplicações escritas em Nim, são muito rápidas! Em vários casos, tão rápidas quanto implementações idênticas em C, e diversas vezes mais rápida que o próprio Python. Como vimos na hierarquia de objetivos do núcleo do idioma, eficiência leva todo o crédito por aqui, algo legal, que diferente do Rust, aqui temos um coletor de lixo em tempo real, que você pode controlar completamente, algo bem diferente do nível de acesso que temos com o C#, com seu heap gerenciado e seus mecanismos de otimização de consumo de instância.
Assim como temos aquele crossover de aplicações Python, compartilhando código C para acelerar sua execução, Nim pode ser utilizado sem problemas para fazer isso, existem diversas aplicações escritas em Ruby, que consumem diversos recursos do idioma para acelerar seu tempo de execução, especialmente quando é necessário o contato intensivo com diretivas de comunicação com o processador.
As aplicações de linha de comando podem se beneficiar grandemente com a eficiência do idioma. Além disso, como os aplicativos Nim são compilados, eles são independentes e, portanto, não requerem dependências de tempo de execução volumosas. Isso torna sua distribuição incrivelmente fácil.
Agora você conhece um pouco mais do que realmente significa o nome Nim, e também as capacidades do idioma, fica tranquilo, vou falar mais sobre a capacidade de gerar código C, C++ e JavaScript, mas em futuras ocasiões, quando nossa ideia aqui, tiver se desenvolvido um pouco mais.
No demais é isso senhores, se gostou dessa nova série aqui do blog, deixa um comentário, sua opinião é realmente muito importante para mim!
nim-programmin
The zen of Nim #2
Pois é, vamos continuar na nossa jornada Nim da coisa, vamos começar de onde paramos! Agora é importante matar essa sua curiosidade do idioma, fazer aquele famoso Hello, World para não ser amaldiçoado.