Executando verificação de segurança...
91

🦀 Rust: Escrever código perfeito é possível!

O que é Rust? 🦀

Logo da linguagem de programação Rust

Rust é uma linguagem de programação multiparadigma de alto-nível desenvolvida pela Mozilla. É compilada e estáticamente tipada.
A linguagem foi criada com alguns objetivos em mente:

  • Segurança 👮
  • Performance ⚡
  • Simplicidade 📝

É uma linguagem de programação que conquistou meu coração nos últimos meses, e quero mostrar aqui de forma resumida e rápida o porquê do design da linguagem ser tão único e viciante de usar!

Como Rust torna meu programa seguro?

O design do Rust foi planejado de forma com que praticamente nenhum erro aconteça durante a execução do seu programa, já que a grande maioria dos erros são descobertos em tempo de compilação!

E o que isso quer dizer?
Resumindo: os problemas do seu código não vão crashar seu app às 3 da manhã devido a um bug imprevisível e indefinido causado por um undefined!

Aqui vai um exemplo de uma das várias coisas que somente Rust pode nos proporcionar:

Em JavaScript, coisas assim podem e vão acontecer!
Exemplo de código ruim em JS

Rust não tem undefined nem null, o que torna impossível coisas assim de acontecerem. O compilador nem chega à compilar o código caso detecte algum erro, além de prover ao programador mensagens de erro amigáveis e fáceis de entender.

Mas se Rust não tem undefined/null, como podemos representar o "nada"?

Em Rust, existe uma coisa chamado Option!
Options são muito convenientes quando você pode ou não ter algum valor. E sua sintaxe é ainda mais simples. Options são enums, e podem ser definidas como:
Definição de uma Option em Rust

Observe também que Option é genérica: Podendo conter (ou não) qualquer tipo de variável que você desejar!

Some(T) contém o valor da variável caso exista. Mas nem sempre é possível obter um valor, então Option também possui a variante None! None não é undefined, nem null, é simplesmente nada.

Perceba também que não existe uma keyword extra como null ou undefined na sintaxe de Rust para incluir valores nulos! Option é uma enum padrão de Rust, mas mesmo caso ela não existisse, você mesmo poderia ter criado ela com pouquíssimas linhas de código! Você mesmo pode criar sua forma segura de programar. Você não acha isso incrível? 🦀

Agora vamos para um exemplo de Options na prática:
Exemplo de Options

Nesse exemplo, eu omiti o tipo das variáveis para simplificar, mas o compilador coloca o tipo automaticamente se você deixar o tipo implícito. Mas você pode também explicitar o tipo de uma option assim:

let algum_numero: Option<i32> = Some(30); 
// i32 em Rust é o tipo para números inteiros em 32-bits

Options estão em todo canto! Ao invés de ficar em dúvida se uma função pode ou não retornar null ou undefined, se você ver que ela retorna Option, você já sabe que nem sempre ela pode ter algum valor!

Rust é tão rápido quanto C/C++!

Rust é uma linguagem com "Zero-Cost-Abstraction". Isso significa que o seu código Rust super-seguro com Options (e outras funções da linguagem) consegue ser simples, fácil de entender e ao mesmo tempo super rápido!

Quando você executa seu código, o compilador verifica seu código inteiro e faz grande parte do trabalho pra você. Se algo der errado, ele para de compilar e mostra onde está o erro e como você pode resolvê-lo. Caso tudo esteja funcionando perfeitamente e de forma segura, o compilador simplesmente deleta as Options e abstrações do seu código e converte pra puro código de máquina otimizado, mantendo todas as funcionalidades intactas.

Ou seja, o seu código pode ao mesmo tempo ser simples para o desenvolvedor e super rápido e seguro para o consumidor, graças ao compilador inteligente da linguagem!

Conclusão

Rust é uma linguagem de programação que não gosta de seguir padrões. Ao invés de fazer coisas do jeito popular e familiar, ela prefere fazer as coisas do melhor jeito possível! 💡

Você não precisa sacrificar performance por segurança, ou segurança por um código limpo. Em Rust, você pode ter performance, segurança e um código fácil de ler, tudo ao mesmo tempo!

Nessa postagem eu quis mostrar apenas uma das diversas de escolhas de design do Rust. Existe também Result, para tratar erros e falhas de forma segura. Se você quiser ler mais sobre as funcionalidades da linguagem, eu recomendo o Rust Book Oficial! 📚

Pra finalizar, uma frase que eu amo do canal No Boilerplate:
(inclusive, eu recomendo ele se você entender Inglês e quiser ver mais coisas sobre Rust)

"Os últimos 40 anos foram escritos em C/C++. Os próximos 40 anos serão escritos em Rust."

Muito obrigado por ler até aqui!

Carregando publicação patrocinada...
3

Eu percebi que você era outro fã do No Boilerplate assim que li o título. Maneiro! Outra frase de lá que me impacta bastante é:

Outras linguagens tornam fácil de começar projetos; Rust torna fácil terminá-los.

2

Sem sombra de dúvidas Rust tem se tornando cade vez mais popular, e esta no meu radar de aprendizado.

Para agregar algo, o Bruno Rocha que trabalha na Red Hat estava fazendo um serie ensinando Rust. Super recomendo. link da serie.

1
2
2

Primeiramente bom post, é bem útil pra quem tem curiosidades sobre rust. Realmente rust vem sendo um destaque quando se trata em código seguro e performance, o compilador do rust faz com maestria o trabalho de não deixar o código compilar caso encontre algum possível bug, e ainda por cima ti dar até dicas de como resolver o problema para o seu código rodar com segurança. A forma como o rust lida com gerenciamento de memória também é um diferencial da linguagem e claro o gerenciamento de projeto com o cargo é uma mão na roda, ele ti ajuda desde a criação de novos projetos deixando tudo organizado, e até ti dar várias opções de compilação, e ainda tem um arquivo que gerencia todas as dependências do seu projeto, que massa né?!
Não sou muito especialista em rust pois comecei a estudar rust recentemente mas eu estou gostando de aprender a linguagem,vai me ajudar em projetos que desejo construir no futuro.
Se tiverem interessados em aprender rust indico a própia documentação do rust book que é completa e tem uma curva de aprendizado ótima, e em vídeos no youtube tem o canal Bruno Rocha - CodeShow que está fazendo video aula pra galera que deseja aprender rust desde o básico, super indico!

2
1

Isso é verdade, ou quase, mesmo com TypeScript, ainda sim podemos ter algo como:

const anyConst = { a: "say A", b: "say B" }
anyConst['a'].toUpperCase() // Sem erro
anyConst['c'].toUpperCase() // TypeError: Cannot read properties of undefined (reading 'toUpperCase')

Ai nesses casos em que pode dar undefined temos que validar.

O TypeScript resolve muita coisa, mas ainda sim podemos ter erros, e os testes unitarios que vão nos ajudar a encontra-los antes de ir para produção.

4

Na verdade esse tipo de sintaxe está literalmente contornado a verificação do typescript e não seria a forma correta de utilizar, aqui um exemplo onde na ultima linha o typescript acusa de erro:

const anyConst = {a: "say A", b: "say B"};

//jeito errado
anyConst['a'].toUpperCase();
anyConst['c'].toUpperCase(); // não acusa erro na compilação

//jeito certo
anyConst.a.toUpperCase();
anyConst.c.toUpperCase(); // acusa erro na compilação

não imagino uma ocasião onde seria necessario utilizar essa forma anyConst['c'], caso seja necessario ter usar uma estrutura parecida com essa eu optaria por usar um map dessa forma

const anyConst = new Map([
    ["a","say A"], 
    ["b","say B"]
]);

anyConst.get('a').toUpperCase(); // acusa erro na compilação
anyConst.get('c').toUpperCase(); // acusa erro na compilação

//forma de burla o typescript:
anyConst.get('c')?.toUpperCase(); // não acusa erro na compilação somente na execusão

dessa forma o typescript ira funcionar e proteger o seu codigo de uma forma muito parecida com o Option do rust, ou com o Optional do java

caso você queira burla essas verificação do typescript você precisar usar essa sinxtaxe anyConst.get('c')?.toUpperCase(); oque não é recomendavel, e o programador que fizer isso estara de proposito fazendo algo errado

2

Exelente post, e para quem está interessado em usar rust para aplicativos para desktop, tem o tauri, que é um framework tipo o electron, só que ao inveś de node ele usa o rust para o backend e para o frontend o html, css e javascript.

Podem dar uma olhada nesse vídeo aqui para verem uma breve explicação.

1

Esse tauri é interessantíssimo.

Já se tornou claro o uso do JavaScript para o desenvolvimento de aplicações desktop com o Electron, mas o grande problema do electron é justamente o consumo exagerado de memória RAM pelos aplicativos que usam ele.

O tauri por outro lado compila para um executável muito menor e que consome beem menos recursos da máquina, de forma simplificada, você escreve código JavaScript (Em qualquer framework desde React até Svelte e vue) e ele renderiza uma WebView e utiliza Rust backend do aplicativo desktop (para acessar arquivos do filesystem etc...).

Tem um projeto interessantíssimo de um explorador de arquivos que está usando ele e que recomendo darem uma olhada, eles estão utilizando tecnologias bem novas mesmo.

2

Também sou Fã do No Boilerplate, mas gosto mais do Let's Get Rusty e do Code to the Moon. Tenho aprendido Rust e VSCode ao mesmo tempo. Dev Containers são muito úteis .

1

Estou gravando uma série de vídeos sobre o rust no youtube

Pretendo explicar todo o book que o rust disponibiliza nessa playlist!

são todos bem vindos a estudar essa linguagem juntamente comigo 🤩

1
1

Minha dúvida é se numa aplicação de médio a grande porte sofreríamos lentidão com o ato de compilar toda a base de código a cada alteração? Ou não?

1

De fato isso pode ser um problema em projetos grandes. Mas graças ao design da linguagem, você não precisa compilar pra testar cada pequena mudança no código! Se sua IDE não mostrar nenhum erro, o código tem altas chances de funcionar na primeira vez que você compilar e executar. É a magia do Rust!

Em Rust, você passa mais tempo programando do que testando possíveis erros imprevisíveis, porque em Rust você consegue prever tudo que seu programa fará.

1

Nos testes que eu fiz com Rust senti que ele não compila tudo toda vez, se você não deletar a pasta target do projeto ele só recompila o que mudou desde a última compilação, e geralmente o que demora mais são as dependências. Por isso eu não acho que tempo de compilação seria um problema constante ao trabalhar num prohjeto grande, seria mais perceptível na primeira vez que você ajusta seu ambiente de trabalho (começar trabalhando num projeto grande pré-existente), se adicionar uma nova dependência que seja pesada, ou ainda se for compilar com opções diferentes (optimizações extras ou otimizar para que o executável seja menor).
E sendo justo, seu código vai pasar mais tempo sendo usado do que sendo compilado, então é um investimento razoável.

Mas se tempo de compilação for uma preocupação realmente importante, a melhor linguagem que eu conheço é Go.

2

Apesar de go perder em todos os benchmarks onde rust aparece, como você disse o programa vai passar mais tempo sendo executado do que compilando. Criar um código performático acredito ser mais importante que a preocupação com o tempo de compilação e não acho que Rust faça feio quando o assunto é tempo de compilação, acredito ser bastante razoável neste sentido.

1
1
1
1
1

Tem o canal do youtube do Bruno Rocha, em português, que está fazendo uma série de vídeos do Rust.
Para quem quiser ver inicia nesse aqui:
https://www.youtube.com/watch?v=zWXloY0sslE

Em um evento da microsoft, o CEO comentou que aproximadamente 70% dos problemas do windows eram provenientes de vazamento de memória. Partes do windows começaram a serem reescritas em Rust. O linux tbm vai ter o kernel reescrito em Rust, lógico que em doses homeopáticas.
Tem um modo no Rust que é chamado Irust para fazer data Science, que se assemelha ao jupiter notebook, muito usado para análise de dados com python.
Ele também fornece webassembly, não sei como, que será para elaboração de material para internet, de forma compilada e não interpretada como html, fazendo com o que o desempenho da aplicação seja muito melhor que o atual desempenho. Essa parte do webassembly é a que eu menos fui atrás para saber od que se tratava.
o próprio site da linguagem fornece bastante material para vc aprender:
https://www.rust-lang.org/learn

aqui tem exemplos:
https://doc.rust-lang.org/stable/rust-by-example/

1

Excelente post!
Pelo que vejo é bastante parecido com Java, estou certo? Por ser uma linguagem bastante tipada e também é compilada.
Eu estou estudando e trabalho com Java no meu atual emprego, e estou pensando em começar a estudar em paralelo alguma outra linguagem. Rust parece ser ama boa escolha.

2

Rust na verdade n eh tao parecido com Java assim, ele na real eh mais parecido com C++ mesmo.
Rust nao trabalha com a orientacao a objetos da mesma forma q o Java, ele trabalha com objetos, classes e interfaces de forma semelhante mas ainda sim eh diferente.
Vc usa conceitos de structs para objetos e traits para interface, eles tem comportamentos um pouco diferentes de classes e da interfaces do Java.
Eu trabalhei com Java, hoje trabalho com Python e estou estudando Rust e cara eh uma linguagem muito dahora.

2

E o que está achando de Rust? Se eu já entendo bem de Java, acha que vai ser fácil estudar Rust? Estou bastante interessado. Apesar de gostar bastante de Java, que já é uma linguagem consolidade, quero ir aprendendo algo diferente, pra ir consolidando meu entendimento de programacao em geral.

1

Eu estou achando sensacional, eu estou focando meus estudos no desenvolvimento de API, estou usando o framework Rocket, a sintaxe dele eh um pouco mais complexa e ele tem um conceito de ownership com relacao as variaveis, tenho batido um pouco de cabeca mas insentivo vc a testar =], eu me surpreendi bastante com a forma que a linguagem trabalha em si.
Quem sabe um dia eu migre de Python pra Rust =]

1

Qual o diferencial do Rust no que tange memory management? sempre ouço muita gente falando disso, mas não sei qual a implementação real disso em Rust.

1
1

Não ter GB é uma ajuda e tanto para o tempo de uso do processador :D.
nunca usei Rust, mas acho interessante o Borrow Checker e o compilador guspir binário nativo, exelente.

1

Que curioso, também estou estudando a pouco programação e vi o código fonte tv falando sobre o Rust, me deu vontade de estudar sobre mas estou tão no inicio que não imagino ser interessante ainda aprender.
Você acha que com uma boa base(depois de estudar lógica e estrutura de dados) já posso pensar em dar os primeiros passos com o Rust ou seria interessante ter um amplo conhecimento com uma linguagem antes?
ps:estou estudando o javascript de início

2

Rust força você a escrever código sem erros, então na minha visão qualquer um pode usar Rust! Até mesmo como 1° linguagem. Acho que migrar de Rust pra qualquer outra linguagem seria fácil, já que você já saberia como tudo deve ser feito corretamente.

1

Por mais que eu goste de Rust, eu que já programo (trabalho com JS) acho a curva de aprendizagem um tanto quanto íngrime. Se você tiver pressa pra aprender, fazer uma transição de carreira e esse tipo de coisa, melhor deixar o Rust um pouco mais pra frente, já que ele não oferece muito em termos de vaga de emprego (por enquanto).

Mas se você tá aprendendo a programar porque gosta, então só vai!

1

Acho interessante ter a curiosidade de ver outras linguagens, te confesso que isso me ajudou muito a entender conceitos mais complexos. Só que creio que é importante se aprofundar em uma linguagem, de preferencia a que te deixar mais confortavel.

1
1
1

Excelente! Cada vez mais estou propenso a migrar minhas API's para Rust... só que ainda não estou muito seguro quanto à implementação. Ainda não consegui encontrar um bom curso online que realmente apresente a linguagem e todas as suas funcionalidades em uma situação prática... se alguém tiver alguma sugestão, agradeço! Valeu!!!

2

Entao, eu tbm nao encontrei nenhum curso realmente bom, existem bons cursos mas talvez nao muito completo e acredito q seja pela complexidade aparente da linguagem.
Eu estou estudando basicamente pela documentacao do Rust e do Rocket, a documentacao do Rust eu tiro meu chapeu pq ela eh muito boa na maioria das vezes eu consigo me virar pesquisando apenas na documentacao, sem precisar de foruns.

1

Que post maravilhoso! Venho estudando Rust no meu tempo vago e tenho gostado muito da linguagem. Em paralelo, tenho estudado C no curso CS50x e é incrível como uma liguagem de 1972 moldou muita coisa do usamos (JavaScript, Python, etc ) e ainda vamos usar nesses próximos anos com Rust! Estou bem ansioso pelo próximo ciclo de 40 anos 😄

Aliás, valeu pela recomendação de canal! Por aqui conhecia apenas o Let's get Rusty, que também recomendo!!

1

Excelente iniciativa Atom3z. Sou desenvolvedor a mais de uma década e recentemente tenho estudado Rust. Com certeza é uma linguagem com a qual gostaria de trabalhar. No Brasil parece não existir muito engajamento ou até mesmo uma comunidade sólida. Se souber de algo conta aí pra gente!

1

É o momento pra gente solidificar e cristalizar a comunidade. Não programo em Rust ainda mas desde 2021 me interesso nela. Nunca peguei direito pra aprender, mas 2023 tá aí pra isso, mexendo com renderização 3D, e na web, ou até aplicações desktop como sugeriram em outro comentário com o Tauri.

Mas já dá pra irmos fazendo alguma coisa:

  • Escrevendo tutoriais ou mesmo apenas sobre a linguagem aqui no Tab ou em outros locais
  • Desenvolvendo projetinhos e disponibilizando pra comunidade
  • Enchendo o saco do pessoal falando sobre Rust pra cair nas rodinhas de conversas tech

E de pouco em pouco poderemos ver cada vez mais frutos dessas investidas

1
1

O Rust fez um pocuo de fama com blockchain, mas tem muitas empresas q usam ele pra desenvolvimento de rest api.
A propria microsoft ja postou no twitter dizendo q as pessoas deveriam parar de usar C e C++ e passar a usar Rust.

1

Muito bom! Estou considerando aprender uma nova linguagem e Rust e Js estão na lista! Estou descobrindo o que é possível fazer com cada para me aprofundar mais

1
1
2

Com o tempo, o Rust vai poder ser aplicado em literalmente qualquer tipo de programa; no Front-end com Web Assembly (procura por Yew), no back-end (Rocket.rs).

Atualmente, já está sendo utilizado principalmente em programas de mais baixo nível, a nível de sistemas; no kernel do Linux, o Rust passou a ser adotado recentemente (você não tem ideia do quão raro é uma linguagem ser aceita por lá), assim como no Android. A Microsoft também declarou que vai parar de escrever novos projetos em C/C++ daqui pra frente em favor do Rust.

1

Se não me engano o Mercado Livre já tem parte dos seus serviços escritos em Rust, aparentemente estavam procurando por uma maneira de diminuir a conta da Cloud e até onde soube esta sendo bem promissor. Mas não tenho um fonte para afirmar isso categoricamente, ouvi de um colega que estava trabalhando lá com DevOps.

A alguns tempo atrás também saiu uma noticia que a Volvo iria começar a usar o Rust na newsletter do filipedeschamps, o link para um post aqui do TabNews -> Volvo decide utilizar Rust em seus veículos · gugadeschamps

1

Sou desenvolvedor full stack e comecei a estudar rust a pouco tempo.
Estou impressionado com essa linguagem!

Você consegue fazer coisas de baixo nível utilizando uma sintaxe de alto nível sem ser prejudicado na performance nem perder pontos em segurança.

pretendo desenvolver micro-serviços utilizando rust futuramente, e ver essa linguagem em ação!

1

Cara, acho Rust uma linguagem muito elegante, comecei a estudar Rust esses dias, pois necessito no back-end para a criação de um aplicativo que utiliza o Tauri.

1
1

Sim! E o número de usos em empresas está crescendo quase exponencialmente.

Até o Linux começou a implementar suporte nativo ao Rust
Notícia: Linux implementará Rust

1
1

Acho que é muito bacana, RUST é uma linguagem que sempre quis testar, mas nunca comecei de fato porque não tem muita utilidade para mim, digo, em aplicações reais. Sou desenvolvedor fullstack mas meu foco é mobile, então é praticamente um conhecimento que não seria muito usado por mim. Mas quem sabe um dia. Aliás, ótimo post mano, parabéns! <3

1
1

Rust é, com certeza, uma das linguagens que estão no meu radar para aprender em 2023. Gostei muito da sua explicação sobre essa característica de não possuir null nem undefined. Ajudou a clarear um pouco as ideias sobre a segurança que tanto falam que Rust possui.

1
1

Cara, poderia pensar em ser uma especie de embaixador Rust por aqui no tab, fazendo postagens diarias de curiosidades, além de compartilhar conhecimento.
Achei o post muito bom pra quem nunca teve contato, gerou um certo interesse/curiosidade.

1

Que conteúdo incrível! Meu parabéns pelo post, Atom3z!
Eu já ouvi falar em Rust várias vezes, mas nunca fui a fundo procurar sobre.
Vou adicionar ela na minha agenda de estudos futuros!

1
1
1

Recentemente vi sobre o Actix, ainda não testei mas me parece ser interessante.

Actix Web lets you quickly and confidently develop web services in Rust and this guide will get you going in no time.

1

O principal uso do rust é no desenvolvimento de sistemas low level que precisam de uma boa performance, tanto é que o próprio site dele vende ele como um "systems programming language", portanto ele é bem versado para sistemas embarcados, programas CLI, sistemas operacionais, sistemas distribuídos, compiladores e etc..., basicamente boa parte do que o C++ fez e faz ainda no mundo (muita coisa).

Mas atualmente ele começou a ser utilizado na web3 também, a criptomoeda solana popularizou ele muito por utilizá-lo em sua blockchain.

Também, para servidores web, temos o Actix e o Rocket que os dois comentários abaixos fizeram.

Na programação de jogos, temos já algumas engines feitas em Rust para esse propósito como o Bevy.

Já em aplicações desktop, o Tauri vem ganhando bastante força e adoção pela comunidade.

Quanto à data science, temos várias das bibliotecas e ferramentas do Python já sendo criadas como crates (pacotes) no ecosistema do Rust.

E por fim, existe uma expectativa bem alta em relação ao WebAssembly, e ele está sendo utilizado em diversos lugares e não só na web, mas o interessante dele é que o WebAssembly acaba sendo um alvo de compilação para outras linguagens como Go, C# mas principalmente o Rust, onde temos frameworks como o Yew ou o Leptos

1
1
1

Realmente ela é uma maravilhosa linguagem, e compilador incrível!
Mas um coisa que ela não é, é simples...

Quem acha ela simples, é por tá usando muito "passo a passo de como fazer tal coisa...", C++ é mais fácil do que Rust, olhe que nem acho o C++ massinha de usar.

Mas óbvio, entre Rust e C++ eu preferiria usar Rust, e isso porque é melhor gastar um tempo a mais pra se familiarizar com rust e ganhar os benefícios de usar rust.

Mas definitivamente rust não é simples.

1

Faz dois meses que estou estudando programação e há três dias comecei a estudar Rust, um amigo tem me dado aula pelo meet todos os dias. É incrivel porquê em rust estou absorvendo mais a teoria por trás das linguagens e amadurecendo muito a consciência sobre o código. Eu ainda estou tendo dificuldades com o paradigma funcional, mas rust permite abordar o código de muitas maneiras. Particularmente é a linguagem a qual eu mais tenho simpatia. Pretendo um dia ainda criar um bom projeto usando rust.