Resultado da tentativa de aprender Rust

Antes de começar esse texto propriamente dito, preciso comentar que conversando na comunidade de Rust no Telegram, recebi o link de um material de Rust muito bom do Elias (@eamaral), que é o novo livro, gostei muito mais desse que do anterior, e me pareceu muito melhor para quem não está migrando de C++ ou não tem um conhecimento prévio de muitos conceitos. Também gostaria de agradecer a “aula” que foi dada pelo mesmo sobre alguns conceitos, mesmo quando eu até estava tentando evitar a conversa, embora que isso já aconteceu comigo em outras comunidades de novas linguagens, tendo pessoas que realmente gostam de compartilhar o seu conhecimento sobre uma coisa nova.

Infelizmente essa primeira tentativa não terminou como eu gostaria, muito por querer desenvolver alguns projetos, onde ainda não conseguiria ter uma boa produtividade em Rust. Nos meus testes feitos, consegui fazer exemplos simples e entender a teoria de muitos conceitos, porém suas aplicações não se mostraram muito simples na prática. Porém acredito que o maior problema é a falta de experiência com a forma de programar e pensar de Rust.

Porém nem tudo foi em vão, o uso do enum e pattern matching, principalmente no tratamento de erros foi uma coisa que já usei fora do Rust, em outra linguagem de programação que desejo falar num texto futuro.

Então embora não tenha conseguido aprender um bom nível de Rust desta vez, aprendê-lo ainda não foi descartado, principalmente pelos que ele traz de interessante, como identificar muitos problemas em tempo de compilação, que embora já exista nas linguagens de programação funcional, é a primeira vez que vejo ser aplicado tão fortemente numa linguagem de outro paradigma.

Em busca de um material sobre Rust

No texto anterior contei o motivo da escolha de aprender Rust, neste texto vou falar sobre os materiais que encontrei.

A primeira vez que ouvi falar da linguagem foi em 2014 durante o FISL 15, na palestra “Servo: O web engine paralelo” do Bruno de Oliveira Abinader (infelizmente parece que a gravação não está mais no servidor). Inicialmente gostei do servo, porém não chegou a me interessar a ponto de correr atrás, tanto do servo, quanto do Rust. Mas de alguma forma, que não me lembro agora, acabei tento contato novamente com a linguagem.

Quando decidi começar a aprender, veio a primeira dificuldade de todas, encontrar um bom material. Achei alguns que poderiam ser bons, porém voltado principalmente para quem programa em C++, comentando principalmente as diferenças, porém não é o meu caso. Também não queria algo para quem esta começando a programar agora, ou só uma breve apresentação da linguagem, o ideal seria algo para quem só está migrando de linguagem, como talvez o tutorial do Python, explicando de forma direta e incremental as instruções e particularidades do Rust para qualquer um que tenha conhecimento de lógica de programação, independente da linguagem, que infelizmente não achei muito facilmente.

Antes de começar a estudar de fato, encontrei o Rust on the Rocks! do Dalmo Veras Neto, e a melhor parte é por ser em português, porém ele parou de postar os textos por falta de tempo, inclusive nem chegou a estrear o canal no YouTube.

Já que teria que ser em inglês mesmo, parti para o The Rust Programming Language, que encontrei na documentação oficial. Inicialmente não gostei muito da ordem dos tópicos, como comentar vários conceitos antes de me apresentar os tipos primitivos da linguagem, então fiquei um pouco perdido em algumas partes dos exemplos que eu só veria mais adiante.

Desta forma estou adotando a estratégia de simplesmente não me importar se não entender muito bem algo, tentar avançar o máximo que puder, para depois rever os conceitos com mais calma e uma base mair da linguagem. Aprendendo mesmo o que cada coisa significa, conceitos e elementos da sintaxe, num segundo estudo.

Ainda não terminei de lê-lo, porém me parece que será um bom guia de referência no futuro. Mas como material de estudo único, talvez falte um pouco a forma Rust de resolver os problemas, para evitar de só trocar a linguagem, mas não a mentalidade de resolver o problema. Então ainda estou em busca de um material, atualizado de preferência, com exemplo de um projeto para eu entender como me adaptar a linguagem.

Acho importante essa parte de se adaptar a linguagem, uma vez que mesmo que não vá mais utilizá-la, aprenderei conceitos que podem ser uteis em outras linguagem. Também entender como a tecnologia funciona, para não tentar usá-la de forma incorreta e gerando vários problemas por causa disso. Infelizmente essa é a parte mais difícil.

Começo a aprender Rust

Começo a aprender Rust

Neste final de semana comecei a estudar a linguagem de programação Rust. E para registrar o meu estudo, pretendo escrever alguns textos aqui, começando pelo motivo de ter escolhido esta linguagem, mas depois comentar o que estou achando e dificuldades que estou encontrando.

O principal motivo para eu escolher esta linguagem está ligando as principais linguagens que utilizo, sendo que existia um caso onde elas não atendiam. Para entender a necessidade vou listá-las.

De forma geral utilizo shell script (bash para ser mais específico) quando tenho que fazer automações, ou se já existe algum programa pronto, simplificar o seu uso. Sendo seu maior exemplo o Commit Rules, que permite executar comandos para validar o commit, onde leio o arquivo de configuração, executo alguns comandos e manipulo a saída e exit status dos mesmos.

Quando preciso desenvolver algo mais elaborado, opto pelo Python, que por ser uma linguagem bem geral e de rápido desenvolvimento, facilita bastante o meu trabalho, sendo desde programas em linha de comando, até aplicações web. Vou deixar aqui de exemplo o Deduplicated, que foi desenvolvido como uma biblioteca, tendo tanto uma interface por linha de comando, quanto web.

Porém Python não é uma linguagem que tem foco em performance, especialmente na versão 3. Este foi um dos principais motivos de algumas pessoas da comunidade Python ficarem de olho no Go, o que talvez seria o meu caminho, se tivesse tido necessidade de performance. Também cheguei a pesquisar sobre o Genie, porém por ser recente e a pouca documentação, fizeram eu a deixá-la de lado, até por nem ela, nem Vala terem tido um grande sucesso.

Tenho algum conhecimento de C, porém é mais teórico que prático, não tendo tanta confiança para escrever um software seguro nesta linguagem. Também já tentei estudar mais sobre algumas ferramentas, como Make e Autoconf, porém não encontrei bons materiais para o meu estudo.

Neste ponto encontrei Rust, que pode ser visto como uma alternativa ao C, porém verifica o acesso seguro a memória em tempo de compilação, aumentando minha confiança em escrever um software seguro. Ele também um tem gerenciador de pacotes, que pelos meus testes funcionou muito bem e sem espalhar vários arquivos pelo sistema inteiro, podendo ser excluídos ao apagar um único diretório.

Rust tem outras qualidades, porém esses dois pontos suprem minhas “dificuldades” do C. Se encaixando como uma opção de linguagem quando preciso de desempenho (tenho controle semelhante ao C, e sem garbage collector como outras linguagens), porém ainda é uma linguagem nova com recursos bem interessantes em suas expressões (comandos).

No próximo texto comentarei mais sobre materiais e primeiras impressões.