Linguagem de programação Rust

Rust, uma linguagem rápida e segura?

Ontem, dia 22 de setembro, aconteceu a 3ª edição do #abcdev (confirma detalhes do que rolou nesse link) e eu estava lá. O evento aconteceu em São Caetano no Auditório do Centro de tecnologia Leandro Klein e foi patrocinado por algumas gigantes como redhat, via varejo, nubank e outras.

Ah, Fui um dos primeiros a chegar :). E quando digo que fui um dos primeiro, eu fui exatamente o segundo. Na minha frente estava um colega (não tem nada a ver com pontualidade, só nos confundimos e chegamos uma hora antes :P rsrs).

O evento teve uma série de palestras e em uma delas, apresentada pelo Bruno Rocha da redhat, me foi apresentado o Rust. Uma linguagem de programação que se define como sendo uma linguagem de programação de sistemas que opera de maneira incrivelmente rápida, evita os defeitos e garante a segurança da thread. É importante mencionar que não fiquei nessa palestra por estar empolgado com Rust. Eu nem mesmo sabia que existia Rust. Porém, no momento em que o Bruno disse que ela é uma linguagem que se propõe a ser mais rápida que C e C++, eu imediatamente ofereci uma overdose de atenção a cada palavra daquele momento em diante.

O Bruno mencionou muitos detalhes sobre a segurança da linguagem, o fato do compilador evitar que você escreva um código fraco que leve a erro de runtime. A performance dela superar a performance de linguagens como C e C++ e a sintaxe ser um tanto quanto agradável (considerando a categoría em que ela se posiciona).

Beber cerveja e assistir meu time jogar ou programar em uma nova linguagem?

Pff, não tem nem o que se discutir né?; claro que escolhi programar! Obviamente fiquei curioso e não conseguiria terminar o final de semana sem brincar com Rust e compartilhar um pouco do que fiz.

Maravilha, show me the code!

Não!, Antes de olhar qualquer código, faça exatamente o que eu não fiz (seguir a recomendação do Bruno Rocha na instalação).
Instale seguindo os passos abaixo (e recomendo fazer isso para que você não saia digitando código, queira compilar e acabe por instalar parcialmente seu ambiente e depois tenha que desinstalar tudo para conseguir fazer direito).

- Certifique-se de ter o curl instalado
- Via terminal, execute: curl https://sh.rustup.rs -sSf | sh

Agora, vamos para a IDE

Eu não segui nenhuma recomendação do rust-lang.org, e tão pouco do Bruno. Fui direto pra minha IDE favorita e certamente encontrei um plugin. Ou seja, abri o visual studio code e busquei por Rust.

Tudo configurado, hora de "codar"

A primeira coisa que fiz foi exatamente a primeira coisa que devemos fazer. Isso mesmo, um Hello World. E curti muito o println!("{0} {1}", ..., ...);

E então pensei, o que fazer para usar alguns recursos a mais?

Resolvi escrever um programa para consultar uma lista de nomes da esquerda para direita, ignorando o case. E acredite, é um saco trabalhar com string no Rust. Mas, gostei mesmo assim, poderia ser pior (se fosse em C, por exemplo). Se liga no resultado:

- Primeiro criei meu arquivo main.rs (pode ser qualquer nome, mas a convenção do rust sugere que você use hífen como separador no nome dos arquivos caso tenha dois nomes .rs, por exemplo batata-quente.rs).
- Depois criei o ponto de início de qualquer programa Rust (o método main).
- E escrevi o código abaixo:


fn main(){
println!("{0}, {1}. {2}", "Olá",
"Esse é meu primeiro programa Rust (depois do hello world!)",
"\nAbaixo vou listar os nomes iniciados por \"r\"");

println!("{}", familia_celebrone("r"));
}

fn familia_celebrone(filtro: &str) -> String {
let nomes = ["Rodrigo", "Renan", "Flávia", "Ivone", "Sofia",
"Robson", "Carol", "Pedro", "Flaviano", "Creonice"];
let mut nomes_filtrados = String::new();

for(_i, nome) in nomes.iter().enumerate() {
let mut nome_cortado : String = nome.to_uppercase()
.chars().take(filtro.chars().count()).collect();
let mut filtro_cortado : String = filtro.to_uppercase().to_string();

if nome_cortado == filtro_cortado {

nomes_filtrados.push_str(nome);
nomes_filtrados.push_str(", ");
}
}

return nomes_filtrados;
}

- Feito isso, compilei com rustc main.rs
- E rodei o comando ./main para ver o resultado
- O resultado foi exatamente: "Rodrigo, Renan, Robson, " (é, não retirei a última vírgula por pura preguiça, já passa da meia noite).
- Perceba que em alguns lugares usei mut, pois por padrão o Rust é imutável. Pode parecer loucura, mas se observarmos a quantidade de cagada que fazem em outras linguagens, faz sentido inverter esse padrão.
- Outra coisa curiosa é o _i ali no for. O compilador recomendou que eu coloque um _ no ínicio de variáveis que não são utilizadas.

Enfim, é isso. No geral eu gostaria de deixar registrado que esse evento foi muito bem organizado. Rico de conteúdo e me apresentou uma linguagem que eu desconhecia. Sem mencionar os Web Components nativos com polymer, mas isso vou deixar como spoiler.

Vlw, abraços e espero que gostem do Rust assim como eu gostei :)