Aprendendo Rust: 00 - O Inicio
Tags: rust, tutorial
Published: 2020-06-26 11:57:38


E aee jovens, tudo bem com vocês?

Meu primeiro post será sobre o inicio de uma linguagem que está tomando um lugar especial na minha vida.

Enquanto estiver estudando vou ir postando sobre o que estou aprendendo. Então se tiverem qualquer critica construtiva, por favor poste nos comentários.

Vamos entender sobre porque a Rust foi desenvolvida, porque utilizar, e uma pequena história sobre o inicio de tudo neste post.

Com o tempo, iremos ir aprofundando nessa linguagem.

Então, lets'go!!!

## Por que Rust foi criado?

A linguagem surgiu para corrigir problemas, para o que a gente chama de _"nível de sistema"_, que lida com detalhes de baixo nível como gerenciamento de memória, representação de dados e simultaneidade.

A Mozilla estava passando por problemas muito sérios no desenvolvimento do Browser Firefox, nas Engines por trás do Firefox para ser mais preciso.

Alguns problemas que são bastante conhecidos para quem desenvolve sistemas no _"nível de sistema"_.

E esses erros realmente custam muito caro. A Mozilla começou a estudar de criar uma linguagem de programação pra resolver tudo isso. Eles são conhecidos como "Erros Billion Dollar Mistake", pois realmente davam um prejuízo muito grande.

 Abaixo seguem alguns exemplos dos erros mais conhecidos:

- Dangling Pointers
    - ___Null Pointer Exception___ - Acesso a um elemento com o valor nulo.
    - ___Double Free___ - Tentar limpar um elemento que já foi limpo anteriormente.
    - ___Use After Free___ - Tentar utilizar um elemento que já foi limpo.
- Buffer Overflow
    - ___Index Out Of Bounds___ - Acesso ao index inexistente de um vetor.
- Iterator Invalidation
- ___Data Races___ - Threads paralelas acessando o mesmo recurso

Erros que podem apresentar __Undefined Behaviour__ (Comportamento Inesperado).

## Por que utilizar Rust?

Para corrigir todos esses problemas, a Rust utiliza uma liberação de memória Heap sem _Garabage Collector_ e sem necessidade do programador ter que controlar essa liberação.

Essa liberação é feita quando a variável sai do escopo, utilizando _Ownership_ e _Borrowing_ (posse e empréstimo). Veremos como é o funcionamento disso em outro post mais pra frente.

Rust não permite criar uma variável sem ser inicializada, não existe o tipo undefined (indefinido) e não existe null (nulo).

Não tem custo de abstração.

Rust é multi-paradigma. 
- Imperativa
- Funcional
- Orientada a objetos

Não existe um Runtime, o programa final é compilado - Sendo gerado um .exe para o Windows e o .sh para sistemas Unix.

A partir das versões de 2018 e posteriores virou uma linguagem multi-propósito, é amplamente utilizada para criar serviços web, API's, web sites, Frameworks, games, ferramentas desktop, ferramentas mobile, sistemas operacionais, embarcados, machine learning, data science, etc.

## Um pouco mais sobre a linguagem Rust

Rust foi lançada em 15 de Maio de 2015 na versão 1.0, nesta versão ela havia sido projetada para sistemas de mais _"nível de sistema"_. Em 2018 foi feita uma mudança radical na linguagem, onde parou de ser apenas uma linguagem de sistemas "baixo nível", e virou uma linguagem multi-proposito. Rust  facilmente se integra com outras linguagens e está pelo quinto ano consecutivo agora em 2020 como a linguagem mais amada pelo publico de acordo com pesquisas realizadas pelo [Stackoverflow](https://insights.stackoverflow.com/survey/2020#most-loved-dreaded-and-wanted).

A linguagem Rust não é uma propriedade da Mozilla, dentro da Mozilla research labs existia uma pessoa (Graydon Hoare), que começou a criar este projeto.

A Amazon é uma sponsor,  e está sendo utilizada por diversas empresas, por exemplo pela Apple, Atlassian, Cloudflare, Facebook, Dropbox e Discord.

O melhor método para começar a aprender Rust hoje é pelo livro, pois foi criado e é mantido pelo time core do Rust. Segue o link nas referencias.

Temos também o canal na Twitch do CodeShow que eu tenho acompanhado e está apresentando um curso de Rust toda quinta-feira. Segue link nas referencias.

Se você se interessou assim como eu por essa linguagem fantástica, deixe um comentário, e continue acompanhando os próximos posts, onde começaremos a realmente utilizar essa poderosa linguagem.

# Referencias
[](https://www.rust-lang.org/pt-BR/)[Site Oficial](https://www.rust-lang.org/pt-BR/)

[](https://joeprevite.com/rust-lang-ecosystem)[Ecossistema](https://joeprevite.com/rust-lang-ecosystem)

[](http://www.arewelearningyet.com/)[Machine Learning e afins](http://www.arewelearningyet.com/)

[](https://doc.rust-lang.org/book/)[O livro de Rust](https://doc.rust-lang.org/book/)

[](https://www.twitch.tv/codeshow)[CodeShow](https://www.twitch.tv/codeshow)