Você está na página 1de 41

Disciplina: Linguagens de Programação

Professor: Dr. Luis Fernando Maia Santos Silva

Alunos:
João Marcelo Diniz M. da Silva
Histórico
Desenvolvimento (2006 – 2012)
→ Originária de um projeto pessoal de Graydon Hoare, então pesquisador da
Mozilla (2006);
→ Patrocínio da Mozilla para desenvolvimento do Servo (2009);
→ Rust é oficialmente anunciado pela Mozilla (2010);
→ O primeiro compilador foi escrito em OCalm e, posteriormente, em LLVM;
→ Compilador próprio escrito em Rust (2011);
Evolução (2012 – 2019)
→ Versão 0.2 (2012): adição de Classe;
→ Versão 0.3 (2012): adição de “Destructors” e Polimorfismo;
→ Versão 0.4 (2012):
- remoção de Classe, que foram substituídas por Structs;
- adição da tipagem estática e remoção da análise de estado-tipo;

→ Versão 1.0 (2014):


Versão estável e concorrente das linguagens C++, Go, D e Nim;
Demissões e Rust Foundation (2020 – )

→ Mozilla dissolve equipe por trás do Servo (2020);


→ É anunciada a criação da Rust Foundation (2021);
Gerenciamento de Memória
Gerenciamento de Memória
Rust NÃO POSSUI Garbage Collector;
Rust NÃO POSSUI Gestão de memória Manual [malloc() || free()];

Como gerenciar a memória?


→ Sistema de Tipos;
→ Ownership e Borrowing;
Regiões de Memória – STATIC
Conteúdo:
→ O programa binário, as variáveis estáticas e strings literais;
→ Tamanho de compilação conhecido (tamanho as variáveis);

Tamanho: Limpeza:
→ Fixo; → Final do programa

Tempo de Vida:
→ Programa
Regiões de Memória – STACK (pilha)
Conteúdo:
→ Argumento de funções, variáveis locais(escopo);
→ Tamanho de compilação conhecido (tamanho as variáveis);

Tamanho: Limpeza:
→ Dinâmico (tamanho da pilha); → Retorno da função

Tempo de Vida:
→ Função (escopo)
Regiões de Memória – HEAP
Conteúdo:
→ Valores dinâmicos, valores de tamanho dinâmicos (String);
→ Tamanho de compilação desconhecido;

Tamanho: Limpeza:
→ Dinâmico (limite do computador); → R.A.I.I. (drop) [Rust]

Tempo de Vida:
→ A definir pelo programador ou pela linguagem
Borrow Checker

→ Verifica a gestão de memória feita pelo programador;


→ Tempo de Compilação;
→ Checa em nível de FUNÇÃO;
→ Possui mensagens de erros específicas;
Borrow Checker
Segmentation Fault → acessar um ponto da memória não autorizado para sua aplicação;

Memory Leak → memória não desalocada após uso;

Dangling Pointers → ponteiros que não apontam para nenhum valor ou área de valor;

Double Free → limpar um mesmo espaço de memória duas vezes;

Use after free → aponta para um espaço de memória já limpo;

Data Races → exemplo: uma lista que é alterada por diferentes métodos | problema de
integridade;
Copy e Referência
main () -> STACK HEAP

X 43

y 43
main () -> STACK HEAP

X 43

y
Ownership — Princípios

I. Cada valor na memória pertence a uma variável chamada


proprietário (owner);
II. Todo valor tem exatamente um proprietário;
III. Se o proprietário (owner) sair do escopo, o valor será descartado e
o espaço de memória será liberado;

Borrowing
IV. Referência a valores (&)
main () -> STACK HEAP

nome_1 S(“Diniz”)
main () -> STACK HEAP

nome_1

nome_2 S(“Diniz”)
Em funções
HEAP
main () -> STACK

name

say_good_morning() -> STACK

name S(“Diniz”)
Borrowing em funções
HEAP
main () -> STACK

name S(“Diniz”)

say_good_morning() -> STACK

&name
Estruturas de controle e repetição
Expressões IF
➔ Em Rust todas as expressões IF começam com a palavra-chave ``if'', seguida por
uma condição e chaves abrindo e fechando o bloco.
➔ Ao contrário de linguagens como Ruby e JavaScript, o Rust não tentará converter
automaticamente tipos não booleanos em booleanos.
Várias condições com If e Else

➔ Embora 6 seja divisível por 2, em Rust o bloco é executado apenas para a primeira
condição verdadeira e, uma vez que encontra uma, nem verifica o resto.
Repetição com Loops

➔ Rust tem três tipos de loops: loop, while, e for.

➔ Código de repetição com loop


Loops While e For
Loop for
Loop while
Subprogramas
Funções
Se define uma função em Rust digitando fn seguido por um nome de função e um conjunto de
parênteses. Os colchetes informam ao compilador onde o corpo da função começa e termina.
Parâmetros

Nas assinaturas de função, você deve declarar o tipo de cada parâmetro. Esta é uma decisão
deliberada no design do Rust.
Declarações e Expressões
Funções com valores de retorno

Você também pode gostar